Servlet

Servlet

动态资源和静态资源

  • servlet运行在服务端,必须在web项目中开发;在服务器容器中运行;
  • HttpServletRequest对象打包请求信息;
    • 获取请求的信息;
    • 根据参数获取要响应的数据;
    • 将数据存入Response
  • HttpServletResponse为响应对象,最后转为报文返回给客户端;

image-20250421153306594

Servlet开发流程

入门

用户名称检测重名;

  • 创建javaWEB项目,添加tomcat依赖;

  • 重写service方法,定义业务处理方法;

  • 在web.xml中配置Servlet 请求映射路径;

http://127.1.0.1/demo02/username;

请求体:

​ username = name;

配置web.xml文件

  • 配置servlet类,起别名;
  • servlet-class告诉tomcat要实例化的类;
  • servlet-name关联请求映射路径;
    <servlet>
        <servlet-name>Username</servlet-name>
        <servlet-class><!-- 代码调用路径 -->
            com.alone.servlet.Hello
        </servlet-class>
    </servlet>


    <!--请求映射路径-->
    <servlet-mapping>
        <servlet-name>Username</servlet-name>
        <!-- 请求要有 / 前缀 -->
        <url-pattern>/userServlet</url-pattern> <!--请求url-->
    </servlet-mapping>

servlet api.jar导入问题

tomcat lib目录下;添加依赖时候会自动导入servlet.api.jar;部署时候会使用服务器tomcat的jar包;

Content-Type响应头

  • MIME类型响应头,说明媒体的类型和文件类型,响应的数据类型;
  • MIME类型告诉客户端响应数据类型,以便用适合方式解析文件;

tomcat会在conf/web.xml中寻找文件的MINE类型;指定Content-Type;

不设置默认为html;

请求中也会有Content-Type;

url-parttern映射路径

tomcat会根据http路径的信息寻找url-pattern,再根据servlet-name寻找对应的servlet-class通过反射处理;

一个servlet可以对应多个url-pattern路径,不同的servlet不能有相同的url-pattern;

  • 精确匹配
<servlet-mapping>
    <servlet-name>servlet</servlet-name>
    <url-pattern>/Se</url-pattern>
</servlet-mapping>

/后指定精确路径;

  • 模糊匹配
<servlet-mapping>
    <servlet-name>servlet</servlet-name>
    <url-pattern>/</url-pattern> <!-- 模糊匹配  -->
    <!--        <url-pattern>/*</url-pattern> &lt;!&ndash; 模糊匹配  &ndash;&gt;-->

</servlet-mapping>

当只用/模糊匹配所有路径均会,走servlet,除了jsp文件路径除外;当使用了/*后就包括了jsp文件;

    <servlet-mapping>
        <servlet-name>servlet</servlet-name>
               <!-- 匹配以/a/开头的所有文件 -->
        <url-pattern>/a/*</url-pattern>
    </servlet-mapping>

*的位置可以匹配任意资源:

  • /a/*匹配前缀;
  • *.txt匹配后缀;

Servlet注解

  • 使用 注解简化web.xml中的映射路径
// 使用webServlet注解
@WebServlet("/UserServlet")

使用注解后就不再配置web.xml;

启动子集出错,servlet有相同的路径名称;路径格式不对;

@WebServlet(urlPattern = {"路径1","路径2","路径3",...})

urlPattern可以对应多个路径;

Servlet生命周期

  • 实例化;初初始化;接受请求,处理请求;销毁;

  • 不建议在Servlet中修改成员变量,会引发线程安全问题;

Servlet在tomcat中是单例的;多个线程请求Servlet会执行同一个Servlet的方法;

@WebServlet(value = "/ServletLife",loadOnStartup = 1)

loadStartUp = ? 设置启动时候实例化顺序;数字越小等级越优先;

default-servlet遍历所有静态的资源文件寻找指定文件,再在respose中返回资源;

Servlet继承结构

  • interface Servlet接口:

image-20250422104058294

  • GenericServlet类

image-20250422161310768

重写无参的init()方法,将config参数交付给带参的init()(会调用无参的init())方法处理;

对service()方法进行了实现(空函数体);

  • HttpServlet

service(Servlet...)方法将ServletRequest方法和ServletRepose参数进行了转化,转为HttpServlet类;

对于service(HttpServlet...)方法进行了分发;全部调用405;自定义的方法一定要重写service方法;

以前建议处理时候重写doget,dopost方法;一个调用另一个;

posted @ 2025-04-22 17:46  TsumugiHane  阅读(32)  评论(0)    收藏  举报