【JavaWeb】之Servlet(上)

简介: 【JavaWeb】之Servlet

前言


本文为JavaWeb基础Servlet相关知识,Java全栈学习路线可参考:【Java全栈学习路线】最全的Java学习路线及知识清单,Java自学方向指引,内含最全Java全栈学习技术清单~


一、什么是Servlet


Servlet是sun公司开发动态web的一门技术

Sun在这些API中提供一个接口叫做:Servlet,如果想开发一个Servlet程序,只需要完成两个小步骤:(1)编写好一个类;(2)把开发好的Java类部署到web服务器中

把实现了Servlet接口的Java程序叫做:Servlet


Servlet的作用:


接收用户端发来的请求

调用其他java程序来处理请求

将处理结果,返回到服务器中


二、HelloServlet


Servlet接口Sun公司有两个默认的实现类:HttpServlet,GenericServlet

编写一个Servlet程序的步骤:


(1)构建一个普通的Maven项目,删掉里面的src目录,在这个项目里面建立Module;这个空的工程就是Maven的主工程;

(2)关于Maven父子工程的理解: 父项目中的jar包子项目可以直接使用

父项目web.xml中会有:

    <modules>
        <module>servlet-01</module>
    </modules>

(3)Maven环境优化:(1)修改web.xml为最新的;(2)将Maven的结构搭建完整

(4)编写一个Servlet程序:(1)编写一个普通类;(2)实现一个Servlet接口,这里直接继承HttpServlet

public class HelloServlet extends HttpServlet {
    //由于get和post只是请求实现的不同方式,可以相互调用,因为业务逻辑都一样;
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //ServletOutputStream outputStream = resp.getOutputStream();
        PrintWriter writer = resp.getWriter();//响应流
        writer.print("Hello,Servlet");
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
          doGet(req, resp);
    }
}

(5)编写Servlet的映射

为什么需要映射?我们写的是Java程序,但是要通过浏览器访问,而浏览器需要连接web服务器,所以我们需要在web服务中注册我们写的Servlet,还需给他一个浏览器能够访问的路径。

web.xml:

<!--    注册servlet-->
    <servlet>
        <servlet-name>hello</servlet-name>
        <servlet-class>com.yingjian.servlet.HelloServlet</servlet-class>
    </servlet>
<!--    servlet的请求路径-->
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>

(6)配置Tomcat

(7)启动测试


三、Servlet原理


(1)创建servlet对象:servlet在load-on-startup配置项大于0,context容器启动就会被实例化;否则,调用时实例化

(2)初始化servlet:调用servlet的init()方法

(3)tomcat接受到请求,根据url从mapper(mapper类保存了container容器中所有子容器信息)中选择正确的servlet容器,并在请求到达最终的servlet之前还要完成必要的一些步骤,必须要执行的Filter链,以及通知在web.xml中定义的listener

(4)执行servlet的service()方法

(5)当servlet从servlet容器中移除,servlet生命周期结束,调用servlet的destroy方法,销毁


17f2071dc9c3439381d22d072b3eec08.png


四、Mapping问题


1.一个Servlet指定一个映射路径


web.xml:

    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>

2.一个Servlet指定多个映射路径


web.xml:

    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello1</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello2</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello3</url-pattern>
    </servlet-mapping>

3.一个Servlet指定通用映射路径


web.xml:

<servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/hello/*</url-pattern>
</servlet-mapping>

4.默认请求路径


web.xml:

<servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

5.指定一些后缀或者前缀等


web.xml:


<!--可以自定义后缀实现请求映射,如只能映射到以jsp为后缀的路径
    注意点:*前面不能加项目映射的路径-->
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>*.jsp</url-pattern>
    </servlet-mapping>

6.优先级问题


指定了Mapping的映射路径优先级最高,如果找不到就会走默认请求

web.xml:

<!-- 设置默认映射路径为Error404页面-->
    <servlet>
        <servlet-name>error</servlet-name>
        <servlet-class>com.yingjian.servlet.ErrorServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>error</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>


相关文章
|
3月前
|
缓存 Java 应用服务中间件
javaweb实训第三天上午——Servlet(1)
Servlet基础 课程介绍 Servlet基础; (掌握) 基本结构 生命周期 执行流程 接收参数 响应数据
52 0
|
4月前
|
小程序 Java 应用服务中间件
【JavaWeb学习】—Servlet(十三)
【JavaWeb学习】—Servlet(十三)
|
7月前
|
安全 Java 应用服务中间件
【JavaWeb】Tomcat底层机制和Servlet运行原理
网络通信:Tomcat使用Java的Socket API来监听特定的端口(通常是8080),接收来自客户端的HTTP请求。 线程池:Tomcat使用线程池来处理并发的请求。当有新的请求到达时,Tomcat会从线程池中获取一个空闲线程来处理该请求,这样可以提高处理效率。 生命周期管理:Tomcat负责管理Servlet和其他Web组件的生命周期,包括初始化、请求处理和销毁等阶段。(init(), run())
|
7月前
|
数据安全/隐私保护
JavaWeb用户信息管理系统-创建登录业务的Servlet
JavaWeb用户信息管理系统-创建登录业务的Servlet
29 0
|
3月前
|
存储 前端开发 Java
JavaWeb:servlet+jsp+mybatis商品管理增删改查
商品管理通常包括增加(添加)、删除、修改和查询商品信息
54 1
JavaWeb:servlet+jsp+mybatis商品管理增删改查
|
3月前
|
安全 Java
javaweb实训第四天下午——员工管理系统-JSP&Servlet&JDBC综合练习-CRUD
1.课程介绍 Servlet细节; (掌握) 员工信息相关的CRUD; (掌握) 部门信息相关的CRUD; (掌握) 2.Servlet细节 2.1.多种匹配方式
40 0
|
3月前
|
编解码 应用服务中间件 数据库
|
4月前
|
小程序 应用服务中间件 数据库连接
|
6月前
|
存储 设计模式 JavaScript
掌握JavaWeb开发的必备技能:Servlet、JSP、Cookie、Session、EL、JSTL详解 ~~~~B站老杜--Servlet-JSP-课堂笔记(三)
当某个特殊的事件发生(特殊的事件发生其实就是某个时机到了。)之后,被web服务器自动调用。 思考一个业务场景
47 0
|
7月前
|
Java 中间件 应用服务中间件
【JavaWeb】知识总结Ⅶ(Servlet)
什么是 Servlet? Servlet(Server Applet),全称Java Servlet,未有中文译文。是用Java编写的服务器端程序。其主要功能在于交互式地浏览和修改数据,生成动态Web内容。狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。