ToB企服应用市场:ToB评测及商务社交产业平台
标题:
JavaWeb基础专项复习5——哀求对象和相应对象request and response
[打印本页]
作者:
何小豆儿在此
时间:
前天 15:55
标题:
JavaWeb基础专项复习5——哀求对象和相应对象request and response
系列文章目录
1、JavaWeb基础专项复习1——XML文件-CSDN博客
2、JavaWeb基础专项复习2——JSP文件-CSDN博客
3、JavaWeb基础专项复习2——Servlet相干知识-CSDN博客
4、JavaWeb基础专项复习4——会话对象Session and Cookie-CSDN博客
文章目录
系列文章目录
文章目录
1、Tomcat 哀求相应机制
2、HttpServletRequest 功能
2.1 获取哀求头数据
2.2 获取哀求相干其他方法
3、HttpServletRequest获取参数
3.1 通报参数方式
3.2 获取参数方法
3.3 中文乱码处置惩罚
3.3.1 POST 哀求:
3.3.2 GET 哀求:
3.6 HttpServletRequest哀求转发
3.7 request 作用域
4、HttpServletResponse 功能
4.1 功能介绍
4.2 设置状态码和其他方法
4.3 设置相应头信息
4.4 中文乱码题目
4.5 重定向
1、Tomcat 哀求相应机制
Web 服务器接收到客户端的 HTTP 哀求后,会为每次哀求创建request和response对象,分别用于获取客户端数据和向客户端输出数据。
2、HttpServletRequest 功能
HttpServletRequest在JavaWeb中非常紧张的一个类。它是Servlet的service()方法的参数之一。所以必须要掌握它
request的功能可以分为以下几种:
封装了哀求头数据;
封装了哀求正文数据,如果是GET哀求,那么就没有正文;
request是一个
域对象
,可以把它当成Map来添加获取数据;
做哀求的转发(一次哀求一次数据)·(重定向(两次哀求,两次数据))
2.1 获取哀求头数据
通过request.getHeader("哀求头名称")获取指定哀求头数据
request.getHeaderNames()可获取所有哀求头名称。
response.setContentType("text/html;charset=utf-8");
Enumeration names = request.getHeaderNames();
while(names.hasMoreElements()) {
String name = (String)names.nextElement();
String value = request.getHeader(name);
System.out.println(name + ": " + value);
response.getWriter().println(name + ": " + value + "<br/>");
}
复制代码
2.2 获取哀求相干其他方法
涵盖获取哀求正笔墨节数、哀求范例、哀求方法、客户端 IP 地址等众多方法,还能操纵哀求 URL 各部门信息。
int getContentLength():获取哀求正文的字节数,GET哀求没有正文,没有正文返回-1;
String getContentType()
:
获取哀求范例,如果哀求是GET,那么这个方法返回null;如果是POST哀求,那么默认为application/x-www-form-urlencoded(理解为字符串范例),别的范例以后再学;
String getMethod():返回哀求方法,例如:GET post delete put
Locale getLocale():返回当前客户端浏览器支持的Locale。java.util.Locale表示国家和言语,这个东西在国际化中很有效;
String getCharacterEncoding()
:
获取哀求编码,如果没有setCharacterEncoding(),那么返回null。表示利用ISO-8859-1编码;GBK UTF-8
void setCharacterEncoding(String code):设置哀求编码,只对正文有效!留意,对于GET而言,没有正文!!!所以此方法只能对POST哀求中的参数有效!
http://localhost:8080/hello/oneServlet?name=zhangSan
String getContextPath()
:
返回上下文路径,例如:/项目名称
String getQueryString():返回哀求URL中的参数,例如:name=zhangSan
String getRequestURI():返回哀求URI路径,例如:/hello/oneServlet
StringBuffer getRequestURL():返回哀求URL路径,例如:http://localhost/hello/oneServlet,即返回除了参数以外的路径信息;
String getServletPath():返回Servlet路径,例如:/oneServlet
String getRemoteAddr():返回当前客户端的IP地址;
String getRemoteHost():返回当前客户端的主机名,但这个方法的实现还是获取IP地址;
int getRemotePort():返回客户端的端口号,每次哀求都会变;
String getSchema():返回哀求协议,例如:http;
String getServerName():返回主机名,例如:localhost
int getServerPort():返回服务器端口号,例如:80
3、
HttpServletRequest
获取参数
3.1 通报参数方式
GET 和 POST,GET 可在地址栏、超链接、表单中通报参数;POST 主要在表单中通报。
GET:
地址栏中直接给出参数:http://localhost/param/ParamServlet?p1=v1&p2=v2;
超链接中给出参数:
<a href=” http://localhost/param/ParamServlet?p1=v1&p2=v2”>点一下</a>
表单中给出参数:<form method=”GET” action=”ParamServlet”>…</form>
Ajax
POST:
表单中给出参数:<form method=”POST” action=”ParamServlet”>…</form>
Ajax
3.2 获取参数方法
String getParameter(String name)获取单值参数;
String[] getParameterValues(String name)获取多值参数(如复选框);
Enumeration getParameterNames()获取所有参数名;
Map getParameterMap()获取所有参数的 Map 聚集。
单值参数接收示例
前台接收
<form action="ParamServlet" method="post">
<input type="text" name="p1"/><br/>
<input type="text" name="p2"/><br/>
<input type="submit" value="提交"/><br/>
</form>
<a href="ParamServlet?p1=v1&p2=v2">Param</a>
复制代码
后台接收
String s1 = request.getParameter("p1");
String s2 = request.getParameter("p2");
response.getWriter().print("p1 = " + s1 + "<br/>");
response.getWriter().print("p2 = " + s2 + "<br/>");
Enumeration names = request.getParameterNames();
while(names.hasMoreElements()) {
String name = (String)names.nextElement();
String value = request.getParameter(name);
System.out.println(name + " = " + value);
}
Map<String, String[]> map = request.getParameterMap();
Set<String> keySet = map.keySet();
for(String key : keySet){
String[] vals = map.get(key);
System.out.print(key+" :");
System.out.println(key+" :" + Arrays.toString(vals));
System.out.println();
}
复制代码
多值参数接收
多值参数主要就是多选checkbox
例如在注册表单中,如果让用户填写爱好,那么爱好大概就是多个。那么hobby参数就会对应多个值:
前台接收
<form action="ParamServlet" method="post">
上网:<input type="checkbox" name="hobby" value="netplay" /><br/>
踢球:<input type="checkbox" name="hobby" value="football" /><br/>
看书:<input type="checkbox" name="hobby" value="read" /><br/>
编程:<input type="checkbox" name="hobby" value="programme" /><br/>
<input type="submit" value="提交"/><br/>
</form>
复制代码
后台接收
String[] hobbies = request.getParameterValues("hobby");
System.out.println(Arrays.toString(hobbies));
Map<String, String[]> map = request.getParameterMap();
Set<String> keySet = map.keySet();
for(String key : keySet){
String[] vals = map.get(key);
System.out.println(key+" :" + Arrays.toString(vals));
}
复制代码
3.3 中文乱码处置惩罚
3.3.1 POST 哀求
:
我们知道,哀求信息中,只有POST存在正文,所谓POST参数编码就是就是哀求正文的编码。默认情况下,利用getParameter()获取POST哀求参数时,利用的是ISO-8859-1编码。
方法一,针对字符串本身举行手动转码
String name = request.getParameter("name");
name = new String(name.getBytes("ISO-8859-1"),"UTF-8");
System.out.println("name:"+name);
复制代码
方法二,在获取参数前利用
request.setCharacterEncoding("UTF-8")
设置编码。
request.setCharacterEncoding("UTF-8");
String name = request.getParameter("name");
System.out.println("name:"+name);
复制代码
对于每个哀求,只需要调用request的setCharacterEncodng()一次,然后所有getParameter()都会利用这个编码来解读参数。
但要留意,只对哀求正文有效,即POST参数。
该方法 必须放在获取参数值之前
3.3.2 GET 哀求
:
方法一,对字符串单独解码
String name = request.getParameter("name");
name = new String(name.getBytes("ISO-8859-1"),"UTF-8");
System.out.println("name:"+name);
复制代码
方法二,在 Tomcat 的server.xml中配置URIEncoding="UTF-8",但 Tomcat8.5 及以上版本无需设置即可支持 URL 通报中文。(
不建议利用get哀求通报中文参数
)
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8"/>
复制代码
3.6 HttpServletRequest
哀求转发
用于在 Servlet 中实行后台业务逻辑后跳转页面,地址栏不变,可跳转到静态页面或 Servlet,还能在哀求域内设置和获取属性值。
request.getRequestDispatcher("/success.html").forward(request, response);
复制代码
此时我们可以给request来设置当前域中的属性值,在该域之内(当前哀求完成之前)都能获得到该属性值。
request.setAttribute("name", "txjava");
request.getAttribute("name");
复制代码
3.7 request 作用域
范围是一次哀求相应内,每个线程哀求会新生成HttpServletRequest和HttpServletResponse对象。
ServletContext
ServletContext 代表整个 Web 应用步调的上下文,在服务器启动时为每个 Web 应用创建一个 ServletContext 对象,所有 Servlet 共享这个对象。它主要用于在整个 Web 应用的差别部门之间共享数据、获取 Web 应用的全局信息等。
HttpSession
HttpSession 用于在服务器端跟踪客户端的会话状态。每个客户端访问服务器时,服务器会为其创建一个唯一的 HttpSession 对象,通过会话 ID 来识别差别的客户端。它可以在用户的多次哀求之间保持数据,适用于存储用户的登录信息、购物车内容等。
HttpServletRequest
HttpServletRequest 代表客户端的哀求,当客户端向服务器发送哀求时,服务器会创建一个 HttpServletRequest 对象,该对象封装了客户端哀求的所有信息,如哀求头、哀求参数、哀求方法等.
4、HttpServletResponse 功能
request是哀求对象,而response是相应对象。
response对象用于相应client哀求,向客户输出信息。
他封装了JSP产生的相应,并发送到client以相应client哀求。
4.1 功能介绍
用于相应客户端哀求,包罗设置相应头信息、发送状态码、设置相应正文、重定向等功能。
设置相应头信息;addHeader(“reFresh”, “5;URL=xxxx”);
发送状态码;sendError(404);
设置相应正文;
getWriter().print(
“fdsfdsa
”)
;
重定向:
sendRedirect(
“path
”);
4.2 设置状态码和其他方法
response.setContentType("text/html;charset=utf-8")
设置相应范例和编码
response.setCharacterEncoding(
“utf-8
”)
:如果相应范例为文本,那么就需要设置文本的编码范例,然后浏览器利用这个编码来解读文本。
留意!
如果没有设置contentType,那么浏览器会认为contentType为text/html,如果没设置编码,那么默认为ISO-8859-1编码。所以以上两点在利用response返回结果之前必须设置。
response.setStatus(200):设置状态码
response.sendError(404, “您要查找的资源不存在”):发送错误状态码并表现错误信息。
4.3 设置相应头信息
response.setHeader(“contentType”, “text/html;charset=utf-8”):与setContentType()方法的功能相同。setContentType()方法属于便捷方法;
革新(定时重定向)
:response.setHeader("Refresh","5; URL=http://www.baidu.com"):5秒后自动跳转到百度主页。
4.4 中文乱码题目
通过setContentType("text/html;charset=utf-8")和setCharacterEncoding("UTF-8")解决。
response.setContentType("text/html;charset=utf-8");
response.setCharacterEncoding("UTF-8");
response.getWriter().write("张三");
复制代码
4.5 重定向
利用sendRedirect方法,可重定向到差别主机,会使request中的属性失效并开启新的request对象。
这一点与转发差别。在client浏览器上将会得到跳转后的地址,并又一次发送哀求链接;用户可以大概从浏览器的地址栏中看到跳转后的地址
response.sendRedirect("/param_demo/success.html");
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4