【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>


相关文章
|
4月前
|
缓存 Java 应用服务中间件
javaweb实训第三天上午——Servlet(1)
Servlet基础 课程介绍 Servlet基础; (掌握) 基本结构 生命周期 执行流程 接收参数 响应数据
70 0
|
8天前
|
Java 应用服务中间件 Maven
JavaWeb基础5——HTTP,Tomcat&Servlet
JavaWeb技术栈、HTTP、get和post区别、响应状态码、请求响应格数据式、IDEA使用Tomcat、报错解决、Servlet的体系结构、IDEA使用模板创建Servlet
JavaWeb基础5——HTTP,Tomcat&Servlet
|
3月前
|
SQL druid Java
javaweb案例实训之基于jsp和servlet的用户管理开发[增删改查及登录注销]
javaweb案例实训之基于jsp和servlet的用户管理开发[增删改查及登录注销]
28 0
|
3月前
|
SQL 数据可视化 数据库
基于jsp+servlet的javaweb实现最基本的用户注册登陆注销功能
基于jsp+servlet的javaweb实现最基本的用户注册登陆注销功能
19 0
|
4月前
|
存储 安全 JavaScript
JavaWeb之Servlet(下)
本文主要介绍了JavaWeb开发中关于请求、响应、会话和Servlet3.0注解的相关知识。首先讲解了请求(Request)的常用方法,以及处理请求乱码问题的几种方式。接着讨论了响应(Response)的方法,,以及设置全局初始化参数。然后介绍了会话(Session)的概念,包括其生命周期、如何设置和获取初始化参数,并对比了全局初始化参数和Servlet3.0的`@WebServlet`注解。文中给出了具体的代码示例和测试结果,帮助读者更好地理解和掌握这些概念。
|
4月前
|
Java 应用服务中间件 程序员
JavaWeb之Servlet(上)
本篇博文介绍了JavaWeb中Servlet的基本概念和应用。Servlet是用于交互式浏览和修改数据、生成动态Web内容的Java程序,通常运行在支持Java的应用服务器上。文章讲解了Servlet的工作模式,包括客户端请求、服务器调用Servlet以及响应返回客户端的过程。此外,还提到了Servlet API,特别是doGet和doPost方法用于处理请求和响应。作者通过创建第一个Servlet的步骤,展示了如何实现Servlet接口并配置web.xml文件。最后,文章简述了Servlet的工作原理和生命周期,强调了Servlet的单例特性以及初始化、服务和销毁的过程。
|
4月前
|
存储 前端开发 Java
JavaWeb:servlet+jsp+mybatis商品管理增删改查
商品管理通常包括增加(添加)、删除、修改和查询商品信息
148 1
JavaWeb:servlet+jsp+mybatis商品管理增删改查
|
4月前
|
安全 Java
javaweb实训第四天下午——员工管理系统-JSP&Servlet&JDBC综合练习-CRUD
1.课程介绍 Servlet细节; (掌握) 员工信息相关的CRUD; (掌握) 部门信息相关的CRUD; (掌握) 2.Servlet细节 2.1.多种匹配方式
77 0
|
4月前
|
编解码 应用服务中间件 数据库
|
4月前
|
小程序 应用服务中间件 数据库连接