Servlet原理和简单的案例编写

Servlet

Servlet Servlet(Server Applet),即服务程序。Servlet是一种用Java技术构建的动态Web应用服务程序,运行在容器中(如Tomcat、Jetty服务器等),容器提供了执行Servlet的运行时环境和支持,负责接收HTTP请求,根据请求路径将其分配给对应的Servlet进行处理,并将响应发送回客户端。这样就实现了动态的页面内容。

以下从请求到响应来梳理整个Servlet执行流程和生命周期。

1.Servlet执行流程

1.1 客户端发送Http请求

客户端发送Http请求消息,如用户可以在浏览器地址栏输入URL,按下回车发送GET请求(从服务端获取资源),或者以提交表单的方式发送POST请求(服务端发送数据)。

1.2 加载和初始化

当Servlet容器收到请求,会根据请求的URL找到对应的Servlet对象(由容器创建),并调用servlet中的init()方法进行初始化操作,如数据连接创建、加载配置文件等。其实初始化操作可以在开启服务器时,在请求到来之前进行,这样可以降低响应的时间。

1.3 请求处理

初始化后容器可以调用对象中的service()方法进行http请求的处理了。每次请求Servlet时,容器都会调用Servlet中的service()方法对请求进行处理,在service()方法中再根据请求的类型(GET、POST、PUT等)调用doGet()、doPost()等方法接收请求对象,这些方法是就是我们用来处理具体的业务逻辑。我们可以从HttpServletRequest请求对象中获取请求的参数、Cookie、会话(Session)等信息,并在方法中通过HttpServletResponse对象生成响应内容传出给客户端。

1.4 服务终止,结束流程

当该连接下所有的请求和响应都处理之后,关闭容器时,Servlet容器就会调用servlet对象中的destroy()方法进行清理操作(destroy()也可以显式调用),释放资源,如关闭数据库连接、删除文件并销毁Servlet实例等,实例随后被垃圾收集器回收。

需要注意的一点是,Servlet容器会在第一次请求时加载Servlet对象,并在以后的请求中复用已加载的Servlet对象,以提高性能和效率。其次是每个请求都由一个独立的线程来处理,多个请求可能是同一个对象来处理,所以Servlet开发必须注意线程安全的。

2.Servlet生命周期

根据执行流程就可以知道Servlet的生命周期,包括由容器加载和实例化,初始化配置信息,处理客户端的请求,销毁。所有可以知道每个Servlet实例通常只有一个init()方法调用,一个destroy()方法调用,但service()方法可能会被多次调用处理不同的请求(service()再根据请求的类型内部调用GET、POST或者PUT等请求)。

3.编写一个Servlet

讲完大概的流程后,如何写一个Servlet,可以发送请求得到想要的响应呢?

要编写一个Servlet,可以按照以下步骤进行:

3.1 项目创建和基础的修改和配置

这里我用IDEA创建Maven项目的方式构建web应用程序。

这里设置项目的名称以及项目坐标的GAV(保证项目唯一性),测试用坐标不配也行。

这里我已经在本地下载了maven并创建了本地仓库,用IDEA上自带的也行。

在main目录下创建以下两个资源目录

将pom.xml文件删改为以下模板

修改WEB-IN文件下的web.xml配置为最新版

xml复制代码<?xml version="1.0" encoding="UTF-8"?>




3.2 导入依赖

在maven仓库中搜索Servlet依赖,选择使用最多的版本,复制对应的坐标到pom.xml文件中的依赖

然后点击右上角的刷新,将依赖导入到maven中

3.3 编写Servlet

在Java源文件下编写一个普通类,实现Servlet接口,这里我们直接继承HttpServlet。因为Sun公司有两个默认的实现类HttpServlet,GenericServletSerlvet实现了Servlet接口。实现和继承关系为Servlet

scala复制代码public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //一般在Servlet中,习惯性的会首先设置请求以及响应的内容类型以及编码方式:
        resp.setContentType("text/html;charset=UTF-8");
        req.setCharacterEncoding("UTF-8");
        //用打印流简单的响应一个信息
        PrintWriter writer = resp.getWriter();
        writer.println("Hello Servlet!");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

3.4 在web.xml中添加Servlet配置信息

当启动一个WEB项目时,容器首先会读取项目web.xml配置文件里的配置,包括servlet,mapping,pattern,过滤器等,其实就是配置后台Servlet信息,以及一些参数初始化配置,便于服务器读取配置参数对应的信息数据,当这一步骤没有出错并且完成之后,项目才能正常地被启动起来。因为只有一个Servlet,所有以下简单注册写好的Servlet类,以及对应请求路径。

xml复制代码<?xml version="1.0" encoding="UTF-8"?>

    
    
        helloServlet
        HelloServlet
    
    
        helloServlet
        /hello
    


3.5 配置Tomcat部署项目

在IDEA中配置Tomcat服务器,这里我已经在本地下好了Tomcat,因为Tomcat是Java写的,运行Tomcat需要Java环境,注意配置好Java环境变量,否则Tomcat启动失败。

点击Configure配置好Tomcat路径

然后点击部署项目,我们选择已经创建好的ServletDemo项目的wa包r。

注意更改项目发布的上下文路径,tomcat服务器在接收到请求后就会从http:localhost:8080/s1/对应的docBase路径去调用资源或者调用某个class用来处理请求。不改也行,访问的时候url不要忘了加上就行。本项目Servlet访问路径为http:localhost:8080/s1/hello。

3.6 项目启动

然后就可以启动测试了!如下成功响应我们想要的内容。

展开阅读全文

页面更新:2024-04-30

标签:初始化   容器   路径   客户端   加载   原理   流程   对象   案例   简单   服务器   方法   项目

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号

Top