随笔 - 92,  文章 - 0,  评论 - 1,  阅读 - 17万

一、什么是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匹配。

 

posted on   shiyuan310  阅读(207)  评论(0编辑  收藏  举报
编辑推荐:
· 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训练数据并当服务器共享给他人

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示