作者:手机用户40405729304 | 来源:互联网 | 2023-09-15 22:03
今天分享一些Servlet的常用对象的小知识.一.常用的请求方式1.地址栏输入2.超链接3.From表单4.ajax:通过JQuery中的ajax().get().post().g
今天分享一些Servlet的常用对象的小知识.
一.常用的请求方式 1.地址栏输入 2.超链接 3.From表单 4.ajax : 通过JQuery中的ajax(). get(). post().getJSON()等方法. 5.请求转发 6.重定向
二.HttpServletRequest对象 作用:用来接收客户端发送3过来的请求信息,1常用方法:
**getRequestURL() 获取客户端发出请求时的完整URL** getRequestURI() 获取请求行中的资源名称部分项目名称开始 getQueryString() 获取请求行中的参数部分 **getMethod() 获取客户端请求方法** getProtocol() 获取HTTP版本号 getContextpath() 获取webapp名字
2.获取请求头
3.获取客户端请求参数(客户端提交的数据)
**getParameter(name) 获取指定名称的参数** getParameterValues(String name) 获取指定名称参数的所有值 getParmeterNames() 获取一个包含请求消息的所有参数名的Enumeration对象 getParmeterMap() 返回一个保存了请求消息中的所有参数名称和值的Map对象
4.请求乱码解决 乱码原因: 由于现在的 request 属于接收客户端的参数 ,所以必然有其默认的语言编码,主要是由于在解析过程中默认使用的编码方式为 ISO-8859-1(此编码不支持中文),所以解析时一定会出现乱码 解决方案: 1.只针对POST请求(GET请求无效,处理所有的参数)
request.setCharacterEncoding("UTF-8");
2.GET请求/POST请求通用(如果本身不乱码.设置后反而会出现另外一种乱码:而且一次只能处理一个参数)
new String(request.getParameter(name).getBytes("ISo-8859-1"),"UTF-8")
PS:Tomcat8起,以后的GET方式请求是不会出现乱码的. 5.请求转发 是一种服务器行为,客户端请求到底后,服务器进行转发,地址栏中的URL不会变更, 从始至终只有一个请求发出.
request.getRequestDispatcher("跳转的路径").forward(request,response); 1、服务端行为,由服务器控制跳转 2、跳转后地址栏不发生改变 3.从始至终只有一个请求发出,请求对象可以共享(request和response对象是同一个)
6.request作用域对象. 通过该对象可以在一个请求中传递数据,作用范围:在一次请求中有效,即服务器跳转有效。 方法
1.request.setAttribute():设置域对象内容; 2.request.getAttribute(String name)::获取域对象内容 3.request.removeAttribute(String name): 删除域对象内容
request 域对象中的数据在一次请求中有效,则经过请求转发,request 域中的数据依然 存在,则在请求转发的过程中可以通过 request 来传输/共享数据。
三.HttpServletResponse 对象 1.HttpServletResponse 的主要功能用于服务器对客户端的请求进行响应,将Web 服务器处理后的结果返回给客户端。 service()方法中形参接收的是HttpServletResponse 接口的实例化对象,这个对象中封装了向客户端发送数据、发送响应头,发送响应状态码的方法。
2.常用方法 3.刷新和页面自动跳转 所有头信息都是随着请求和回应自动发送到服务器端(客户端),在response 中一个比 较常用的头信息就是刷新的指令,可以完成定时刷新的功能.
resp.setHeader("refresh","2");
对于刷新的头信息,除了定时的功能外,还具备了定时跳转的功能,可以让一个页面定时跳转到一个指定的页面。(已经注册成功,两秒后跳转到登陆页面)
response.setHeader("refresh","3;URL=ok.html");
但是这种跳转不是万能的,有时候根本就无法进行跳转操作,返回后刷新不会跳转;对于这种定时跳转的头信息,也可以采用 HTML 的方式进行设置,HTML 本身也可以设 置头信息。(客户端跳转) 4. 数据响应 5. 接收到客户端请求后,可以通过 HttpServletResponse 对象直接进行响应, 响应时需要获取输出流,有两种形式
getWriter() 获取字符流(只能响应回字符); getOutputStream()获取字节流(能响应一切数据) 响应回的数据到客户端被浏览器解析. PS:两者不能同时使用 java.lang.IllegalStateException: getWriter() has already been called for this response
setContentType() 设置数据的响应类型
6响应乱码问题
乱码原因: 服务器响应的数据也会经过网络传输,服务器端有一种编码方式,在客户端也存在一种编码方式,当两端使用的编码方式不同时则出现乱码。 注:如果服务端和客户端编码一致,但编码不支持中文,也会乱码。 乱码情况: getWriter()的字符乱码 对于 getWriter()获取到的字符流,响应中文必定出乱码,由于服务器端在进行编码时默认会使用 ISO-8859-1 格式的编码,该编码方式并不支持中文。 1、设置服务端的编码 resp.setCharacterEncoding("UTF-8"); getOutputStream()字节乱码 对于 getOutputStream()方式获取到的字节流,响应中文时,由于本身就是传输的字节, 所以此时可能出现乱码,也可能正确显示。 解决方案: 同时设置服务端和客户端的编码及响应类型 resp.setContentType("text/html;charset=UTF-8"); 总结: 要想解决响应的乱码,只需要保证使用支持中文的编码格式。并且保证服务器端 和客户端使用相同的编码方式即可。 setContentType() 设置数据的响应类型及编码
四.重定向 重定向是一种服务器指导,客户端的行为。客户端发出第一个请求,被服务器接收,经过处理服务器进行响应 与此同时,服务器给客户端一个地址(下次请求的地址 resp.sendRedirect(“url”);), 当客户端接收到响应后,立刻、马上、自动根据服务器 给的地址进行请求的发送第二个请求,服务器接收请求并作出响应,重定向完成。 从描述中可以看出重定向当中有两个请求存在,并且属于客户端行为。
五…路径问题 相对路径: 相对于当前资源的路径 绝对路径: 资源的完整路径 完整绝对路径:以 http://开头的,该种绝对路径已经跨域,即任何地方的资源都能访问 部分绝对路径:以"/"开头,从当前域名|IP|主机后的端口号开始的,不能跨域
"/"的含义 请求转发:代表的是 http://localhost:8080/站点名/ 重定向(客户端跳转):代表的是 http://localhost:8080/
最后做一个请求转发和重定向区别
请求转发 1、地址栏不发生改变 2、服务端跳转 3、只有一次请求 4、request作用域共享 (一次请求中有效) 5、跳转的地址定位到站点名后 (请求转发到当前项目的资源路径) 重定向 1、地址栏发生改变 2、客户端跳转 3、存在两次请求 4、request作用域不共享 5、跳转的地址定位到http (可以重重定向到任意地址)