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 ...
随机推荐
- python opencv3 使用numpy访问图像数据
# coding:utf8 import cv2 """ 将bgr在(0, 0)处改为白色像素 0号为green 1号为blue 2号为red img的每一个位置存一个 ...
- CodeForces1070A Find a Number 图论
令状态$f(i, j)$表示模$d$为$i$,和为$j$时的最小数 可以通过$bfs$来转移 然而就没了... 复杂度$O(10ds)$ #include <queue> #include ...
- CF961E Tufurama 主席树
对原问题进行转化 考虑对每个$i$,询问在$j \in [i + 1, a[i]]$中满足$a[j] \geqslant i$的个数 这样子可以做到不重不漏 个数满足差分的性质,使用主席树来维护即可 ...
- maven 自动部署到 tomcat7
多方搜索,终于使maven项目可以自动发布到tomcat下了. tomcat7 需要使用 tomcat-maven-plugin 的新版本,版本支持tomcat6和tomcat7,groupId也由o ...
- windows的磁盘操作之九——区分本地磁盘与移动硬盘
http://cutebunny.blog.51cto.com/301216/674443 最近碰到了个新问题,记录下来作为windows的磁盘操作那个系列的续篇吧. 一些时候我们的程序需要区分本地存 ...
- MVC使用Gantt Chart实现甘特图,管理事情进度
借助"甘特图",可以直观地了解任务.活动.工作的进度.dhtmlxGantt是一个开源的Javacirpt库,能帮助我们快速创建"甘特图",本篇体验在MVC中的 ...
- 咏南WEB框架群集
咏南WEB框架群集 咏南WEB框架支持群集部署,支持负载均衡和自动故障转移. 咏南WEB群集部署在阿里云服务器上面. 在线测试:http://47.106.93.126:9999/
- 解决小米手机不能运行Android Studio程序的问题
转载自:解决小米手机不能运行Android Studio程序的问题 问题描述 Android Studio升级到2.3版本之后,小米手机MIUI8不能运行Android Studio程序,报如下错误: ...
- EF Code First 学习笔记:表映射 多个Entity到一张表和一个Entity到多张表
多个实体映射到一张表 Code First允许将多个实体映射到同一张表上,实体必须遵循如下规则: 实体必须是一对一关系 实体必须共享一个公共键 观察下面两个实体: public class Per ...
- 栅栏加解密python实现(支持密钥加密)
栅栏加解密是对较短字符串的一种处理方式.给定行数Row,依据字符串长度计算出列数Column,构成一个方阵. 加密过程:就是按列依次从上到下对明文进行排列,然后依照密钥对各行进行打乱.最后以行顺序从左 ...