04Servlet的生命周期
Servlet的生命周期
Servlet运行在Servlet容器中,其生命周期由容器来管理。Servlet的生命周期通过javax.servlet.Servlet接口中的init()、service()和destroy()方法来表示。
<html> <head> <meta content="text/html; charset=UTF-8"> <title>Servlet声明周期</title> </head> <body> <h2>通过POST方式传递参数</h2> <form action="ServletLife" method="POST"> <!-- 通过POST方式传递参数 --> 输入姓名: <input type="text" name="namepost" /> <br> <input type="submit" value="提交"/> </form> <h2>通过GET方式传递参数</h2> <form action="ServletLife" method="GET"> <!-- 通过GET方式传递参数 --> 输入姓名: <input type="text" name="nameget" /> <br> <input type="submit" value="提交"/> </form> </body> </html>
package com.ahabest.servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class ServletLife extends HttpServlet { private static final long serialVersionUID = 6694980741533555810L; /** 初始化参数. */ private String initParam; /** * 初始化. * @param config 初始化参数 * @throws Servlet异常 */ @Override public void init(ServletConfig config) throws ServletException { super.init(config); System.out.println("===初始化Servlet==="); // 获得初始化参数并打印出来 initParam = config.getInitParameter("sayhello"); System.out.println("我们获得的初始化参数是:" + initParam); } /** * service方法使用. * @param req Request * @param resp Response * @throws ServletException Servlet异常 * @throws IOException IO异常 */ @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println( "正在执行service方法,调用父类对应的方法,当前提交方式:" + req.getMethod()); super.service(req, resp); } /** * doGet方法使用. * @param req Request * @param resp Response * @throws ServletException Servlet异常 * @throws IOException IO异常 */ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 设置Request参数编码 req.setCharacterEncoding("UTF-8"); // 获得页面传递过来的参数 String nm = req.getParameter("nameget"); // 获得初始化参数字符串 nm = "通过GET方法获得的:" + nm + " , " + initParam; // 设定内容类型为HTML网页UTF-8编码 resp.setContentType("text/html;charset=UTF-8"); // 输出页面 PrintWriter out = resp.getWriter(); out.println("<html><head>"); out.println("<title>Servlet Life</title>"); out.println("</head><body>"); out.println(nm); out.println("</body></html>"); out.close(); System.out.println("正在执行doGet方法,页面会显示文字:" + nm); } /** * doPost方法使用. * @param req Request * @param resp Response * @throws ServletException Servlet异常 * @throws IOException IO异常 */ @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 设置Request参数编码 req.setCharacterEncoding("UTF-8"); // 获得页面传递过来的参数 String nm = req.getParameter("namepost"); // 获得初始化参数字符串 nm = "通过POST方法获得的:" + nm + " , " + initParam; // 设定内容类型为HTML网页UTF-8编码 resp.setContentType("text/html;charset=UTF-8"); // 输出页面 PrintWriter out = resp.getWriter(); out.println("<html><head>"); out.println("<title>Servlet Life</title>"); out.println("</head><body>"); out.println(nm); out.println("</body></html>"); out.close(); System.out.println("正在执行doPost方法,页面会显示文字:" + nm); } /** * 销毁Servlet实例. */ @Override public void destroy() { System.out.println("===销毁Servlet实例==="); super.destroy(); } }
<?xml version="1.0" encoding="gb2312"?> <web-app> <welcome-file-list> <welcome-file>ServletLife.html</welcome-file> </welcome-file-list> <servlet> <servlet-name>ServletLife</servlet-name> <servlet-class>com.ahabest.servlet.ServletLife</servlet-class> <init-param> <param-name>sayhello</param-name> <param-value>你好啊!</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>ServletLife</servlet-name> <url-pattern>/ServletLife</url-pattern> </servlet-mapping> </web-app>
04Servlet的生命周期的更多相关文章
- react组件的生命周期
写在前面: 阅读了多遍文章之后,自己总结了一个.一遍加强记忆,和日后回顾. 一.实例化(初始化) var Button = React.createClass({ getInitialState: f ...
- 浅谈 Fragment 生命周期
版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Fragment 文中如有纰漏,欢迎大家留言指出. Fragment 是在 Android 3.0 中 ...
- C# MVC 5 - 生命周期(应用程序生命周期&请求生命周期)
本文是根据网上的文章总结的. 1.介绍 本文讨论ASP.Net MVC框架MVC的请求生命周期. MVC有两个生命周期,一为应用程序生命周期,二为请求生命周期. 2.应用程序生命周期 应用程序生命周期 ...
- UIViewController生命周期-完整版
一.UIViewController 的生命周期 下面带 (NSObject)的方法是NSObject提供的方法.其他的都是UIViewController 提供的方法. load (NSObje ...
- angular2系列教程(十一)路由嵌套、路由生命周期、matrix URL notation
今天我们要讲的是ng2的路由的第二部分,包括路由嵌套.路由生命周期等知识点. 例子 例子仍然是上节课的例子:
- Spring中Bean的作用域、生命周期
Bean的作用域.生命周期 Bean的作用域 Spring 3中为Bean定义了5中作用域,分别为singleton(单例).protot ...
- Autofac - 生命周期
实例生命周期决定在同一个服务的每个请求的实例是如何共享的. 当请求一个服务的时候,Autofac会返回一个单例 (single instance作用域), 一个新的对象 (per lifetime作用 ...
- 【微信小程序开发•系列文章六】生命周期和路由
这篇文章理论的知识比较多一些,都是个人观点,描述有失妥当的地方希望读者指出. [微信小程序开发•系列文章一]入门 [微信小程序开发•系列文章二]视图层 [微信小程序开发•系列文章三]数据层 [微信小程 ...
- Xamarin.Android活动的生命周期
一.前言 用过Android手机的人一定会发现一种现象,当你把一个应用置于后台后,一段时间之后在打开就会发现应用重新打开了,但是之前的相关的数据却没有丢失.可以看出app的“生命”是掌握在系统手上的, ...
随机推荐
- Codechef Racing Horses题解
找一个数组中两数之间最小的不同值. 思路: 1 排序 2 后前相减,比較得到最小不同值 三个数甚至很多其它数之间的不同值都是这么求了,时间效率都是O(nlgn) -- 排序使用的时间 原题: http ...
- extern "C" 的含义:实现C++与C及其他语言的混合编程
C++中extern "C"的设立动机是实现C++与C及其他语言的混合编程. C++为了支持函数的重载,C++对全局函数的处理方式与C有明显的不同.对于函数void ...
- Android系统优化
这些事实上就是优化rom 的一些实用小技巧. 认为非常多还是实用的. Build.prop (编辑 /system/build.prop 文件(须要root, 能够用文件管理器或者其它root exp ...
- Delphi中WebBrowser控件打开部分网站报"Invalid floating point operation”解决
Delphi中WebBrowser控件打开部分网站报"Invalid floating point operation”解决 EmbeddedWBWebBrowserDelphi 最近用E ...
- ANT-普通替换和正则替换
ant提供了两个指令用于编译时修改文件,好处就不说了 ,就说说如何使用吧. replaceregexp 和 replace的区别就和java中String replace和replaceAll一样 , ...
- LR(逻辑回归)
逻辑回归(Logistic regression): 想要理解LR,只需要记住: Sigmoid 函数: y=1/(1+e-z) 线性回归模型: y=wTx+b 最后: y= 1/(1+e-(wTx+ ...
- html表格合并单元格
th标签 合并列 colspan="k" 合并行 rowspan="k" 例子<th colspan="2", rowspan=& ...
- bzoj 1641: [Usaco2007 Nov]Cow Hurdles 奶牛跨栏【Floyd】
先跑一遍取max版的Floyd,直接用数组回答询问即可 #include<iostream> #include<cstdio> using namespace std; con ...
- [App Store Connect帮助]六、测试 Beta 版本(3.1)管理测试员:添加内部测试员
您可以添加至多 25 个内部测试员(您的 App Store Connect 用户)使用“TestFlight Beta 版测试”来测试您的 App.在您上传了至少一个构建版本之后,才可添加测试员. ...
- 【js】JavaScript parser实现浅析
最近笔者的团队迁移了webpack2,在迁移过程中,笔者发现webpack2中有相当多的兼容代码,虽然外界有很多声音一直在质疑作者为什么要破坏性更新,其实大家也都知道webpack1那种过于“灵活”的 ...