首页 > 其他分享 >servlet使用

servlet使用

时间:2022-10-09 15:07:55浏览次数:50  
标签:service resp req else 使用 servlet method


概述

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

生命周期

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

servlet使用_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() {

}
}


配置

servlet使用_tomcat_02

测试

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

执行过程分析

servlet使用_tomcat_03

配置说明

url-pattern配置

servlet使用_xml_04

缺省的servlet

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

servlet使用_tomcat_05

全局web.xml

servlet使用_ide_06

静态资源加载过程

servlet使用_java_07

3.0时代

实现

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

servlet使用_java_08

servlet使用_ide_09

servlet使用_java_10

servlet使用_java_11


//有了这个注解 就不用再写配置文件,括号内容就是地址栏中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);
}

}


标签:service,resp,req,else,使用,servlet,method
From: https://blog.51cto.com/u_11334685/5740459

相关文章

  • mysql之select使用篇1
    一、sql概述、规则数据导入1、sql概述sql有两个重要的标准分贝是sql92和sql96标准,今天使用sql一直遵循这两个标准,不通的数据库生产厂商都支持sql语句,但是也各有特有的内容2......
  • elasticsearch head、kibana 安装和使用
    一、概述1、展示es数据的可视化工具2、eshead可以当作数据展示查看的工具(数据概览),对于查询等操作使用kibana二、安装eshead推荐参考文档:​​Elasticsearch教程(四)elastic......
  • ​sync.Pool 使用
    sync.Pool使用场景保存和复用临时对象,减少内存分配,降低GC压力例子typeStudentstruct{NamestringAgeint32Remark[1024]byte}varbuf,_=json.Marshal(Stu......
  • webpack使用
    一、概述模块化和打包 Webpack是一个前端资源加载/打包工具。它将根据模块的依赖关系进行静态分析,然后将这些模块按照指定的规则生成对应的静态资源。从图中我们可以看......
  • npm使用
    一、简介1、什么是NPMNPM全称NodePackageManager,是Node.js包管理工具,是全球最大的模块生态系统,里面所有的模块都是开源免费的;也是Node.js的包管理工具,相当于前端的Maven......
  • 使用IDEA 打包项目的问题
     关于打包的问题,网上也是有很多帖子,真的都很不好用,如果IDEA 的版本不一致,也是不能用。这个还是比较好用的方式的。##将程序打成jar包,并且可运行。 确保依赖没有问题,......
  • pyquery使用
    frompyqueryimportPyQueryaspqfromlxmlimportetreeimporturllib#d=pq("<html></html>")#d=pq(etree.fromstring("<html></html>"))#d=pq(url=your_url)#d=pq(......
  • linux环境变量配置错误后命令无法使用解决方案
    环境变量配置时多复制了一个空格,导致执行source/etc/profile后提示错误,无法编辑和查看文件解决方案: 查看当前系统变量:echo$PATH临时修改:exportPATH=/usr/local/sbi......
  • 开发人员使用Klocwork实现软件安全的5大原因
    Klocwork是为企业DevOps和DevSecOps而生的,因为Klocwork能够在保持高开发速度的同时,确保在安全和质量方面的持续合规,所以是企业首选的静态分析和SAST工具。在这里,我们将分享......
  • 分享一个查看分析Oracle表空间使用情况的脚本
    个人一直使用下面这个脚本查看、分析Oracle数据库表空间的使用情况,这个脚本经过我不断的调整、完善,已经接近完美了。已经很长时间没有改动过了,个人累积的脚本名为get_table......