servlet使用

简介: servlet使用

概述

是运行在web服务器上的java程序,用来处理前端(客户端)的响应和请求

生命周期

Servlet对象是由tomcat服务器创建的。默认第一次浏览器中输入servlet访问时创建该对象,也可以通过配置服务器一启动就创建对象

服务器关闭servlet就销毁了

使用

方法

/**

* 运行一个项目,当开启服务器是都没有执行,输入地址访问,init()service()运行,

*         刷新一次service执行一次,当关闭服务器tomcat时候,init()service()销毁,destroy执行

*/

public class DemoServlet implements Servlet {


  //servlet对象创建的时候执行(并不是tomcat服务器启动的时候 是在浏览器输入的访问servlet类的时候)

   @Override

   public void init(ServletConfig servletConfig) throws ServletException {

       //ServletConfig参数作用 1、获取配置信息 2、获取xml中的参数 3、获取所有的参数名称 4、获取ServletContext对象

       servletConfig.getServletName();

       servletConfig.getInitParameter("xxx");

       servletConfig.getInitParameterNames();

       servletConfig.getServletContext();

   }


   @Override

   public ServletConfig getServletConfig() {

       return null;

   }


   //ServletRequest :代表请求 认为ServletRequest 内部封装的是http请求的信息,

   // ServletResponse :代表响应 认为要封装的是响应的信息

   @Override

   public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {


   }


   @Override

   public String getServletInfo() {

       return null;

   }


   //servlet销毁的时候执行

   @Override

   public void destroy() {


   }

}


配置

测试

浏览器输入http://localhost:8080/web02---servlet练习/abc后台就可以看到servlet方法中的内容

执行过程分析

配置说明

url-pattern配置

缺省的servlet

可以将url-pattern配置成一个/,代表该servlet是缺省的servlet,当你访问资源地址所有的servlet都不匹配时 , 缺省的servlet负责处理

全局web.xml

静态资源加载过程

3.0时代

实现

从servlet3.0开始就可以直接使用注解的方式创建servlet,直接new一个servlet

//有了这个注解 就不用再写配置文件,括号内容就是地址栏中path后面跟的内容


@WebServlet("/myFirsetServlet")

public class MyFirsetServlet extends HttpServlet {


   @Override

   protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

       super.doGet(req, resp);

   }


   @Override

   protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

       super.doPost(req, resp);

   }


   @Override

   protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

       super.service(req, resp);

   }

}

web.xml

metadata-complete是否扫描注解 true不扫描 false扫描

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns="http://java.sun.com/xml/ns/javaee"

 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

                     http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"

 version="3.0"

 metadata-complete="false">

 <absolute-ordering/>

 <display-name>market</display-name>

 <welcome-file-list>

   <welcome-file>index.html</welcome-file>

   <welcome-file>index.htm</welcome-file>

   <welcome-file>index.jsp</welcome-file>

 </welcome-file-list>

</web-app>

内部方法的调用过程

收到一个servlet请求,tomcat会找到这个servlet对应的service方法,如果没有service方法就会到父类当中去找

如下源码,内部会把ServletRequest参数转成HttpServletRequest,转换完成后继续调用HttpServletRequest的service方法,根据不同的参数类型调用不同的方法

   public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {

       HttpServletRequest request;

       HttpServletResponse response;

       try {

           request = (HttpServletRequest)req;

           response = (HttpServletResponse)res;

       } catch (ClassCastException var6) {

           throw new ServletException(lStrings.getString("http.non_http"));

       }


       this.service(request, response);

   }


   protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

       String method = req.getMethod();

       long lastModified;

       if (method.equals("GET")) {

           lastModified = this.getLastModified(req);

           if (lastModified == -1L) {

               this.doGet(req, resp);

           } else {

               long ifModifiedSince;

               try {

                   ifModifiedSince = req.getDateHeader("If-Modified-Since");

               } catch (IllegalArgumentException var9) {

                   ifModifiedSince = -1L;

               }


               if (ifModifiedSince < lastModified / 1000L * 1000L) {

                   this.maybeSetLastModified(resp, lastModified);

                   this.doGet(req, resp);

               } else {

                   resp.setStatus(304);

               }

           }

       } else if (method.equals("HEAD")) {

           lastModified = this.getLastModified(req);

           this.maybeSetLastModified(resp, lastModified);

           this.doHead(req, resp);

       } else if (method.equals("POST")) {

           this.doPost(req, resp);

       } else if (method.equals("PUT")) {

           this.doPut(req, resp);

       } else if (method.equals("DELETE")) {

           this.doDelete(req, resp);

       } else if (method.equals("OPTIONS")) {

           this.doOptions(req, resp);

       } else if (method.equals("TRACE")) {

           this.doTrace(req, resp);

       } else {

           String errMsg = lStrings.getString("http.method_not_implemented");

           Object[] errArgs = new Object[]{method};

           errMsg = MessageFormat.format(errMsg, errArgs);

           resp.sendError(501, errMsg);

       }


   }


相关文章
|
8月前
|
XML Java 应用服务中间件
Servlet详解(上)
Servlet详解
53 0
|
5天前
|
JSON Java 应用服务中间件
|
18天前
|
Oracle Java 关系型数据库
浅谈Servlet
浅谈Servlet
12 0
|
7月前
|
IDE Java 应用服务中间件
Servlet3.0
Servlet3.0
|
9月前
|
小程序 Java 应用服务中间件
Servlet这些你可能还不知道
Servlet这些你可能还不知道
38 0
|
10月前
|
前端开发 JavaScript 应用服务中间件
Servlet1(2)
Servlet1(2)
42 0
|
10月前
|
应用服务中间件
Servlet的详细使用(上)
Servlet的详细使用(上)
63 0
|
10月前
Servlet的详细使用(下)
Servlet的详细使用(下)
38 0
|
前端开发 Java 应用服务中间件
Servlet详解
6、Servlet 6.1、Servlet简介 Servlet就是sun公司开发动态web的一门技术 Sun在这些API中提供了一个接口,叫做:Servlet,如果你想开发一个Servlet程序,只需要完成两个小步骤: 编写一个类,实现Servlet接口 把开发好的java类部署到web服务器中。
|
存储 应用服务中间件
Servlet(二)
关于Servlet的相关介绍
167 0
Servlet(二)