JSP 中request与response的用法详解

概要:
在学习这两个对象之前,我们应该已经有了http协议的基本了解了,如果不清楚http协议的可以看我的关于http协议的介绍。因为其实request和response的使用大部分都是对http协议的操作。
request对象的介绍
我们先从request对象进行介绍:
我们知道http协议定义了请求服务器的格式:
请求行
请求头
空格
请求体(get请求没有请求体)
好了,这里我们就不详细介绍了,我们只看几个应用就可以了,没什么难度:
应用1 获取请求头
/**
* 获取HTTP请求头
* String getHeader(String name),适用于单值头
* int getIntHeader(String name),适用于单值int类型的请求头
* long getDateHeader(String name),适用于单值毫秒类型的请求头
* Enumeration<String> getHeaders(String name),适用于多值请求头
*
*
*/
public class CServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String ip = request.getRemoteAddr();//获取IP地址
String method = request.getMethod();//获取请求方式
System.out.println(ip);
System.out.println(method);
getLiuLanQi(request);
protectMethod(request, response);
}
//防盗链
public void protectMethod(HttpServletRequest request,
HttpServletResponse response) {
String url = request.getHeader("referer");
System.out.println(url);
if(url != null && url.equalsIgnoreCase("http://localhost:8080/day10/MyHtml.html") ) {
System.out.println("hi");
}
else {
response.setStatus(302);
response.setHeader("Location","/day10/MyHtml.html");
System.out.println("重定向");
}
}
//判断浏览器的类型
public void getLiuLanQi(HttpServletRequest request) {
String user = request.getHeader("User-Agent");
if(user != null) {
String userNoC = user.toLowerCase();
if(userNoC.contains("chrome")) {
System.out.println("浏览器类型:谷歌" );
}
else if(userNoC.contains("firefox/")) {
System.out.println("浏览器类型:火狐");
}
else {
System.out.println("浏览器类型:IE");
}
}
else {
System.out.println("null");
}
}
}
应用2获取URL路径
/**
* 获取请求URL
http://localhost:8080/day10_2/AServlet?username=xxx&password=yyy
> String getScheme():获取协议,http
> String getServerName():获取服务器名,localhost
> String getServerPort():获取服务器端口,8080
> *****String getContextPath():获取项目名,/day10_2
> String getServletPath():获取Servlet路径,/AServlet
> String getQueryString():获取参数部分,即问号后面的部分。username=xxx&password=yyy
> String getRequestURI():获取请求URI,等于项目名+Servlet路径。/day10_2/AServlet
> String getRequestURL():获取请求URL,等于不包含参数的整个请求路径。http://localhost:8080/day10_2/AServlet
*
*
*/
public class DServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println(request.getScheme());
System.out.println(request.getServerName());
System.out.println(request.getServerPort());
System.out.println(request.getContextPath());
System.out.println(request.getServletPath());
System.out.println(request.getQueryString());
System.out.println(request.getRequestURI());
System.out.println(request.getRequestURL());
}
}
应用3获取请求参数
/**
*
* 请求参数:有一个参数一个值的,还有一个参数多个值!
> *****String getParameter(String name):获取指定名称的请求参数值,适用于单值请求参数
> String[] getParameterValues(String name):获取指定名称的请求参数值,适用于多值请求参数
> Enumeration<String> getParameterNames():获取所有请求参数名称
> *****Map<String,String[]> getParameterMap():获取所有请求参数,其中key为参数名,value为参数值。
*
*/
public class EServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request,response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");//调用他来解决乱码问题的,不会的可以看我写的解决乱码的那一篇
String name = request.getParameter("name");
String password = request.getParameter("password");
String[] aihao = request.getParameterValues("aihao");
response.setHeader("content-type", "text/html;charset=utf-8");
PrintWriter pw = response.getWriter();
pw.println("name:" + name + "<br/>");
pw.println("password:" + password + "<br/>");
pw.print("aihao");
for (int i = 0; i < aihao.length; i++) {
switch (i) {
case 1:
pw.print("吃饭");
break;
case 2:
pw.print("睡觉");
break;
case 3:
pw.print("打豆豆");
break;
default:
break;
}
}
pw.close();
}
}
<!-- 用于发送请求的html -->
<html>
<head>
<title>denglu.html</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
</head>
<body>
<form action="/day10/EServlet" method="post"><!-- 通过post方法提交 -->
姓名:<input type="text" name="name"/><br/>
密码:<input type="password" name="password"><br/>
爱好:<input type="checkbox" name="aihao" value="1"/>吃饭
<input type="checkbox" name="aihao" value="2"/>睡觉
<input type="checkbox" name="aihao" value="3"/>打豆豆
<input type="submit" value="提交">
</form>
</body>
</html>
应用4设置request对象属性
用来实现同一个应用程序servlet之间值得传递,我们还用到了转发
/**
*
** request域
Servlet中三大域对象:request、session、application,都有如下三个方法:
> void setAttribute(String name, Object value)
> Object getAttribute(String name)
> void removeAttribute(String name);
> 同一请求范围内使用request.setAttribute()、request.getAttribute()来传值!前一个Servlet调用setAttribute()保存值,后一个Servlet调用getAttribute()获取值。
*
*/
public class FServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setAttribute("name","weijinhao");
request.setAttribute("password", "123");
RequestDispatcher rd = request.getRequestDispatcher("/GServlet");
rd.forward(request, response);
}
}
public class GServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String name = (String)request.getAttribute("name");
String password = (String)request.getAttribute("password");
response.setHeader("content-type", "text/html;charset=utf-8");
PrintWriter pw = response.getWriter();
pw.println("name:" + name + "<br/>");
pw.println("password:" + password + "<br/>");
pw.close();
}
}
好了,request的用法大致就是这摸多了。
让我们来看看response对象吧。
response对象的使用
http协议定义了响应浏览器的格式:
响应行
响应头
空格
响应体
response对象的大致应用是用在设置响应码,设置响应头,及设置响应正文。
应用1设置响应正文
/**
* response的正文
* 1,字符流
* 2,字节流
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//String n = "hello javaweb";
//byte[] b = n.getBytes();
//字节流的使用
/*ServletOutputStream outputStream = response.getOutputStream();
outputStream.write(b);
outputStream.close();*/
//字符流的使用
/*PrintWriter p = response.getWriter();
p.write(n);
p.close();*/
//commoms工具包的使用
FileInputStream fileInputStream = new FileInputStream("C:/Users/74087/Desktop/6226354_994604.jpg");
byte[] b = IOUtils.toByteArray(fileInputStream);
ServletOutputStream outputStream = response.getOutputStream();
outputStream.write(b);
outputStream.close();
}
}
应用2 设置响应码和响应头
/**
*response 的响应码
*1, sendError(int sc)//发送错误代码
*2, sendError(int sc, java.lang.String msg) //发送错误代码及描述
*3, setStatus(int sc) //发送成功响应代码
*response 的响应头
*1, setDateHeader(java.lang.String name, long date)
*2, setHeader(java.lang.String name, java.lang.String value)
*3, setIntHeader(java.lang.String name, int value)
* 下面的和上面的作用一样但是是为了进行多值的添加
* addDateHeader(java.lang.String name, long date)
* addHeader(java.lang.String name, java.lang.String value)
* addIntHeader(java.lang.String name, int value)
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//sendNum(response);
//sendRe(response);
//refresh(response);
//noCache(response);
}
//禁用浏览器缓存
public void noCache(HttpServletResponse response) {
response.setHeader("Cache-Control","no-cache");
response.setHeader("pragma","0");
response.setHeader("expires","no-cache");
}
//自动跳转
public void refresh(HttpServletResponse response) {
response.setHeader("refresh", "5;url=http://www.baidu.com");
}
//重定向的使用
public void sendRe(HttpServletResponse response) {
response.setStatus(302);
response.setHeader("Location", "http://www.baidu.com");
}
public void sendNum(HttpServletResponse response) throws IOException {
response.setStatus(200);
response.sendError(404);
response.sendError( 404, "ser accept your request but i don't want to you see my web page");
}
}
如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# JSP
# 中request与response
# 中request与response使用方法详解
# jsp 使用request为页面添加静态数据的实例
# JSP中Servlet的Request与Response的用法与区别
# JSP的request对象实例详解
# JSP request.setAttribute()详解及实例
# jsp Request获取url信息的各种方法对比
# JSP利用过滤器解决request中文乱码问题
# JSP用过滤器解决request getParameter中文乱码问题
# Jsp中request的3个基础实践
# 适用于
# 好了
# 看我
# 都是
# 重定向
# 错误代码
# 几个
# 都有
# 让我们
# 多个
# 就不
# 如有
# 三大
# 不清楚
# 这两个
# 工具包
# 希望能
# 还有一个
# 来看看
# 火狐
相关文章:
阿里云高弹*务器配置方案|支持分布式架构与多节点部署
Swift中循环语句中的转移语句 break 和 continue
如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南
零基础网站服务器架设实战:轻量应用与域名解析配置指南
如何在七牛云存储上搭建网站并设置自定义域名?
广州美橙建站如何快速搭建多端合一网站?
定制建站价位费用解析与套餐推荐全攻略
南阳网站制作公司推荐,小学电子版试卷去哪里找资源好?
怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?
制作网站公司那家好,网络公司是做什么的?
官网自助建站系统:SEO优化+多语言支持,快速搭建专业网站
赚钱网站制作软件,建一个网站怎样才能赚钱?是如何盈利的?
浙江网站制作公司有哪些,浙江栢塑信息技术有限公司定制网站做的怎么样?
香港服务器租用每月最低只需15元?
打鱼网站制作软件,波克捕鱼官方号怎么注册?
html制作网站的步骤有哪些,iapp如何添加网页?
如何在Ubuntu系统下快速搭建WordPress个人网站?
建站主机CVM配置优化、SEO策略与性能提升指南
如何在自有机房高效搭建专业网站?
专业公司网站制作公司,用什么语言做企业网站比较好?
c++怎么编写动态链接库dll_c++ __declspec(dllexport)导出与调用【方法】
建站之星如何快速生成多端适配网站?
淘宝制作网站有哪些,淘宝网官网主页?
全景视频制作网站有哪些,全景图怎么做成网页?
Android自定义控件实现温度旋转按钮效果
如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?
,有什么在线背英语单词效率比较高的网站?
如何快速上传自定义模板至建站之星?
网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?
Python如何创建带属性的XML节点
如何快速搭建高效WAP手机网站?
如何用免费手机建站系统零基础打造专业网站?
如何用y主机助手快速搭建网站?
如何基于云服务器快速搭建网站及云盘系统?
,网页ppt怎么弄成自己的ppt?
如何获取开源自助建站系统免费下载链接?
定制建站如何定义?其核心优势是什么?
网站网页制作电话怎么打,怎样安装和使用钉钉软件免费打电话?
,怎么在广州志愿者网站注册?
建站之星CMS五站合一模板配置与SEO优化指南
整人网站在线制作软件,整蛊网站退不出去必须要打我是白痴才能出去?
正规网站制作公司有哪些,目前国内哪家网页网站制作设计公司比较专业靠谱?口碑好?
Dapper的Execute方法的返回值是什么意思 Dapper Execute返回值详解
网站建设制作、微信公众号,公明人民医院怎么在网上预约?
威客平台建站流程解析:高效搭建教程与设计优化方案
存储型VPS适合搭建中小型网站吗?
非常酷的网站设计制作软件,酷培ai教育官方网站?
微网站制作教程,不会写代码,不会编程,怎么样建自己的网站?
如何在Golang中处理模块冲突_解决依赖版本不兼容问题
香港服务器网站生成指南:免费资源整合与高速稳定配置方案
*请认真填写需求信息,我们会在24小时内与您取得联系。