一、什么是Servlet?
Servlet就会用来处理httpReq和httpRsp。 处理请求和发送响应的过程是由一种叫做Servlet的程序来完成的,并且Servlet是为了解决实现动态页面而衍生的东西。
Tomcat 是Web应用服务器,是一个Servlet/JSP容器. Tomcat 作为Servlet容器,负责处理客户请求,把请求传送给Servlet,并将Servlet的响应传送回给客户.而Servlet是一种运行在支持Java语言的服务器上的组件.
二、编写Servlet
新建一个dynamic web project 命名为:ServletDemo001, 然后创建了几个Servlet,目录工程如下:直接通过eclipse新建的Servlet.
点开一个demo.MyServlet.java, 看code如下:
1 package demo; 2 3 import java.io.IOException; 4 import java.io.PrintWriter; 5 6 import javax.servlet.ServletException; 7 import javax.servlet.annotation.WebServlet; 8 import javax.servlet.http.HttpServlet; 9 import javax.servlet.http.HttpServletRequest; 10 import javax.servlet.http.HttpServletResponse; 11 12 /** 13 * Servlet implementation class MyServlet 14 */ 15 @WebServlet("/MyServlet") 16 public class MyServlet extends HttpServlet { 17 private static final long serialVersionUID = 1L; 18 19 /** 20 * @see HttpServlet#HttpServlet() 21 */ 22 public MyServlet() { 23 super(); 24 // TODO Auto-generated constructor stub 25 } 26 27 /** 28 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 29 */ 30 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 31 PrintWriter pw = response.getWriter(); 32 pw.write("hello,shiyuan!!!!!"); 33 pw.close(); 34 } 35 36 /** 37 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 38 */ 39 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 40 // TODO Auto-generated method stub 41 doGet(request, response); 42 } 43 44 }
直接启动Server, 在浏览器输入:http://localhost:8080/ServletDemo001/MyServlet
页面显示:
其他几个Servlet同样这样访问。
那么问题来了?在其他博客中写的都是要配置web.xml呢?在里面配置Servlet和Servlet-mapping?????
1:用WebServlet注解来进行配置。
如果新建的Servlet是通过eclipse里面servlet向导来做了,会直接在class里面配置URL,如下:
@WebServlet("/MyServlet")
如果用注解来配置,就不需要在web.xml里面配置了。
2:通过xml来配置
例如新建了一个一般的class, 然后让它继承于HttpServlet, 当然就没有注解了。此时访问就需要在web.xml里面配置。
1 <?xml version="1.0" encoding="UTF-8"?> 2 <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_3_0.xsd" id="WebApp_ID" version="3.0"> 3 <display-name>ServletDemo001</display-name> 4 <welcome-file-list> 5 <welcome-file>index.html</welcome-file> 6 <welcome-file>index.htm</welcome-file> 7 <welcome-file>index.jsp</welcome-file> 8 <welcome-file>default.html</welcome-file> 9 <welcome-file>default.htm</welcome-file> 10 <welcome-file>default.jsp</welcome-file> 11 </welcome-file-list> 12 <servlet><servlet-name>MyServlet2</servlet-name> 13 <servlet-class>demo.MyServlet2</servlet-class> 14 </servlet> 15 <servlet-mapping> 16 <servlet-name>MyServlet2</servlet-name> 17 <url-pattern>/Login</url-pattern> 18 </servlet-mapping> 19 </web-app>
通过浏览器访问就可以得到如下:
从浏览器发送请求时,是用当前“项目(ServletDemo001)”下的路径与servlet-mapping标签中的url-pattern的标签值进行匹配.
就是:http://localhost:8080/ServletDemo001/Login
根据servlet-mapping中url-pattern找到servlet-name. 然后再在servlet中根据servlet-name找到servlet-class. 运行真正的servlet.
一个<servlet-mapping>元素用于映射一个已注册的Servlet的一个对外访问路径,它包含有两个子元素:<servlet-name>和<url-pattern>,分别用于指定Servlet的注册名称和Servlet的对外访问路径。
<servlet-mapping>
<servlet-name>MyServlet2</servlet-name>
<url-pattern>/Login</url-pattern>
</servlet-mapping>
同一个Servlet可以被映射到多个URL上,即多个<servlet-mapping>元素的<servlet-name>子元素的设置值可以是同一个Servlet的注册名。 例如:
<servlet>
<servlet-name>MyServlet2</servlet-name>
<servlet-class>demo.MyServlet2</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyServlet2</servlet-name>
<url-pattern>/Login</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>MyServlet2</servlet-name>
<url-pattern>/ZXL</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>MyServlet2</servlet-name>
<url-pattern>/88.jsp</url-pattern>
</servlet-mapping>
通过上面的配置,当我们想访问名称是ServletDemo001的MyServlet2,可以使用如下的几个地址去访问:
http://localhost:8080/ServletDemo001/88.jsp
http://localhost:8080/ServletDemo001/ZXL
http://localhost:8080/ServletDemo001/Login
弄清注解和web.xml关系后,访问Servlet基本就没有问题了。
为了让Servlet能响应用户请求,还必须将Servlet配置在web应用中,配置Servlet需要修改web.xml文件。
从Servlet3.0开始,配置Servlet有两种方式:
- 在Servlet类中使用@WebServlet Annotation进行配置。
- 在web.xml文件中进行配置。
我们用web.xml文件来配置Servlet,需要配置<servlet>和<servlet-mapping>。
https://blog.csdn.net/qq_32224139/article/details/80213347------主要参考
https://blog.csdn.net/u011514729/article/details/79689637
https://www.cnblogs.com/xdp-gacl/p/3760336.html-----Servlet线程安全以及Servlet映射URL匹配。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人