如何使用ij编写Servlet的生命周期?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用ij编写Servlet的生命周期?相关的知识,希望对你有一定的参考价值。
参考技术A在IntelliJ IDEA(以下简称IJ)中编写Servlet生命周期,需要完成以下步骤:
创建一个新的Web项目。
在菜单栏中选择“File” -> “New” -> “Project”。
在左侧的模板列表中选择“Java Enterprise”。
在右侧的内容面板中选择“Web Application”模板,并指定项目名称和存储位置,然后点击“Next”按钮。
按照向导指示进行下一步操作,直到创建新项目成功。
创建一个新的Servlet类。
在项目资源管理器中,展开“src/main/java”目录,并找到默认的Servlet类“HelloServlet.java”。
右键单击该类,选择“Refactor” -> “Rename”,将其重命名为“LifecycleServlet.java”。
右键单击“src/main/java”目录,选择“New” -> “Servlet”。
在“Create Servlet”对话框中,指定Servlet名称、URL映射和包名等信息,并选择“LifecycleServlet.java”作为父类。
点击“OK”按钮以创建新的Servlet类。
重写Servlet的生命周期方法。 在LifecycleServlet类中,可以重写Servlet接口定义的以下五个生命周期方法:
public class LifecycleServlet extends HttpServlet @Overridepublic void init() throws ServletException // Servlet初始化时执行的代码
@Override
public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException // Servlet处理请求时执行的代码
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException // 处理HTTP GET请求时执行的代码
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException // 处理HTTP POST请求时执行的代码
@Override
public void destroy() // Servlet销毁时执行的代码
其中,init()方法在Servlet被创建时执行,service()方法在每次请求到达Servlet时执行,doGet()和doPost()方法分别在处理HTTP GET和POST请求时执行,destroy()方法在Servlet被销毁时执行。您可以在相应的方法中编写自定义的代码,以实现特定的业务逻辑。
配置Servlet映射及Web服务器。 在LifecycleServlet类中重写完生命周期方法后,还需要在web.xml文件中配置Servlet映射及其他相关参数,以便Web服务器正确加载和调用Servlet。具体方式如下:
在项目资源管理器中,打开“WEB-INF”目录,在其中找到“web.xml”文件。
在“web.xml”文件中添加以下内容:
<servlet><servlet-name>LifecycleServlet</servlet-name>
<servlet-class>com.example.LifecycleServlet</servlet-class>
<load-on-startup>1</load-on-startup></servlet><servlet-mapping>
<servlet-name>LifecycleServlet</servlet-name>
<url-pattern>/lifecycle</url-pattern></servlet-mapping>
其中,servlet-name指定Servlet的名称,servlet-class指定Servlet的完整类名,load-on-startup指定Servlet在Web服务器启动时是否立即加载(这里设置为1表示是),url-pattern指定Servlet的URL映射路径。
部署并运行Web应用程序。 完成上述所有步骤后,就可以将Web应用程序部署到Web服务器上,并通过浏览器访问相应的URL,从而测试Servlet的生命周期方法是否按预期执行了。
以上是使用IJ编写Servlet生命周期的主要步骤。值得注意的是,在实际开发中,Servlet还有很多其他的用法和细节,需要进一步学习和掌握。
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>
以上是关于如何使用ij编写Servlet的生命周期?的主要内容,如果未能解决你的问题,请参考以下文章
熟悉基于JSP和Servlet的Java Web开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器过滤器等Web组件以及MVC架构