1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 转发和重定向和request域对象

转发和重定向和request域对象

时间:2018-11-01 00:45:07

相关推荐

转发和重定向和request域对象

利用请求域传递对象(request域对象)重定向和转发的区别(转发)(*****)* 域对象ServletContext:服务器一启动,为每个web应用创建一个ServletContext对象,所有servlet实例共享对象。request:一次请求的范围。* setAttribute("","");* getAttribute("");* removeAttribute("");* getRequestDispatcher(String path) ,返回是RequestDispatcher:对象* RequestDispatcher:* forward(ServletRequest request, ServletResponse response)(经常使用) 转发的方法* include(ServletRequest request, ServletResponse response)(了解) 包含

request利用请求域传递对象

request对象同时也是一个域对象,开发人员通过request对象在实现转发时,把数据通过request对象带给其它web资源处理

setAttribute方法

getAttribute方法

removeAttribute方法

getAttributeNames方法

request对象提供了一个getRequestDispatcher方法,该方法返回一个RequestDispatcher对象,调用这个对象的forward方法可以实现请求转发,从而共享请求中的数据

请求重定向和请求转发的区别

RequestDispatcher.forward方法只能将请求转发给同一个WEB应用中的组件;而HttpServletResponse.sendRedirect 方法还可以重定向到同一个站点上的其他应用程序中的资源,甚至是使用绝对URL重定向到其他站点的资源。 如果传递给HttpServletResponse.sendRedirect 方法的相对URL以“/”开头,它是相对于服务器的根目录;如果创建RequestDispatcher对象时指定的相对URL以“/”开头,它是相对于当前WEB应用程序的根目录。 调用HttpServletResponse.sendRedirect方法重定向的访问过程结束后,浏览器地址栏中显示的URL会发生改变,由初始的URL地址变成重定向的目标URL;调用RequestDispatcher.forward 方法的请求转发过程结束后,浏览器地址栏保持初始的URL地址不变。 HttpServletResponse.sendRedirect方法对浏览器的请求直接作出响应,响应的结果就是告诉浏览器去重新发出对另外一个URL的访问请求;RequestDispatcher.forward方法在服务器端内部将请求转发给另外一个资源,浏览器只知道发出了请求并得到了响应结果,并不知道在服务器程序内部发生了转发行为。 RequestDispatcher.forward方法的调用者与被调用者之间共享相同的request对象和response对象,它们属于同一个访问请求和响应过程;而HttpServletResponse.sendRedirect方法调用者与被调用者使用各自的request对象和response对象,它们属于两个独立的访问请求和响应过程。

package cn.learn.request;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/*** 重定向和转发* @author Administrator**/public class RequestDemo3 extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {// request域设置内容request.setAttribute("name", "凤姐");// 完成重定向的工作(客户端端绝对路径)// response.sendRedirect("/day10/request4");// 转发(路径服务器的绝对路径)request.getRequestDispatcher("/request4").forward(request, response);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}

package cn.learn.request;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class RequestDemo4 extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {// 获取String value = (String) request.getAttribute("name");// 输出中文response.setContentType("text/html;charset=UTF-8");response.getWriter().write("访问到了demo4... "+value);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}

URL特殊字符转义规则

常用转义规则

空格换成加号(+)

+换成%2B

正斜杠(/)分隔目录和子目录 换成%2F

问号(?)分隔URL和查询 换成%3F

百分号(%)制定特殊字符 换成%25

#号指定书签 换成%23

•&号分隔参数 换成%26

.URLEncoder和 .URLDecoder

Request的开发细节

使用转发的方法后,response的缓冲区会被清空。

response.getWriter().write("aaa");

request.getRequestDispatcher("/demo2").forward(request, response);

response.getWriter().write("bbb");

RequestDispatcher

include方法:

RequestDispatcher.include方法用于将RequestDispatcher对象封装的资源内容作为当前响应内容的一部分包含进来,从而实现可编程的服务器端包含功能

被包含的Servlet程序不能改变响应消息的状态码和响应头,如果它里面存在这样的语句,这些语句的执行结果将被忽略

底层使用的是子节流,所以输出内容只能使用字节流。

include在程序执行上效果类似forward,但是使用forward只有一个程序可以生成响应,include可以由多个程序一同生成响应 ----- 常用来页面布局

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。