三、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)的更多相关文章

  1. struts2开发action 的三种方法以及通配符、路径匹配原则、常量

    struts2开发action 的三种方法 1.继承ActionSupport public class UserAction extends ActionSupport { // Action中业务 ...

  2. Spring使用jdbcJdbcTemplate和三种方法配置数据源

    三种方法配置数据源 1.需要引入jar包:spring-jdbc-4.3.2.RELEASE.jar <!-- spring内置,springJdbc,配置数据源 --> <bean ...

  3. 转:Java Web 项目发布到Tomcat中三种部署方法

    首先整理项目文件,文件内包含jsp.js等和class编译后的文件及lib包,如: 第一种方法:在tomcat中的conf目录中,在server.xml中的,<host/>节点中添加:   ...

  4. Java Web 项目发布到Tomcat中三种部署方法

    第一种方法:在tomcat中的conf目录中,在server.xml中的,节点中添加: <Context path="/" docBase="E:\TOMCAT\a ...

  5. java 分次读取大文件的三种方法

    1. java 读取大文件的困难 java 读取文件的一般操作是将文件数据全部读取到内存中,然后再对数据进行操作.例如 Path path = Paths.get("file path&qu ...

  6. java多线程二之线程同步的三种方法

          java多线程的难点是在:处理多个线程同步与并发运行时线程间的通信问题.java在处理线程同步时,常用方法有: 1.synchronized关键字. 2.Lock显示加锁. 3.信号量Se ...

  7. spring集成JPA的三种方法配置

    JPA是Java EE5规范之一,是一个orm规范,由厂商来实现该规范.目前有hibernate,OpenJPA,TopLink和EclipseJPA等实现 spring提供三种方法集成JPA:1.L ...

  8. java web 项目中获取当前路径的几种方法

    1.jsp中取得路径:   以工程名为TEST为例: (1)得到包含工程名的当前页面全路径:request.getRequestURI() 结果:/TEST/test.jsp (2)得到工程名:req ...

  9. Java判断字符串是否为空的三种方法

    方法一: 最多人使用的一个方法, 直观, 方便, 但效率很低.1: if(s == null || s.equals("")); 方法二: 比较字符串长度, 效率高, 是我知道的最 ...

  10. ubuntu QT开发环境(三种方法安装Qt4.8,其中apt-get方法安装QT库最简单)good

    方法一 QT4.8.0库+QT Creator 2.4.1 特别声明:此方法极其耗时间,看电脑性能了.配置configure可减少编译时间 1.下载Qt .进入网址http://qt.nokia.co ...

随机推荐

  1. hdu 3308 线段树

    题目大意:给n个数,两种操作1:U  a b   更新第a个为b (从0开始)2: Q    a ,b  查询 a,b之间LCIS(最长连续递增子序列)的长度. Sample Input110 107 ...

  2. 保存全局Crash报告&发送邮件

    上篇写到,将程序中没有处理到的crash信息保存到本地文件夹下.但是实际的情况是,你不可能总是将用户的设备拿过来.所以一般性的处理是,将crash reports发送到服务器或者邮箱.所以针对上篇的代 ...

  3. 【POJ】1862:Stripies【贪心】【优先队列】

    Stripies Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 20456   Accepted: 9098 Descrip ...

  4. Codeforces Round #288 (Div. 2) B. Anton and currency you all know 贪心

    B. Anton and currency you all know time limit per test 0.5 seconds memory limit per test 256 megabyt ...

  5. vim选择命令

    最近在做一些无聊的客户化OSD,发现结合vim的一些命令更简单. 1.全选:ggVG(V:shift+v) 解释是:gg 让光标移到首行,在vim才有效,vi中无效:V 是进入Visual(可视)模式 ...

  6. JQUERY AJAX无刷新异步上传文件

    AJAX无刷新上传文件并显示 http://blog.csdn.net/gao3705512/article/details/9330637?utm_source=tuicool jQuery For ...

  7. setTimeout(fn, 0) 的作用

    在 zepto 源码中,$.fn 对象 有个 ready 函数,其中有这样一句 setTimeout(fn,0); 1 $.fn = { 2 ready: function(callback){ 3 ...

  8. 报错:不允许保存更改。您所做的更改要求删除并重新创建以下表……

    在使用SQL Server 2008为某个表添加列的时候出现启用了"阻止保存要求重新创建表的更改问题的设置方法..."报错:   解决方法: 工具--选项--Designers-- ...

  9. msgpack传文件

    msgpack传文件 procedure TForm1.Button1Click(Sender: TObject);var ms, ms2: TMemoryStream; pack: TSimpleM ...

  10. 【centOS7】centOS7上普通用户切换root用户,相互切换

    当前普通用户登录,想要切换为root用户,需要输入命令 su 需要输入root密码.输入时候屏幕不会显示,直接输入完了,回车即可 回车后,即切换到root用户下 想要从root用户切换到普通用户,只需 ...