Java Web -- Servlet(5) 开发Servlet的三种方法、配置Servlet具体解释、Servlet的生命周期(2)
三、Servlet的生命周期
一个Java servlet具有一个生命周期,这个生命周期定义了一个Servlet怎样被加载并被初始化,怎样接收请求并作出对请求的响应,怎样被从服务中清除。Servlet的生命周期被javax.servlet.Servlet这个接口所定义。
全部的Java Servlet都会直接地或间接地执行javax.servlet.Servlet接口。这样它才干在一个Servlet引擎中执行。
Servlet引擎是Web
server依照Java Servlet API定制的扩展。Servlet引擎提供网络服务,可以理解MIME请求,并提供一
个执行Servlet的容器。
javax.servlet.Servlet接口定义了在Servlet的生命周期中特定时间以及特定顺序被调用的方法。
Servlet
生命周期:Servlet 载入--->实例化--->服务--->销毁。
Servlet程序是由WEBserver调用。webserver收到client的Servlet訪问请求后:
(Webserver解析完主机名、web应用,紧接着查找资源。即到该web.xml查询。
)运行例如以下过程:
Init():
使用反射机制,假设该Servlet的实例不存在,载入、创建实例调用init方法将该实例装载到内存(仅仅调用一次)。即进行初始化。
Service(): Webserver把接收到的Http请求封装给HttpServletRequest对象(各种信息),作为service參数传入。service函数会被调用多次(每訪问一次Servlet,service就会被调用一次)
把response(响应给server的信息)拆解,形成http响应格式。
destroy(): 仅运行一次。在server端停止且卸载Servlet时运行该方法。当Servlet对象退出生命周期时,负责释放占用的资源。
一个Servlet在运行service()方法时可能会产生其它的线程,因此须要确认在调用destroy()方法时,这些线程已经终止或完毕。
Servlet的主要功能在于交互式地浏览和改动数据,生成动态Web内容。
过程概括例如以下:
(1)client发送请求至server端。
(2)server将请求信息内容并将其传给Server。
(3)Servlet生成响应内容并将其传给Server。
(4)响应内容动态生成。通常取决于client的请求。
(5)server将响应返回给client。
四、继承GenericServlet
继承GenericServlet与实现Servlet接口的不同就是把init()与destroy()封装在service抽象方法中,即继承GenericServlet可仅仅实现一个方法就好。其他步骤都与实现Servlet接口一样。
加入文件到classes文件夹下,创建文件
MyGenericServlet.java 代码例如以下:
package com.focus;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class MyGenericServlet extends GenericServlet
{
public void service(ServletRequest request, ServletResponse
response) throws ServletException, IOException
{
response.getWriter().println("hello world !!!!!");
}
}
配置一下Servlet
<servlet>
<servlet-name>MyGenericServlet</servlet-name>
<display-name>MyGenericServlet</display-name>
<servlet-class>com.focus.MyGenericServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyGenericServlet</servlet-name>
<url-pattern>/Generic</url-pattern>
</servlet-mapping>
在浏览器输入:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
效果例如以下:
五、继承HttpServle
加入文件到classes文件夹下,创建文件
MyHttpServlet.java 代码例如以下:
package com.focus;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class MyHttpServlet extends HttpServlet
{
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException
{
response.setCharacterEncoding("gbk");
response.getWriter().println("欢迎
"+request.getParameter("username")+"
光临本站点");
}
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException,IOException
{
response.getWriter().println("i am doGet");
}
}
配置一下Servlet
<servlet>
<servlet-name>MyHttpServlet</servlet-name>
<display-name>MyHttpServlet</display-name>
<servlet-class>com.focus.MyHttpServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyHttpServlet</servlet-name>
<url-pattern>/MyHttpServlet</url-pattern>
</servlet-mapping>
在ServletTest文件夹下创建一个
go.html 代码例如以下:
<html>
<head>
<title>登录页面</title>
</head>
<body>
<form action="/ServletTest/MyHttpServlet" method="post">
姓 名:<input type="text" name="username" /><br/>
密 码:<input type="password" name="userpass" /><br/>
<input type="submit" value="提交" />
</form>
</body>
</html>
在浏览器输入:
效果例如以下:
证明HttpServlet默认调用的是doGet
在浏览器输入:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
效果例如以下:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
按提交button。跳转页面
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
Java Web -- Servlet(5) 开发Servlet的三种方法、配置Servlet具体解释、Servlet的生命周期(2)的更多相关文章
- struts2开发action 的三种方法以及通配符、路径匹配原则、常量
struts2开发action 的三种方法 1.继承ActionSupport public class UserAction extends ActionSupport { // Action中业务 ...
- Spring使用jdbcJdbcTemplate和三种方法配置数据源
三种方法配置数据源 1.需要引入jar包:spring-jdbc-4.3.2.RELEASE.jar <!-- spring内置,springJdbc,配置数据源 --> <bean ...
- 转:Java Web 项目发布到Tomcat中三种部署方法
首先整理项目文件,文件内包含jsp.js等和class编译后的文件及lib包,如: 第一种方法:在tomcat中的conf目录中,在server.xml中的,<host/>节点中添加: ...
- Java Web 项目发布到Tomcat中三种部署方法
第一种方法:在tomcat中的conf目录中,在server.xml中的,节点中添加: <Context path="/" docBase="E:\TOMCAT\a ...
- java 分次读取大文件的三种方法
1. java 读取大文件的困难 java 读取文件的一般操作是将文件数据全部读取到内存中,然后再对数据进行操作.例如 Path path = Paths.get("file path&qu ...
- java多线程二之线程同步的三种方法
java多线程的难点是在:处理多个线程同步与并发运行时线程间的通信问题.java在处理线程同步时,常用方法有: 1.synchronized关键字. 2.Lock显示加锁. 3.信号量Se ...
- spring集成JPA的三种方法配置
JPA是Java EE5规范之一,是一个orm规范,由厂商来实现该规范.目前有hibernate,OpenJPA,TopLink和EclipseJPA等实现 spring提供三种方法集成JPA:1.L ...
- java web 项目中获取当前路径的几种方法
1.jsp中取得路径: 以工程名为TEST为例: (1)得到包含工程名的当前页面全路径:request.getRequestURI() 结果:/TEST/test.jsp (2)得到工程名:req ...
- Java判断字符串是否为空的三种方法
方法一: 最多人使用的一个方法, 直观, 方便, 但效率很低.1: if(s == null || s.equals("")); 方法二: 比较字符串长度, 效率高, 是我知道的最 ...
- ubuntu QT开发环境(三种方法安装Qt4.8,其中apt-get方法安装QT库最简单)good
方法一 QT4.8.0库+QT Creator 2.4.1 特别声明:此方法极其耗时间,看电脑性能了.配置configure可减少编译时间 1.下载Qt .进入网址http://qt.nokia.co ...
随机推荐
- php异步实现,避免长时间等待
处理的php异步的方法有好几种,这里我就只介绍我经常用的而且官方也推荐的 废话少说,直接贴代码 //php异步 public function doRequest($host,$path, $para ...
- 【Floyd(并非水题orz)】BZOJ4093-[Usaco2013 Dec]Vacation Planning
最近刷水太多标注一下防止它淹没在silver的水题中……我成为了本题,第一个T掉的人QAQ [题目大意] Bovinia设计了连接N (1 < = N < = 20,000)个农场的航班. ...
- 【BZOJ】4720: [Noip2016]换教室
4720: [Noip2016]换教室 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 1690 Solved: 979[Submit][Status ...
- Vue+Express实现前后端分离
先说明一下缘由,因为自己前段时间在实习,实习期间为了参与项目开发,粗略学习了下Vue.Vuex.Vue-Router,大致会一些基础的.这里也快要做毕业设计了,趁着放假回来的这两天,学习下Node的相 ...
- Codeforces Round #354 (Div. 2) B. Pyramid of Glasses 模拟
B. Pyramid of Glasses 题目连接: http://www.codeforces.com/contest/676/problem/B Description Mary has jus ...
- Codeforces Round #257 (Div. 2) C. Jzzhu and Chocolate
C. Jzzhu and Chocolate time limit per test 1 second memory limit per test 256 megabytes input standa ...
- Codeforces Round #295 (Div. 2)B - Two Buttons BFS
B. Two Buttons time limit per test 2 seconds memory limit per test 256 megabytes input standard inpu ...
- 配置主从Mysql
怎么安装mysql数据库,这里不说了,只说它的主从复制,步骤如下: 1.主从服务器分别作以下操作: 1.1.版本一致 1.2.初始化表,并在后台启动mysql 1.3.修改root的密码 2.修 ...
- apple developer D-U-N-S® Number
From:https://developer.apple.com/support/D-U-N-S/ The D-U-N-S Number is a unique nine-digit number t ...
- 浅用block 转
block是一门有用的大后期学问.现在我只是列出一点基本用法. 1.快速枚举(Enumeration) 通常是和NSArray, NSDictionary, NSSet, NSIndexSet放在一起 ...