三、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="">

最新文章

  1. 准备阶段-mongodb数据库安装
  2. iOS开发零基础--Swift教程 可选类型
  3. 使用ExpandoObject来实现多个Model传送至视图
  4. c++序列化方法
  5. 【nginx】负载均衡和proxy的配置
  6. Python2安装说明
  7. Yii 引入 js和css
  8. VS代码生成工具ReSharper使用手册:配置快捷键
  9. 记录一下C#+Oracle批量插入的一个方法
  10. Chapter 2 Open Book——28
  11. 获取app崩溃信息的途径 iOS
  12. Mybatis-Plus入门示例
  13. OO第二单元作业小结
  14. CF868 F. Yet Another Minimization Problem 决策单调优化 分治
  15. win7下一劳永逸地解决触控板禁用的问题
  16. 16_python_面向对象
  17. 「2017 山东一轮集训 Day5」字符串
  18. 查看iOS沙盒(SanBox)文件
  19. stm32 看门狗配置
  20. 负载均衡@StackExchange.Redis实现Session外置--纯干货喂饱你

热门文章

  1. SKLearn数据集API(一)
  2. 【数论】Codeforces Round #483 (Div. 2) [Thanks, Botan Investments and Victor Shaburov!] C. Finite or not?
  3. 解决CIFilter滤镜后图片大小和方向发生变化
  4. Git_创建版本库
  5. Git_简介
  6. Tomcat启动异常 java.net.BindException: Cannot assign requested address: JVM_Bind
  7. The YubiKey NEO -- Smartcard features
  8. linux(系统centos6.5)常用命令总结
  9. “CObject::operator =”: 无法访问 private 成员(在“CObject”类中声明)
  10. MVC文件上传09-使用客户端jQuery-File-Upload插件和服务端Backload组件让每个用户有专属文件夹,并在其中创建分类子文件夹