Servlet --- [Servlet,servlet的创建及使用,servlet的生命周期]
Posted 小智RE0
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Servlet --- [Servlet,servlet的创建及使用,servlet的生命周期]相关的知识,希望对你有一定的参考价值。
目录
什么是Servlet?
Servlet(Server Applet) 是Java Servlet的简称,意为用Java编写的服务器端的程序
,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。
它运行在web服务器中,web服务器负责Servlet和客户的通信以及调用Servlet方法,Servlet和客户通信
采用“请求/响应”的模式
。
狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。Servlet运行于支持Java的应用服务器中。从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。
最早支持Servlet标准的是JavaSoft的Java Web Server,此后,一些其它的基于Java的Web服务器开始支持标准的Servlet。
Servlet 的主要功能在于交互式地浏览和修改数据,生成动态 Web 内容。这个过程为:
- 客户端发送请求至服务器端;
- 服务器将请求信息发送至 Servlet;
- Servlet 生成响应内容并将其传给服务器。响应内容动态生成,通常取决于客户端的请求;
- 服务器将响应返回给客户端。
servlet的创建及使用
首先在WEB-INF
文件夹中创建名为lib
的Directory
;将需要的jar包文件导入.
将jar包添加到项目中.
按住Ctrl,将两个jar包同时选中,右键,选择Add as Library
(1)创建一个类继承javax.servlet.http包下的HttpServlet
/**
* 登录功能的servlet
*/
public class LoginServlet extends HttpServlet {
//构造方法:只被调用一次,仅创建一个servlet对象;
//只有第一次访问Servelt时或服务器启动时创建Servlet实例。
public LoginServlet() {
System.out.println("无参构造方法");
}
//Init方法:只被调用一次,在Servlet实例创建好实例后立即执行,用于执行一些初始化Servlet的操作。
@Override
public void init(ServletConfig config) throws ServletException {
System.out.println("init方法");
}
//service方法:多次调用,每次请求都调用service方法,根据请求方式调用doGet()或doPost()方法。
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("service方法");
}
//destroy:只被调用一次,在服务器关闭时调用,执行一些操作。
@Override
public void destroy() {
System.out.println("destory方法");
}
}
(2)在web.xml文件中配置Servlet
xml: 可扩展性标记语言; 主要用于存储数据.
web.xml:存储web项目的配置信息,在服务器启动时,由服务器读取.
<servlet>
元素用于注册Servlet,它包含有两个主要的子元素:
<servlet-name>
和<servlet-class>
,分别用于设置
Servlet的注册名称和Servlet的完整类名(取到类的字节码文件地址)。
<servlet-mapping>
元素用于映射已注册的Servlet的对外访问路径,
它包含有两个子元素:<servlet-name>
和<url-pattern>
,分别用于指定Servlet的注册名称和Servlet的对外访问路径。
<servlet-name>
对应<servlet>中的<servlet-name>
url-pattern配置模式
:”/”代表当前web应用的根目录
精确匹配 例如/test 访问http://10.43.11.143/myapp/test
匹配任意的url 例如/* 访问http://10.43.11.143/myapp/abc
同一个Servlet可以被映射到多个URL上。
例如:
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/demo.html</url-pattern>
<url-pattern>/table</url-pattern>
</servlet-mapping>
关于在web.xml文件中配置Servlet以及映射文件配置
<!--配置用于注册的Servlet-->
<servlet>
<servlet-name>login</servlet-name>
<!--通过反射机制:可根据类的地址动态创建对象-->
<servlet-class>com.lzq.startweb01.servlet.LoginServlet</servlet-class>
</servlet>
<!--<servlet-mapping> 用于映射已注册的Servlet的对外访问路径-->
<servlet-mapping>
<servlet-name>login</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
(3)编写前端jsp文件
例如,写个 form 表单,发送的数据将会对应到
<servlet-mapping>映射文件处,
再映射<servlet>
配置文件处;然后通过< servlet-class> 创建 LoginServlet 类对象.
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>初识JavaWeb</title>
</head>
<body>
<form action="login">
账号:<input type="text" name="account"/><br/>
密码:<input type="password" name="password"/><br/>
<input type="submit" value="登录"/>
</form>
</body>
</html>
(4)启动服务器
第一次点击登录提交时;控制台打印:
无参构造方法
init方法
service方法
第二次登录提交时;控制台打印:
service方法
关闭服务器时,销毁方法
destroy
执行.
其他配置文件
在
web.xml文件
配置<servlet>
时,还可使用标签元素 < load-on-startup>
当值小于0或者没有指定时,在该servlet被选择时才会去加载。
当值为0或者大于0,就会在服务器启动时加载servlet;
值越小,加载顺序优先级越高.
案例:
<servlet>
<servlet-name>login</servlet-name>
<!--反射机制:可根据类的地址动态创建对象-->
<servlet-class>com.lzq.startweb01.servlet.LoginServlet</servlet-class>
<!--默认为负数,当改为非负数时,服务器一启动,就会创建该servlet对象,加载该servlet-->
<load-on-startup>1</load-on-startup>
</servlet>
启动服务器;此时还未提交表单;无参构造方法与init方法就已经调用了;也是由于<load-on-startup>设置了非负数的缘故,服务器已启动,登录的servlet就加载
在
web.xml文件
配置<servlet>
时,还可使用标签元素<init-param>
;
用于配置初始化参数
案例:
<servlet>
<servlet-name>login</servlet-name>
<!--拿到这个类的字节码文件地址-->
<!--反射机制:可根据类的地址动态创建对象-->
<servlet-class>com.lzq.startweb01.servlet.LoginServlet</servlet-class>
<!--配置初始化参数-->
<init-param>
<param-name>names</param-name>
<param-value>9</param-value>
</init-param>
</servlet>
在LoginServlet的init初始化方法
中可以获取这个参数值;
//Init方法:只被调用一次,在Servlet实例创建好实例后立即执行,用于执行一些初始化Servlet的操作。
@Override
public void init(ServletConfig config) throws ServletException {
System.out.println("init方法");
//可获取到配置参数名为names的值;
System.out.println(config.getInitParameter("names"));
}
启动服务器;提交表单之后;获取到了在<init-param>
的param-value
中设置的数值.
servlet的生命周期
实例化:
调用构造方法:只被调用一次,仅创建一个servlet对象;只有第一次访问Servelt时或服务器启动时创建Servlet实例。
无参构造方法默认隐式存在
初始化:
调用Init方法:只被调用一次,在Servlet实例创建好实例后立即执行,用于执行一些初始化Servlet的操作。
若没有初始化,则默认调用父类的方法.
相关服务
service方法:可以多次调用,提供服务;每次请求都会调用service方法,根据请求方式调用doGet()或doPost()方法。
销毁(死亡)
destroy:只被调用一次,在服务器关闭时调用,例如执行数据日志保存,数据备份
若最终没有需要执行的;可以不去重写方法,但是默认调用父类的destory方法
无参构造的实例化方式,默认存在;
初始化方法 init ,默认调用父类的;
service方法,可调用父类中的; 在父类中会判断请求方式 ; get对应doGet方法; post对应doPost 方法.
销毁方法 destory 默认调用父类的;
更改默认的前端文件;
在web.xml添加配置
<!--设置默认加载页面-->
<welcome-file-list>
<welcome-file>指定的页面</welcome-file>
</welcome-file-list>
以上是关于Servlet --- [Servlet,servlet的创建及使用,servlet的生命周期]的主要内容,如果未能解决你的问题,请参考以下文章