Servlet应用——HttpServlet类
由于大多数Web应用都是通过HTTP协议和客户端进行交互,因此,在Servlet 接口中,提供了一个抽象类javax.servlet.http.HttpServlet,它是GenericServlet的子类,专门用于创建应用于HTTP协议的Servlet。
通过分析HttpServlet的源代码片段,发现HttpServlet主要有两大功能,第一是根据用户请求方式的不同,定义相应的doXxx()方法处理用户请求。例如,与GET请求方式对应的doGet()方法,与POST方式对应的doPost()方法,如图
(Ctrl + Shift + T可以查找相应的类,如查找httpservlet)
第二是通过service()方法将HTTP请求和响应分别强转为HttpServletRequest和HttpServletResponse类型的对象,如图
需要注意的是,由于HttpServlet类在重写的service()方法中,为每一种HTTP请求方式都定义了对应的doXxx()方法,因此,当定义的类继承HttpServlet后,只需根据请求方式,重写对应的doXxx()方法即可,而不需要重写service()方法。
Servlet doGet()、doPost()小案例
form.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="http://localhost:8080/Review3/MyHttpServlet" method="get">
<table>
<tr>
<td>用户名:</td>
<td><input type="text" name="username" /></td>
</tr>
<tr>
<td>密码:</td>
<td><input type="password" name="pwd" /></td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" name="submit" value="get提交" />
</td>
</tr>
</table>
</form>
<hr size="2" color="red" />
<form action="http://localhost:8080/Review3/MyHttpServlet" method="post">
<table>
<tr>
<td>用户名:</td>
<td><input type="text" name="username" /></td>
</tr>
<tr>
<td>密码:</td>
<td><input type="password" name="pwd" /></td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" name="submit" value="post提交" />
</td>
</tr>
</table>
</form>
</body>
</html>
MyHttpServlet.java
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class MyHttpServlet extends HttpServlet {
@Override // 重写doGet()和doPost()一定要改为public
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
// String methodString = req.getMethod();
// System.out.println(methodString);
// System.out.println("这是发送的get请求");
PrintWriter outPrintWriter = resp.getWriter();
outPrintWriter.write("This is doGet Method");
}
@Override
public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
PrintWriter outPrintWriter = resp.getWriter();
outPrintWriter.write("This is doPost Method");
}
}
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>Review3</display-name>
<servlet>
<servlet-name>MyHttpServlet</servlet-name>
<servlet-class>MyHttpServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyHttpServlet</servlet-name>
<url-pattern>/MyHttpServlet</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>Dude</servlet-name>
<servlet-class>HelloWorldServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Dude</servlet-name>
<url-pattern>/yummy</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>Life</servlet-name>
<servlet-class>LifeServlet</servlet-class>
<!-- 设置Servlet在Web应用启动时初始化 -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Life</servlet-name>
<url-pattern>/holy</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>
全局配置:
部分运行结果如下:
Servlet虚拟路径映射过程
实现Servlet的虚拟路径多重映射
一个Servlet对应多个访问路径,如以下案例
testServlet.java
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class testServlet
*/
public class testServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
PrintWriter outPrintWriter = response.getWriter();
outPrintWriter.print("this servlet is created by eclipse");
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
this.doGet(request, response);
}
}
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>Review3_2</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<description></description>
<display-name>testServlet</display-name>
<servlet-name>testServlet</servlet-name>
<servlet-class>testServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>testServlet</servlet-name>
<url-pattern>/testServlet</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>testServlet2</servlet-name>
<servlet-class>testServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>testServlet2</servlet-name>
<url-pattern>/testServlet2</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>testServlet3</servlet-name>
<servlet-class>testServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>testServlet3</servlet-name>
<url-pattern>/testServlet3</url-pattern>
</servlet-mapping>
</web-app>
全局配置:
部分运行结果如下:
缺省Servlet(用于处理输入地址错误问题)案例
当web.xml文件中找不到匹配的< servlet-mapping >元素的URL,就将访问请求交给缺省Servlet处理
Quesheng.java
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class Quesheng
*/
public class Quesheng extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public Quesheng() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
response.setContentType("text/html;charset=utf-8");
response.getWriter().print("缺省的Servlet处理请求资源找不到问题,在浏览器地址输入的路径写错了------------");
response.getWriter().append("Served at: ").append(request.getContextPath());
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>Review3_2</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<description></description>
<display-name>testServlet</display-name>
<servlet-name>testServlet</servlet-name>
<servlet-class>testServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>testServlet</servlet-name>
<url-pattern>/testServlet</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>testServlet2</servlet-name>
<servlet-class>testServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>testServlet2</servlet-name>
<url-pattern>/testServlet2</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>testServlet3</servlet-name>
<servlet-class>testServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>testServlet3</servlet-name>
<url-pattern>/testServlet3</url-pattern>
</servlet-mapping>
<servlet>
<description></description>
<display-name>Quesheng</display-name>
<servlet-name>Quesheng</servlet-name>
<servlet-class>Quesheng</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Quesheng</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
全局配置:
运行结果:
ServletConfig接口
在Servlet运行期间,经常需要一些辅助信息,例如,文件使用的编码、使用Servlet程序的共享等,这些信息可以在web.xml文件中使用一个或多个< init-param >元素进行配置。当Tomcat初始化一个Servlet时,会将该Servlet的配置信息封装到一个ServletConfig对象中,通过调用init(ServletConfig config)方法将ServletConfig对象传递给Servlet。ServletConfig定义了一系列获取配置信息的方法,接下来通过一张表来描述ServletConfig接口的常用方法,如表所示
ServletConfig小案例
tesServlet2.java
import java.io.IOException;
import java.util.Enumeration;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class tesServlet2
*/
public class tesServlet2 extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
// 1.得到servletConfig对象
ServletConfig config = this.getServletConfig();
// 2.获取servlet的名称
String servletNameString = config.getServletName();
System.out.println("servlet的名称:" + servletNameString);
// 3.获取servlet的初始化参数:
String valueString = config.getInitParameter("encoding");
System.out.println("初始化参数的值:" + valueString);
// 4.获取servlet的初始化参数名称
Enumeration<String> enumeration = config.getInitParameterNames();
while (enumeration.hasMoreElements()) {
// 获取初始化参数名称
String nameString = enumeration.nextElement();
String value1 = config.getInitParameter(nameString);
System.out.println("初始化参数的名称:" + nameString);
System.out.println("该名称对应的值:" + value1);
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>Review3_2</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<description></description>
<display-name>testServlet</display-name>
<servlet-name>testServlet</servlet-name>
<servlet-class>testServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>testServlet</servlet-name>
<url-pattern>/testServlet</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>testServlet2</servlet-name>
<servlet-class>testServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>testServlet2</servlet-name>
<url-pattern>/testServlet2</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>testServlet3</servlet-name>
<servlet-class>testServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>testServlet3</servlet-name>
<url-pattern>/testServlet3</url-pattern>
</servlet-mapping>
<servlet>
<description></description>
<display-name>Quesheng</display-name>
<servlet-name>Quesheng</servlet-name>
<servlet-class>Quesheng</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Quesheng</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<servlet>
<description></description>
<display-name>tesServlet2</display-name>
<servlet-name>tesServlet2</servlet-name>
<servlet-class>tesServlet2</servlet-class>
<!-- 初始化参数 -->
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
<init-param>
<param-name>username</param-name>
<param-value>Rihood</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>tesServlet2</servlet-name>
<url-pattern>/tesServlet2</url-pattern>
</servlet-mapping>
</web-app>
全局配置:
运行结果如下:
ServletContext接口
当Servlet容器启动时,会为每个Web应用创建一个唯一的ServletContext对象代表当前Web应用,该对象不仅封装了当前Web应用的所有信息,而且实现了多个Servlet之间数据的共享。
得到ServletContext对象途径:
方法一、通过ServletConfig对象
方法二、直接得到
实例1.获取Web应用程序的初始化参数
testServlet03.java
import java.io.IOException;
import java.util.Enumeration;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class testServlet03
*/
public class testServlet03 extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 1.得到ServletContext对象
ServletContext context = this.getServletContext();
// 2.获取全局的初始化参数
Enumeration<String> enumeration = context.getInitParameterNames();
while (enumeration.hasMoreElements()) {
String nameString = enumeration.nextElement();
String valueString = context.getInitParameter(nameString);
System.out.println("初始化参数的名称:" + nameString);
System.out.println("名称对应的值:" + valueString);
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>Review3_2</display-name>
<context-param>
<param-name>AAA</param-name>
<param-value>aaa</param-value>
</context-param>
<context-param>
<param-name>BBB</param-name>
<param-value>bbb</param-value>
</context-param>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<description></description>
<display-name>testServlet</display-name>
<servlet-name>testServlet</servlet-name>
<servlet-class>testServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>testServlet</servlet-name>
<url-pattern>/testServlet</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>testServlet2</servlet-name>
<servlet-class>testServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>testServlet2</servlet-name>
<url-pattern>/testServlet2</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>testServlet3</servlet-name>
<servlet-class>testServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>testServlet3</servlet-name>
<url-pattern>/testServlet3</url-pattern>
</servlet-mapping>
<servlet>
<description></description>
<display-name>Quesheng</display-name>
<servlet-name>Quesheng</servlet-name>
<servlet-class>Quesheng</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Quesheng</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<servlet>
<description></description>
<display-name>tesServlet2</display-name>
<servlet-name>tesServlet2</servlet-name>
<servlet-class>tesServlet2</servlet-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
<init-param>
<param-name>username</param-name>
<param-value>Rihood</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>tesServlet2</servlet-name>
<url-pattern>/tesServlet2</url-pattern>
</servlet-mapping>
<servlet>
<description></description>
<display-name>testServlet03</display-name>
<servlet-name>testServlet03</servlet-name>
<servlet-class>testServlet03</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>testServlet03</servlet-name>
<url-pattern>/ts3</url-pattern>
</servlet-mapping>
</web-app>
全局配置:
运行结果:
实例2.实现多个Servlet对象共享数据
由于一个Web应用中的所有Servlet共享同一个ServletContext对象,因此ServletContext对象的域属性可以被该Web应用中的所有Servlet访问。在ServletContext接口中定义了分别用于增加、删除、设置ServletContext域属性的四个方法,如表所示
testServlet04.java
import java.io.IOException;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class testServlet04
*/
public class testServlet04 extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 1.得到ServletContext对象
ServletContext context = this.getServletContext();
// 2.存值
context.setAttribute("key", "Servlet04存的值");
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
testServlet05.java
import java.io.IOException;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class testServlet05
*/
public class testServlet05 extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 1.得到ServletContext对象
ServletContext context = this.getServletContext();
// 2.从ServletContext取值
Object object = context.getAttribute("key");
String valueString = object.toString();
response.setContentType("text/html; charset=utf-8");
response.getWriter().print(valueString);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>Review3_2</display-name>
<context-param>
<param-name>AAA</param-name>
<param-value>aaa</param-value>
</context-param>
<context-param>
<param-name>BBB</param-name>
<param-value>bbb</param-value>
</context-param>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<description></description>
<display-name>testServlet</display-name>
<servlet-name>testServlet</servlet-name>
<servlet-class>testServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>testServlet</servlet-name>
<url-pattern>/testServlet</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>testServlet2</servlet-name>
<servlet-class>testServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>testServlet2</servlet-name>
<url-pattern>/testServlet2</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>testServlet3</servlet-name>
<servlet-class>testServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>testServlet3</servlet-name>
<url-pattern>/testServlet3</url-pattern>
</servlet-mapping>
<servlet>
<description></description>
<display-name>Quesheng</display-name>
<servlet-name>Quesheng</servlet-name>
<servlet-class>Quesheng</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Quesheng</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<servlet>
<description></description>
<display-name>tesServlet2</display-name>
<servlet-name>tesServlet2</servlet-name>
<servlet-class>tesServlet2</servlet-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
<init-param>
<param-name>username</param-name>
<param-value>Rihood</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>tesServlet2</servlet-name>
<url-pattern>/tesServlet2</url-pattern>
</servlet-mapping>
<servlet>
<description></description>
<display-name>testServlet03</display-name>
<servlet-name>testServlet03</servlet-name>
<servlet-class>testServlet03</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>testServlet03</servlet-name>
<url-pattern>/ts3</url-pattern>
</servlet-mapping>
<servlet>
<description></description>
<display-name>testServlet04</display-name>
<servlet-name>testServlet04</servlet-name>
<servlet-class>testServlet04</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>testServlet04</servlet-name>
<url-pattern>/ts4</url-pattern>
</servlet-mapping>
<servlet>
<description></description>
<display-name>testServlet05</display-name>
<servlet-name>testServlet05</servlet-name>
<servlet-class>testServlet05</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>testServlet05</servlet-name>
<url-pattern>/ts5</url-pattern>
</servlet-mapping>
</web-app>
全局配置:
先访问/ts4存值,再访问/ts5取值,运行结果如下: