回顾:关于跳转有两种:
·客户端跳转:地址栏跳转之后改变,而且无法传递request范畴的属性,是所有的执行完毕之
后
在执行跳转,语法:response.sendRedirect()
·服务器段跳转:地址栏不发生变化,而且可以传递request范围的属性,属于无条件的跳转,
只要执行
立刻跳转,语法:<jsp:forward>
Servlet之中也是可以完成跳转的,而且既然Servlet本身已经存在了HttpServleResponse对象,
所以直接通过此对象的sendRedirect()方法就可以完成跳转操作;
package com.lid.servlet;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class ClientRedirectDemo extends HttpServlet{
public void doGet(HttpServletRequest req,HttpServletResponse
res) throws ServletException,IOException{
req.getSession().setAttribute("name","yuj");
req.setAttribute("info","lid-yuj");
res.sendRedirect("get_info.jsp");
}
public void doPost(HttpServletRequest
req,HttpServletResponse res) throws ServletException,IOException{
this.doGet(req,res);
}
}
编译上面的servlet;然后在web.xml中配置servlet映射;
<servlet>
<servlet-name>clientredirectdemo</servlet-name>
<servlet-class>com.lid.servlet.ClientRedirectDemo</servlet-
class>
</servlet>
<servlet-mapping>
<servlet-name>clientredirectdemo</servlet-name>
<url-pattern>/forward/ClientRedirectDemo</url-pattern>
</servlet-mapping>
get_info.jsp:
<%@ page contentType="text/html" pageEncoding="gbk"%>
<html>
<head><title>这是测试</title></head>
<body>
<%
request.setCharacterEncoding("gbk");
%>
<h3>session属性:<%=session.getAttribute("name")%></h3>
<h3>request属性:<%=request.getAttribute("info")%></h3>
</body>
</html>
输入:http://localhost/lid/forward/ClientRedirectDemo
执行完成之后,可以发现已经将session的属性的内容获得,而response的属性的内容
没有获得,原因是上面的是客户端的跳转,而客户端的跳转时无法取得request属性的值的;
因为servlet不能使用<jsp:forward>标签,如果想完成服务器端的跳转,必须依靠RequestDispatcher接
口
完成;---javax.servlet.RequestDispatcher;
因为RequestDispatcher是个接口,如果想使用此接口,必须对此接口进行实例化操作,但是此时只能依
靠
ServletRequest接口才可以完成;ServletRequest接口中有如下一个方法:
·getRequestDispatcher(String path)
package com.lid.servlet;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class ServerRedirectDemo extends HttpServlet{
public void doGet(HttpServletRequest req,HttpServletResponse res)
throws ServletException,IOException{
req.getSession().setAttribute("name","yuj");
req.setAttribute("info","lid-yuj");
//转备好跳转
RequestDispatcher rd=req.getRequestDispatcher
("get_info.jsp");
//完成跳转
rd.forward(req,res);
}
public void doPost(HttpServletRequest req,HttpServletResponse res)
throws ServletException,IOException{
this.doGet(req,res);
}
}
编译以上程序;在web.xml中配置servlet的映射路径;
<servlet>
<servlet-name>serverredirectdemo</servlet-name>
<servlet-class>com.lid.servlet.ServerRedirectDemo</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>serverredirectdemo</servlet-name>
<url-pattern>/forward/ServerRedirectDemo</url-pattern>
</servlet-mapping>
重启服务器;
输入:http://localhost/lid/forward/ServerRedirectDemo