一.HttpServletRequest接口的常用方法
HttpServletRequest接口的其他常用方法:
- 获取客户端的IP地址
String remoteAddr = request.getRemoteAddr ( );
- 设置请求体的字符集。
get请求在请求行上提交数据或post请求在请求体中提交数据。
(显然这个方法是处理POST请求的乱码问题。这种方式并不能解决get请求的乱码问题。)
Tomcat10之后,request请求体当中的字符集默认就是UTF-8,不需要设置字符集,不会出现乱码问题。
Tomcat9前〈包括9在内〉,如果前端请求体提交的是中文,后端获取之后出现乱码,怎么解决这个乱码?执行以下代码。 request.sefCharacterEncoding(“UTF-8”);
在Tomcat9之前(包括9〉,响应中文也是有乱码的,怎么解决这个响应的乱码?
response.setcontentType( “text/html ; charset=UTF-8”);
在Tomcat10之后,包括10在内,响应中文的时候就不在出现乱码问题了。以上代码就不需要设置UTF-8了。
注意一个细节
在Tomcat10包括10在内之后的版本,中文将不再出现乱码。(这也体现了中文地位的提升。)
get请求乱码问题怎么解决?
get请求发送的时候,数据是在请求行上提交的,不是在请求体当中提交的。
方案:修改CATALINA_HOME/conf/ server .xm1配置文件
注意:从Tomcat8之后,URIEncoding的黑默认值就是UTF-8,所以GET请求也没有乱码问题了。
- 获取应用的根路径
String contextPath = request.getcontextPath();
- 获取请求方式
String method = request.getMethod() ;
- 获取请求的URI
String uri = request.getRequestURI();// /aaa/testRequest
- 获取servlet path
String servletpath = request.getservletPath();// /testRequest
重定向和转发的区别和关系
转发
request.getRequestDispatcher(“/b”).forward(request,reponse);
重定向(重新定方向)
重定向时 路径需要以项目名开始,
response对象将这个路径 "/servlet01/b"相应给浏览器
浏览器又自发的想服务器发送了一次全新的请求:
http://localhost:8080/servlet01/b
所以浏览器用发送了俩次请求
第一次: http://localhost:8080/servlet01/a
第二次: http://localhost:8080/servlet01/b
最终浏览器地址栏上显示的地址是最后一次请求的地址,所以重定向会导致地址栏的地址发生改变
response.sendRedirect(request.getConnextPath() + “/b”);
形式上区别:
转发(一次请求)
在浏览器地址栏发送的请求是 http://localhost:8080/servlet01/a,最终请求结束后,浏览器的地址栏上还是这个没变
重定向(俩次请求)
在地址栏发送的请求是 http://localhost:8080/servlet01/a , 但是最后在浏览器地址栏显示的地址是 : http://localhost:8080/servlet01/b
转发和重定向的本质区别
转发:是由WEB服务器来控制的,A资源跳转至B资源,这个跳转动作是Tomcat服务器内部完成的
重定向:是浏览器完成的,具体跳转到哪个资源,是浏览器说了算
1.转发和重定向应该如何选择?什么时候使用转发,什么时候使用重定向?
如果在上一个Servlet当中向request域当中绑定了数据,希望从下一个Servlet当中把request域里面的数据取出来,使用转发机制。剩下所有的请求均使用重定向。(重定向使用较多。)
2.跳转的下一个资源有没有要求呢?必须是一个Servlet吗?
不一定,跳转的资源只要是服务器内部合法的资源即可。包括: Servlet、JSP、HTML…3.转发会存在浏览器的刷新问题。