fufu学JAVA之Servlet详解

末蓝、 2022-12-24 10:53 182阅读 0赞

什么是Servlet

Servlet是运行在Web服务器中的小型的java程序,Servlet通常通过Http(超文本传输协议)接收web客户端的请求


创建一个Servlet程序

  • 手动创建
  1. 创建一个类去实现Servlet接口

    package com.hsf.servlet;

    import javax.servlet.*;
    import javax.servlet.http.HttpServletRequest;
    import java.io.IOException;

    /通过实现Servlet接口来实现Servlet/
    public class MyFirstServlet implements Servlet {

  1. /** * 当第一次访问该资源时,创建Servlet程序会调用此方法,且只会执行一次,和构造器一样 * @param servletConfig * @throws ServletException */
  2. public void init(ServletConfig servletConfig) throws ServletException {
  3. System.out.println("初始化了一次");
  4. }
  5. public ServletConfig getServletConfig() {
  6. return null;
  7. }
  8. /**每次在浏览器访问该资源都会执行该方法 * serviceF方法是专门用来处理请求和响应的 * @param servletRequest * @param servletResponse * @throws ServletException * @throws IOException */
  9. public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
  10. HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
  11. String method = httpServletRequest.getMethod();
  12. System.out.println("HelloServlet,你又访问了一次");
  13. if(method.equals("GET")){
  14. System.out.println("发射了一个GET请求");
  15. }else if(method.equals("POST")){
  16. System.out.println("发射了一个POST请求");
  17. }
  18. }
  19. /** * * @return */
  20. public String getServletInfo() {
  21. return null;
  22. }
  23. /** * 在web工程停止的时候销毁 */
  24. public void destroy() {
  25. System.out.println("啊,Mamak!我没了");
  26. }
  27. }

当客户端发送请求,会在重写的service中处理,可以在这里面写逻辑代码,一个Servlet类对应一个xml的配置,我们还需要在web.xml里配置它的访问路径
配置如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0">
  3. <!--servlet标签给tomcat配置servlet程序-->
  4. <servlet>
  5. <!--servlet-name标签给Servlet程序起一个别名,一般是类名-->
  6. <servlet-name>MyFirstServlet</servlet-name>
  7. <!--Servlet-class表情是Servlet程序的全类名-->
  8. <servlet-class>com.hsf.servlet.MyFirstServlet</servlet-class>
  9. </servlet>
  10. <!--servlet-mapping表情给Servlet程序配置访问地址-->
  11. <servlet-mapping>
  12. <!--servlet-name标签的作用是告诉服务器,我当前配置的地址给哪个Servlet程序使用-->
  13. <servlet-name>MyFirstServlet</servlet-name>
  14. <!--url-pattern标签配置访问地址 / :斜杠在服务器解析的时候,表示地址为:http://ip:port/工程路径 /hello :斜杠hello表示地址为:http://ip:port/工程路径/hello -->
  15. <url-pattern>/hello</url-pattern>
  16. </servlet-mapping>
  17. </web-app>

注意这个url-pattern,当我们配置好xml之后启动Tomcat服务器就是通过该路径来访问请求你的Servlet类

  1. 通过继承HttpServlet类实现Servlet类

    public class ServletDemo2 extends HttpServlet {

    1. @Override
    2. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    3. }
    4. @Override
    5. protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    6. doGet(req,resp);
    7. System.out.println("fufu真帅");
    8. }

    }

HttpServlet类里,区分了不同请求的处理方法,有兴趣的可以去看看源码,HttpServlet继承了GenericServlet,GenericServlet实现了Servlet接口,这里我们主要说一下HttpServlet类里,通过继承关系我们可以得知,HttpServlet拥有Servlet接口的所有方法,在HttpServlet类里,重写了service()方法,在这个方法里对不同的请求做了处理,分别实现在不同请求对应的方法里,如doGet方法和doPost方法,分别对应Get请求和Post请求


Servlet的生命周期

Servlet 生命周期可被定义为从创建直到毁灭的整个过程。以下是 Servlet 遵循的过程:
1.Servlet类初始化–>
2.Servlet调用init()方法–>
3.Servlet调用service()方法来来处理客户端的请求,无论get还是post或是其他请求,都在这里处理–>
4.Servlet 销毁前调用 destroy() 方法
5.最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。

方法介绍:初始化和init()方法都只会执行一次,server每访问一次就执行一次,destory()在项目关闭是调用


Servlet的url定位到Servlet类的过程

客户端通过请求地址:localhost:8080 // 项目名/【web.xml里设置的url-pattern(后面这里以url简称)】,对Servlet类进行访问,接下来,我们对这个过程进行解析。
首先,我们需要先了解这个请求地址的组成成分:

localhost:服务器ip
8080:端口(这里的8080端口指的是tomcat程序)
//项目:告诉服务器你要找那个项目
/url:这里是在web.xml里配置的用来访问Servlet类资源的路径。

大家应该都知道,有了服务器ip就能定位到一台计算机,通过端口,可以定位到计算机里的某一个程序(这里指tomcat),然后通过我们设置的url定位到对应的Servlet类
如下:
在这里插入图片描述

Servlet请求的分发处理

通常我们请求Servlet的方式有:Post、Get、Put、Head、Delete、Connect、Options、Trace
在上面生命周期里提到,我们处理所有的请求都是在service()方法里,如果我们想要对不同的请求做不同的处理,可以在service()方法里做分类,如:

  1. package com.hsf.servlet;
  2. import javax.servlet.*;
  3. import javax.servlet.http.HttpServletRequest;
  4. import java.io.IOException;
  5. /*通过实现Servlet接口来实现Servlet*/
  6. public class MyFirstServlet implements Servlet {
  7. public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
  8. System.out.println("HelloServlet,你又访问了一次");
  9. //通过servletRequest的子类HttpServletRequest对象
  10. HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
  11. //获取到当前的请求方式
  12. String method = httpServletRequest.getMethod();
  13. //对应不同的请求作出相应的操作(分支)
  14. if(method.equals("GET")){
  15. System.out.println("发射了一个GET请求");
  16. }else if(method.equals("POST")){
  17. System.out.println("发射了一个POST请求");
  18. }
  19. }
  20. }

(上面的代码若要引用切忌全部粘贴,只复制service方法里的代码就行了,当然全复制也行,补全一下代码即可);

通常情况下,我们不指定请求方式是默认为GET请求方式的
一般我们指定请求的方式有,
使用form表单,如下:

  1. <form action="http://localhost:2233/Maven_01/hello" method="post">
  2. <input type="submit"/>
  3. </form>

当我们点击提交按钮就能发送一个指定的请求,这里如果我们指定请求方式,就如上面所说,默认为get,form表单里有两个属性

  • action:Servlet类的访问路径(前面说到了)
  • method:指定请求方式

使用IDEA工具快捷生成Servlet类

在这里插入图片描述
配置Servlet:
在这里插入图片描述
当我们点击生成 会在web.xml里自动生成一个在这里插入图片描述
Servlet-mapping需要我们自己配置

发表评论

表情:
评论列表 (有 0 条评论,182人围观)

还没有评论,来说两句吧...

相关阅读

    相关 JAVA Servlet详解

    什么是Servlet         Servlet是运行在web服务器或应用服务器上的程序。         Servlet作为来自web浏览器或其他Http客户端的