通过ServletContext 完成服务器程序转发
什么是转发? 转发和重定向区别 ?跟着小编一起彻底征服它吧!
1. 转发
再转发中我们用到了getRequestDispatcher(java.lang.String path)
我们先编辑两个web程序AServlet和ABervlet加以说明
AServlet 源码如下:
package cn.legeyung.servlet;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class AServlet extends HttpServlet{
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
System.out.println("AServlet执行了...................");
//转发
ServletContext context=getServletContext();
//转发给BServlet, 这里/表示
RequestDispatcher dispatcher=context.getRequestDispatcher("/b");
dispatcher.forward(req, resp);
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
}
}
BServlet 源码如下:
package cn.legeyung.servlet;
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 BServlet extends HttpServlet{
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
System.out.println("BServlet执行了...................");
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
}
}
接着我们找到WebRoot/WEB-INF/web.xml在文件里面进行配置
<servlet>
<servlet-name>AServlet</servlet-name>
<servlet-class>cn.legeyung.servlet.AServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>AServlet</servlet-name>
<url-pattern>/a</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>BServlet</servlet-name>
<servlet-class>cn.legeyung.servlet.BServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>BServlet</servlet-name>
<url-pattern>/b</url-pattern>
</servlet-mapping>
然后我们启动tomcat,输入http://localhost:8080/ServletTest/a
注意:转发之后http://localhost:8080/ServletTest/a不变
2.重定向
在重定向中我们用到了setHeader(arg0, arg1);
我们先编辑两个web程序CServletDBervlet加以说明
CServlet 源码如下:
package cn.legeyung.servlet;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class CServlet extends HttpServlet{
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
System.out.println("CServlet执行了...................");
//重定向
resp.setStatus(302);
//这里的/表示当前web服务器
resp.setHeader("Location", "/ServletTest/d"); //冲客户端访问,必须含有工程路径
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
}
}
DServlst源码如下:
package cn.legeyung.servlet;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class DServlet extends HttpServlet{
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
System.out.println("DServlet执行了...................");
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
}
}
接着我们找到WebRoot/WEB-INF/web.xml在文件里面进行配置
<servlet>
<servlet-name>CServlet</servlet-name>
<servlet-class>cn.legeyung.servlet.CServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CServlet</servlet-name>
<url-pattern>/c</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>DServlet</servlet-name>
<servlet-class>cn.legeyung.servlet.DServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DServlet</servlet-name>
<url-pattern>/d</url-pattern>
</servlet-mapping>
然后我们启动tomcat,输入http://localhost:8080/ServletTest/c
注意:重定 向之后http://localhost:8080/ServletTest/c将变为http://localhost:8080/ServletTest/d