Servlet的请求转发
第一个servlet程序
package servlet_practice;
import jakarta.servlet.RequestDispatcher;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
public class sevlt_RequestDeliever01 extends HttpServlet {
//1.定义:请求转发是指 服务器收到请求后 从一次资源跳转到另一个服务器资源的操作
//2.特点:a.浏览器的地址栏没有变化
//b.他们是一次请求
//c.他们共享Request的域数据
//d.可以转发到WEB-INF目录下
//e.不可以访问工程以外的资源
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取请求的参数
String username = req.getParameter("username");
System.out.println("数据为->"+username);
//确认数据 并传递至第二个servlet程序
req.setAttribute("key","servlet1的数据");
//得到servlet2程序的路径
RequestDispatcher requestDispatcher = req.getRequestDispatcher("/hello6");
//传递至servlet2程序
requestDispatcher.forward(req,resp);
}
}
第二个servlet程序
package servlet_practice;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
public class sevlt_RequestDeliever02 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取请求的参数
String username = req.getParameter("username");
System.out.println("数据为->"+username);
//查看sevlt_RequestDeliever01是否确认数据
Object key1 = req.getAttribute("key");
System.out.println("确认数据"+key1);
//处理自己的业务
System.out.println("sevlt_RequestDeliever02处理自己的业务");
}
}
web. xml的配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!--servlet标签给Tomcat配置Servlet程序-->
<servlet>
<!--servlet-name标签给Servlet程序起别名一般是类名-->
<servlet-name>sevlt_interface</servlet-name>
<!--servlet-class是Servlet程序的全类名-->
<servlet-class>servlet_practice.sevlt_interface</servlet-class>
</servlet>
<!--servlet-mapping标签给给Servlet程序配置访问地址-->
<servlet-mapping>
<!--servlet-name标签作用是告诉服务器 当前配置的地址给哪个Servlet程序使用-->
<servlet-name>sevlt_interface</servlet-name>
<!--url-pattern配置访问地址-->
<!--通常以/打头后面跟访问路径-->
<!--/ 斜杠在服务器解析时表示地址为 http://ip:port/工程路径
/hello 表示地址为http://ip:port/工程路径/hello
-->
<url-pattern>/hello</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>sevlt_extends</servlet-name>
<servlet-class>servlet_practice.sevlt_extends</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>sevlt_extends</servlet-name>
<url-pattern>/hello1</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>sevlt_config</servlet-name>
<servlet-class>servlet_practice.sevlt_config</servlet-class>
<init-param>
<!--是参数名-->
<param-name>username</param-name>
<!--是参数值-->
<param-value>root</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>sevlt_config</servlet-name>
<url-pattern>/hello2</url-pattern>
</servlet-mapping>
<!--context-param是上下文参数(它属于整个web工程)-->
<context-param>
<param-name>username</param-name>
<param-value>context</param-value>
</context-param>
<servlet>
<servlet-name>sevlt_context</servlet-name>
<servlet-class>servlet_practice.sevlt_context</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>sevlt_context</servlet-name>
<url-pattern>/hello3</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>sevlt_HttpServletRequest</servlet-name>
<servlet-class>servlet_practice.sevlt_HttpServletRequest</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>sevlt_HttpServletRequest</servlet-name>
<url-pattern>/hello4</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>sevlt_RequestDeliever01</servlet-name>
<servlet-class>servlet_practice.sevlt_RequestDeliever01</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>sevlt_RequestDeliever01</servlet-name>
<url-pattern>/hello5</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>sevlt_RequestDeliever02</servlet-name>
<servlet-class>servlet_practice.sevlt_RequestDeliever02</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>sevlt_RequestDeliever02</servlet-name>
<url-pattern>/hello6</url-pattern>
</servlet-mapping>
</web-app>