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 ...
随机推荐
- WSGI剖析
在一个 HTTP 请求到达服务器时, 服务器接收并调用 web 应用程序解析请求, 产生响应数据并返回给服务器. 这里涉及了两个方面的东西: 服务器(server)和应用程序(application) ...
- 面向对象设计原则 依赖倒置原则(Dependency Inversion Principle)
依赖倒置原则(Dependence Inversion Principle)是程序要依赖于抽象接口,不要依赖于具体实现. 简单的说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块 ...
- android 安全退出 activity
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha 定义一个 活动 的基础类, 每次打开一个 活动,就记录下来. 退出时,关闭每一个 活动. ...
- luoguP4466 [国际集训队]和与积 莫比乌斯反演
自然想到枚举\(gcd(a, b)\),不妨设其为\(d\),并且\(a = di, b = dj(a > b)\) 那么\(\frac{ab}{a + b} = \frac{dij}{i + ...
- luoguP3507 [POI2010]GRA 性质 + 动态规划
题目大意: 给定\(n\)个正整数,\(a, b\)两个人轮流取,\(a\)先手 每次可以取任意多的数,直到取完,每次的得分为取的数中的最小值 \(a, b\)都会使自己的得分减去对手的得分更大,询问 ...
- ST-PUZZLE-2.0(一个益智游戏)
注:未经博主允许不得转载. 原文链接:http://www.cnblogs.com/Blog-of-Eden/p/9060300.html 和 https://i-m-eden.github.io/2 ...
- android 从零单排 第一期 按键显示helloworld
啦啦啦- 我是qscqesze 今天开始android的从零单排啦啦啦- 首先从最简单的开始 要求: 程序运行后,单击屏幕上的按键后可以显示一句话,如“Hello World!” 这是一个最基础最基础 ...
- ROS知识(9)----安装Turtlebot2和远程控制Turtlebot2
安装turtlebot2,场景为:turtlebot2上搭载着一台电脑主机A,该电脑作为主机Master,有自带的电源和3D传感器,roscore在该台机器上启动.pc电脑远程连接A,和A通讯,pc不 ...
- Maven最佳实践 划分模块 配置多模块项目 pom modules
所有用Maven管理的真实的项目都应该是分模块的,每个模块都对应着一个pom.xml.它们之间通过继承和聚合(也称作多模块,multi-module)相互关联.那么,为什么要这么做呢?我们明明在开发一 ...
- hint.css使用说明
GitHub:http://liu12fei08fei.github.io/html/1hint.html hint.css使用说明 用途 快速实现tooltips提示样式 相关资源 官方网站GitH ...