Servlet的应用---重定向和请求分配

Servlet的应用---重定向和请求分配

1.重定向和请求分派

(1)请求的重定向

HttpServletResponset接口提供的sendRedirect()方法用于生成302响应码和Location响应头,从而通知客户端去重新访问Location响应头中指定的URL,其完整的定义语法如下:

public void sendRedirect(String location) throws IOException;

其中的location参数指定了重定向的URL,它可以使用绝对URL和相对URL,Servlet容器会自动将相对URL转换成绝对URL后,再生成location头字段。

重定向的例子 response.sendRedirect(“secuse“);

注:重定向是两个servlet类结合而使用的,即是两次向服务器提交请求。一个servlet类不能完成操作,当用户运行到sendRedirect()时,会生成302响应码,意思是再次提交请求,在localtion的url的带领下,去访问secuess的servlet类,从而完成实现,但是在secuess中不能再次提交request的请求,否则返回的是null。因为每一次请求都是独一的。

(2)请求的分派

1.Servlet API中定义了一个RequestDispatcher接口,俗称请求分派器。它定义了如下两个方法:

(1)public void forward(ServletRequest request, ServletResponse response) throws ServletException,IOException;

(2)public void include(ServletRequest request, ServletResponse response) throws ServletException,IOException

2.请求的转发:

调用ServletContext接口提供的getRequestDispatcher(String url)方法。

调用ServletRequest接口提供的getRequestDispatcher(String url)方法

3.例子:

RequestDispatcher rd = request.getRequestDispatcher("fail");

//请求的转发,向前 ------------ 一个请求对象

rd.forward(request, response);

//请求的转发

rd.include(request, response);

forwrod和include的区别:forword是在页面跳转之后直接输出,不会再返回,而include则是把我当前的目录包含,输出

(3)两者比较:

1.请求转发只能是同一个web站点

重定向不仅可以定向到当前的web程序,还可以访问其他的站点的资源

2. 重定向在完成操作后,地址栏会发生变化,由初始的URL地址变成重定向的目标URL

请求转发过程结束后,浏览器地址栏保持初始的URL地址不变。

3.请求分派的发起者和被调用者之间共享相同的request实例和response实例,它们属于同一个“请求/响应”过程;而重定向的发起者和被调用者使用各自的request实例和response实例,它们各自属于独立的“请求/响应”过程

(4)利用请求域获取属性传递对象数据

HttpServletRequest接口中提供了几个方法用来操作请求实例中存储的对象:

– public void setAttribute(String name, Object obj):将对象存储进HttpServletRequest实例中。

– public Object getAttribute(String name):检索存储在HttpServletRequest实例中的对象。

– public Enumeration getAttributeNames():返回包含HttpServletRequest实例中的所有属性名的Enumeration对象

例子:

设置:

request.setAttribute("var1", "var1");

request.setAttribute("var2", "var3");

读取:

//枚举类型的获取

Enumeration enum1 = request.getAttributeNames();

//获取每一个名称所对应的值

while(enum1.hasMoreElements()){

//得到属性的名称

String s= (String) enum1.nextElement();

//得到属性的值

String var = (String) request.getAttribute(s);

System.out.println(s+"::"+var);

}

(5) ServletConfig和servletContext

系统在创建servlet实例之前,先读取xml文件,并封装给ServletConfig对象,来进行初始化

<!-- 在部署文件xml中必须有两个标签,分别为《servlet》和《servlet-map》

<servlet-mapping>

<servlet-name>FirstServlet</servlet-name>

<url-pattern>*.do</url-pattern>

</servlet-mapping>

*.do是可以把访问的名字随便写

-->

servletConfig对象封装了web.xml初始化的值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值