Servlet接口的实现
一、servlet的API
Servlet接口对Servlet进行了规范,定义了方法的主要范围。
1、public void init(ServletConfig servletConfig) (初始化)Servlet第一次进入内存时被调用
参数的作用:
(1)调用ServletConfig对象的方法,获取Servlet的名称:
配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<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">
<servlet>
<servlet-name>MyServletname</servlet-name>
<servlet-class>MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyServletname</servlet-name>
<url-pattern>/abc</url-pattern>
</servlet-mapping>
</web-app>
public void init(ServletConfig servletConfig) throws ServletException {
String servletName=servletConfig.getServletName();
System.out.println(servletName);
}
运行结果:

(2)获得配置文件中的初始化参数:
<servlet>
<servlet-name>MyServletname</servlet-name>
<servlet-class>MyServlet</servlet-class>
<init-param>
<param-name>zhai</param-name>
<param-value>I love study</param-value>
</init-param>
</servlet>
public void init(ServletConfig servletConfig) throws ServletException {
String paramvalue =servletConfig.getInitParameter("zhai");
System.out.println(paramvalue);
}

(3)此方法只有在servlet对象创建时执行(刷新浏览器)
2、public void service(ServletRequest servletRequest, ServletResponse servletResponse)方法:
ServletRequest :代表请求信息。
ServletResponse :代表响应信息。
每次都会创建servletRequest和servletResponse对象。
3、public void destroy()方法:
servlet对象销毁时执行。
4、servlet的生命周期:
(1)初始化函数只有在首次访时才被执行
(2)service函数在每次被访问时都会被执行

(3) dastory函数在对象被销毁时(关闭服务器)执行

二、servlet的配置
1、基本配置
(1)类的配置:
<servlet>
<servlet-name>MyServletname</servlet-name>//名字可以任意,但是必须与<servlet-mapping>中的保持一致。
<servlet-class>MyServlet</servlet-class>//全路径,包名加类名
</servlet>
2、访问方式
(1)完全匹配:
<servlet-mapping>
<servlet-name>MyServletname</servlet-name>
<url-pattern>/abc</url-pattern>
</servlet-mapping>

访问的路径必须与<url-patteren>里面的虚拟路径名完全相同。
(2)目录匹配:/虚拟路径/*
<servlet-mapping>
<servlet-name>MyServletname</servlet-name>
<url-pattern>/abc/123/*</url-pattern>
</servlet-mapping>
/abc/123

/abc/123/456

/abc

即:虚拟路径后面的内容可以任意。
3、扩展名匹配:*.扩展名
<servlet-mapping>
<servlet-name>MyServletname</servlet-name>
<url-pattern>*.jsp</url-pattern>
</servlet-mapping>

4、配置文件的作用:
<?xml version="1.0" encoding="UTF-8"?>
<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">
<servlet>
<servlet-name>MyServletname</servlet-name>
<servlet-class>MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyServletname</servlet-name>
<url-pattern>/abc</url-pattern>
</servlet-mapping>
</web-app>
如果没有配置文件,浏览器访问服务器,就要用http://localhost:8080/包名+类名,这样的方式将类和包的信息外漏很不安全,通过添加配置文件的方式,实现了对访问的类的隐藏。

在访问MyServlet类的时候,通过虚拟路径abc找到配置文件中的abc,再用MyServletname找到要访问的类(包名+类名)。
5、<load-on-startup>的使用
如果不加<load-on-startup>标签,Servlet的初始化方法是在浏览器访问的时候才执行,但是加了标签之后,在服务器启动的时候该方法即被执行。
<servlet>
<servlet-name>MyServletname</servlet-name>
<servlet-class>MyServlet</servlet-class>
<load-on-startup>4</load-on-startup>
</servlet>

6、全局配置与局部配置
(1)当配置文件如下时:
<?xml version="1.0" encoding="UTF-8"?>
<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">
<servlet>
<servlet-name>MyServletname</servlet-name>
<servlet-class>MyServlet</servlet-class>
<load-on-startup>4</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>MyServletname</servlet-name>
<url-pattern>/abc</url-pattern>
</servlet-mapping>
</web-app>
目录结构(有html页面和jsp页面):

执行后:

执行的时HTML页面,但是为什么没有执行JSP呢?
这是因为在自己配置的WEB.XML文件中,没有对页面的优先级进行定义,只能调用默认的全局web.xml文件。文件配置如下图:

(2)自定义访问优先级:
<?xml version="1.0" encoding="UTF-8"?>
<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">
<servlet>
<servlet-name>MyServletname</servlet-name>
<servlet-class>MyServlet</servlet-class>
<load-on-startup>4</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>MyServletname</servlet-name>
<url-pattern>/abc</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>

可以看出,如果已经自定义了文件的优先级,则按照自定义的文件的优先级。
7、生命周期
Servlet的生命周期始于它被装入Web容器的内存时,并在Web容器终止或重新装入Servlet时结束。
Servlet一旦被装入Web容器,一般不会从Web容器内存中删除,直至Web容器关闭或者重新启动结束。
一般来说第一次访问Servlet程序时所用的时间开销要大大多于以后访问所用的时间。
Servlet接口的实现的更多相关文章
- Servlet接口五种方法介绍
Servlet接口定义了5种方法: init() service() destroy() getServletConfig() getServletInfo() init() 在Servlet实例化后 ...
- Java Servlet(四):Servlet接口service工作(ServletRequest,ServletResponse对象)(jdk7+tomcat7+eclipse)
本篇将会记录,Servlet接收客户端传递来的参数信息,并返回信息使用的对象,及这些对象的函数相关用法. 还是在java ee工程中进行操作,在WebContent目录下创建一个login.jsp文件 ...
- java Servlet接口及应用
基本类和接口 一.javax.servlet.Servlet接口 servlet抽象集是javax.servlet.Servlet接口,它规定了必须由Servlet类实现由servlet引擎识别和管理 ...
- Servlet课程0424(一) 通过实现Servlet接口来开发Servlet
//这是我的第一个Servlet,使用实现Servlet接口的方式来开发 package com.tsinghua; import javax.servlet.*; import java.io.*; ...
- myeclipse实现Servlet实例(1) 通过继承servlet接口实现
1.在myeclipse新建web project,配置Tomcat(在myeclipse的Window--preferences) 2.然后在src新建servlet文件( 此处放在com.tsin ...
- servlet三种实现方式之一实现servlet接口
servlet有三种实现方式: 1.实现servlet接口 2.继承GenericServlet 3.通过继承HttpServlet开发servlet 第一种示例代码如下(已去掉包名): import ...
- java Servlet接口及应用(转)
基本类和接口 一.javax.servlet.Servlet接口 servlet抽象集是javax.servlet.Servlet接口,它规定了必须由Servlet类实现由servlet引擎识别和管理 ...
- 解决Ajax请求后台Servlet接口拿不到JSON数据问题
前端Ajax请求代码如下: window.onload=function() { var url='http://127.0.0.1:8080/testpj/ErrorlogServlet'; $.a ...
- Servlet接口、GenericServlet类、HttpServlet类
Servlet是最顶层的接口,其提供的方法有: init(ServletConfig config):void // 初始化 getServletConfig():ServletConfig // 取 ...
- java EE :Servlet 接口
Servlet 生命周期 : 调用当前 Servlet 类构造函数进行实例化 Servlet 通过调用 init () 方法进行初始化 Servlet 调用 service() 方法来处理客户端的请 ...
随机推荐
- keras 学习-线性回归
园子里头看到了一些最基础的 keras 入门指导, 用一层网络,可以训练一个简单的线性回归模型. 自己学习了一下,按照教程走下来,结果不尽如人意,下面是具体的过程. 第一步: 生成随机数据,绘出散点图 ...
- 通过Blazor使用C#开发SPA单页面应用程序(4) - Ant Design Button
前面学习了Blazor的特点.环境搭建及基础知识,现在我们尝试的做个实际的组件. Ant Design是蚂蚁金服是基于Ant Design设计体系的 UI 组件库,主要用于研发企业级中后台产品.目前官 ...
- Spring入门(十):Spring AOP使用讲解
1. 什么是AOP? AOP是Aspect Oriented Programming的缩写,意思是:面向切面编程,它是通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术. 可以认为AOP是 ...
- @WebInitParam注解
Servlet注解——@WebInitParam多个InitParam的写法 使用@WebInitParam配置多个InitParam,使某些页面不被拦截.在过滤器Filter.java下添加注解:@ ...
- count(*) count(1) count(column)的区别
count(1)中的1并不是指第一个column: count(*)和count(1)一样,包括对值为NULL的统计: count(column)不包括对值为NULL的统计,这里的column指的不是 ...
- 再读faster rcnn,有了深层次的理解
1. https://www.wengbi.com/thread_88754_1.html (图) 2. https://blog.csdn.net/WZZ18191171661/article/de ...
- silverlight中递归构造无限级树treeview+checkbox
两个实体,其实一个实体也能构造出来,我这里是为了增加一个 checkbox //第一个实体 public class person { public int no { get; set; } publ ...
- NanoPi NEO2 学习笔记 1:安装系统、首次开机和一些设置
初识NEO2 前几天搞到了一块NanoPi NEO2,A53的核心,512M内存,一个千兆网口,非常小的体积,质量也不错,非常满意,140元的价格可以买到这样一块ARM开发板也是非常划算了,非常适合低 ...
- Java生成二维码(Java程序都可以使用)
工具类,链接:https://pan.baidu.com/s/18U399fTH5wBJPnL97pAekg 提取码:bmw7 注:里面的corejar包是使用的zxing的代码,我只是将其导出的ja ...
- Leetcode之回溯法专题-77. 组合(Combinations)
Leetcode之回溯法专题-77. 组合(Combinations) 给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合. 示例: 输入: n = 4, k = 2 输 ...