Mrcdh技术博客 Mrcdh技术博客
首页
  • Html5
  • Javascript
  • Nodejs
  • electron
  • Android
  • 微信公众号
  • 框架
  • 其他
  • Mysql
  • PHP
  • Python
  • java
  • Gulp
  • 其它
  • 网站
  • 资源
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Mrcdh

全栈开发小学生
首页
  • Html5
  • Javascript
  • Nodejs
  • electron
  • Android
  • 微信公众号
  • 框架
  • 其他
  • Mysql
  • PHP
  • Python
  • java
  • Gulp
  • 其它
  • 网站
  • 资源
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • Mysql

  • PHP

  • Python

  • java

    • java基础

    • java常用插件

    • spring

    • servlet

      • servlet基础
        • 导入Servlet依赖
        • 基本使用
        • Servlet生命周期
        • HttpServlet
        • Servlet urlPattern配置
        • 注解
          • @WebServlet
          • @WebFilter
          • @WebListener
          • @WebInitParam
          • @MultipartConfig
    • springboot

    • struts2基本使用及常见问题
    • Tomcat使用常见问题
    • IDEA基本使用
  • Go

  • 数据库

  • C#

  • ElasticSearch

  • Git

  • Gulp

  • Microsoft

  • Linux

  • 其它

  • 技术
  • java
  • servlet
mrcdh
2022-06-15
目录

servlet基础

# 导入Servlet依赖

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.0.0</version>
    <scope>provided</scope><!--必须,依赖范围-->
</dependency>
1
2
3
4
5
6

# 基本使用


// 2.使用@WebServlet注解配置该servlet的访问路径
@WebServlet("/demo")
// 1.创建一个类实现 Servlet 接口,并重写改接口所有方法,并在service中输入一句话
public class ServletDemo implements Servlet{
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        // 初始化方法,在Servlet被创建时执行,只执行一次
    }

    // 获取ServletConfig对象
    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    // 提供服务方法,每次Servlet被访问,都会调用该方法
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        // 3.输出
        System.out.println("servlet 访问了");
    }

    // 获取ServletConfig信息
    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {
        // 销毁方法,当Servlet被销毁时,调用该方法,在内存释放或服务器关闭时销毁Servlet
    }

}
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
32
33
34
35

访问:http://localhost:8080/demo

# Servlet生命周期

  1. 加载和实例化:默认情况下,当Servlet第一次被访问时,由容器创建Servlet对象,或者在配置注解时设置 @WebServlet("/demo", loadOnStartup=1),默认为负整数(第一次访问时创建),0或正整数(服务器启动时创建,数字越小优先级越高,用给哪些启动耗时的)
  2. 初始化:在Servlet实例化后,将调用Servlet的init()方法初始化这个对象,完成一些加载配置文件、创建连接等初始化的工作,该方法只调用一次。
  3. 请求处理:每次请求Serlevt时都会调用Servlet的service()方法对请求进行处理。
  4. 服务中止:当需要释放内存或者容器关闭时,容器就会调用Servlet的destroy()方法完成资源的释放。

# HttpServlet

正常使用的时候,继承HttpServlet

# Servlet urlPattern配置

Serlevt要想被访问,必须配置其访问路径urlPattern

  1. 一个Servlet可以配置多个urlPattern:@WebServlet(urlPattern={"/demo1", "/demo2"})
  2. urlPattern配置规则
    • 精确匹配
      • @WebServlet(urlPattern="/user/select"): localhost/user/select
    • 目录匹配
      • @WebServlet(urlPattern="/user/*"): localhost/user/select,localhost/user/change
    • 扩展名匹配
      • @WebServlet(urlPattern="*.do"): localhost/select.do,localhost/change.do
    • 任意匹配
      • @WebServlet(urlPattern="/"): localhost/select,localhost/change/aa
      • @WebServlet(urlPattern="/*"): localhost/select,localhost/change/bb

# 注解

# @WebServlet

3.0新增注解,用于定义Servlet组件 属性列表

属性名 类型 描述
name String 等同于<servlet-name>,如果没有显式指定,则为类的全限定名
value String[] 等价于urlPattern,两个属性不能同时使用
urlPatterns String[] 指定一组Servlet的匹配模式,等同于<url-pattern>
loadOnStartup int 指定Servlet的加载顺序,等同于<load-on-startup>
initParams WebInitParamp[] 指定一组Servlet初始化参数,等同于<init-param>
asyncSupported boolean 声明Servlet是否支持异步操作模式,等同于<async-supported>
description String 该Servlet描述信息,等同于<description>
displayName String 该Servlet的显示名,通常配合工具使用,等同于<display-name>

3.0以下版本是在web.xml中配置的

<web-app>
    <servlet>
        <servlet-name>MyServlet</servlet-name>
        <servlet-class>com.example.servlet.MyServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>MyServlet</servlet-name>
        <url-pattern>/MyServlet</url-pattern>
    </servlet-mapping>
</web-app>
1
2
3
4
5
6
7
8
9
10

# @WebFilter

声明过滤器

@WebFilter(filterName="char",urlPatterns="/*")
public class CharFilter implements Filter{}
1
2

等同于web.xml

<filter>
    <filter-name>char</filter-name>
    <filter-class>CharFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>char</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
1
2
3
4
5
6
7
8

# @WebListener

声明监听器

@WebListener("这是一个描述")
public class MyContentListener implements ServletContextLinstener{}
1
2

# @WebInitParam

等价于web.xml文件中的<servlet>和<filter>中的子标签<init-param>,改注释不单独使用,需要配合@WebServlet或@WebFilter使用。


@WebServlet(
    urlPatterns={"/simple"},
    name="SimpleServlet",
    initParams={@WebInitParam(name="username", value="张三", description="用户名")}
)
public class SimpleServlet extends HttpServlet{}
1
2
3
4
5
6
7

等同于web.xml

<web-app>
    <servlet>
        <servlet-name>MyServlet</servlet-name>
        <servlet-class>com.example.servlet.MyServlet</servlet-class>
        <init-param>
            <param-name>username</param-name>
            <param-value>张三</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>MyServlet</servlet-name>
        <url-pattern>/MyServlet</url-pattern>
    </servlet-mapping>
</web-app>
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# @MultipartConfig

用于处理文件上传,需要标注在@WebServlet注解上。常用属性:

属性名 类型 是否可选 描述
fileSizeThreshold Int 是 当数据量大于该值时,内容将被写入文件
location String 是 存放生成的文件地址
maxFileSize Long 是 允许上传的文件最大值。默认为-1,表示没有限制
maxRequestSize Long 是 针对该multipart/form-data请求的最大数量,默认值为-1,表示没有限制
@WebServlet("/UploadServlet")
@MultipartConfig(location = "F:\\Workspace\\Java\\web\\public")
public class UploadServlet extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html;charset=utf-8");
        PrintWriter pw = resp.getWriter();
        // 获取服务地址
        String path = this.getServletContext().getRealPath("/");
        // 获取用户选择的上传文件
        Part p = req.getPart("file1");
        // 仅处理上传的图像文件
        if(p.getContentType().contains("image")){
            // 获取上传文件名
            String fname1 = p.getSubmittedFileName();
            System.out.println("提交的文件名:" + fname1);
            // 对文件名进行截取
            int path_idx = fname1.lastIndexOf("\\") + 1;
            String fname2 = fname1.substring(path_idx);
            p.write(path + "/upload/" + fname2);
            pw.write("文件上传成功");
        }else{
            pw.write("请选择图片文件!!!");
        }
    }
}
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
#java#servlet
上次更新: 2023/09/22, 16:54:32
SpringBoot配置多环境
springboot集成redis

← SpringBoot配置多环境 springboot集成redis→

最近更新
01
uniapp常见问题
03-19
02
Vue3项目搭建
12-25
03
使用pnpm的monorepo组织项目
11-01
更多文章>
Theme by Vdoing | Copyright © 2020-2025 Mrcdh | 苏ICP备2020058908号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×