第九章 Servlet API
第九章 Servlet API
Servlet API 定义了Servlet和服务器之间的一个标准接口,这使得Servlet具有跨应用服务器的特性,通过使用Servlet API,开发人员不必关心服务器的内部运作方式。
Servlet API由两个软件包组成:Javax.servlet包和Javax.servlet.http包
一个存放与HTTP协议无关的一般性Servlet类,另一个存放与HTTP协议相关的功能的类。这两个软件包位于Tomcat的servlet-api.jar中,在myeclipse中创建项目的时候引入Java EE 6也是可以的。
- 1. servletConfig接口
在Servlet的配置文件中,可以使用一个或多个<init-param>标签为servlet配置一些初始化参数。
当servlet配置了初始化参数后,web容器在创建servlet实例对象时,会自动将这些初始化参数封装到ServletConfig对象中,并在调用servlet的init方法时,将ServletConfig对象传递给servlet。进而,程序员通过ServletConfig对象就可以得到当前servlet的初始化参数信息
从一个servlet实例化后,对任何客户端任何时候访问都有效,只对本servlet有效,一个servlet的ServletConfig不能被其他sevlet访问
案例:
配置:通过web.xml文件中的<init-param>标签进行设置,
|
<servlet> <servlet-name>ServletConfigDemo1</servlet-name> <servlet-class>com.silvan.servlet.ServletConfigDemo1</servlet-class> <init-param> <param-name>name</param-name> <param-value>ross</param-value> </init-param> <load-on-startup>0</load-on-startup> </servlet> <servlet-mapping> <servlet-name>ServletConfigDemo1</servlet-name> <url-pattern>/ServletConfigDemo1</url-pattern> </servlet-mapping> |
获取:在servlet实现类里面通过getServletConfig().getInitParameter("name")获取;
|
package com.silvan.servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class ServletConfigDemo1 extends HttpServlet { /** * Constructor of the object. */ public ServletDemo1() { super(); } /** * Destruction of the servlet. <br> */ public void destroy() { super.destroy(); // Just puts "destroy" string in log // Put your code here } /** * The doGet method of the servlet. <br> * * This method is called when a form has its tag value method equals to get. * * @param request the request send by the client to the server * @param response the response send by the server to the client * @throws ServletException if an error occurred * @throws IOException if an error occurred */ public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String name = getServletConfig().getInitParameter("name"); response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">"); out.println("<HTML>"); out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>"); out.println(" <BODY>"); out.print(" This is "); out.print(name); out.println(" </BODY>"); out.println("</HTML>"); out.flush(); out.close(); } /** * The doPost method of the servlet. <br> * * This method is called when a form has its tag value method equals to post. * * @param request the request send by the client to the server * @param response the response send by the server to the client * @throws ServletException if an error occurred * @throws IOException if an error occurred */ public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } /** * Initialization of the servlet. <br> * * @throws ServletException if an error occurs */ public void init() throws ServletException { String name = getServletConfig().getInitParameter("name"); System.out.println("this is "+name); } } |
- 2. ServletContext接口
WEB容器在启动时,它会为每个WEB应用程序都创建一个对应的ServletContext对象,它代表当前web应用。
ServletConfig对象中维护了ServletContext对象的引用,开发人员在编写servlet时,可以通过ServletConfig.getServletContext方法获得ServletContext对象。
由于一个WEB应用中的所有Servlet共享同一个ServletContext对象,因此Servlet对象之间可以通过ServletContext对象来实现通讯。ServletContext对象通常也被称之为context域对象。
ServletContext对任何servlet,任何人在任何时间都有效,是真正的全局对象
案例:
配置:通过web.xml文件中的<context-param>标签设置
|
<context-param> <param-name>name</param-name> <param-value> ross</param-value> </context-param> <servlet> <servlet-name>ServletContextDemo1</servlet-name> <servlet-class>com.silvan.servlet.ServletContextDemo1</servlet-class> </servlet> <servlet-mapping> <servlet-name>ServletContextDemo1</servlet-name> <url-pattern>/ServletContextDemo1</url-pattern> </servlet-mapping> |
获取: getServletContext().getInitParameter(“name”);
getServletConfig().getServletContext().getInitParameter(“name”);
|
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String name1 = getServletContext().getInitParameter("name"); String name2 = getServletConfig().getServletContext().getInitParameter("name"); response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">"); out.println("<HTML>"); out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>"); out.println(" <BODY>"); out.print("直接getServletContext()取得name为:" +name1); out.println("<br/>"); out.print("getServletConfig()对象中取得name为:"+name2); out.println(" </BODY>"); out.println("</HTML>"); out.flush(); out.close(); } |
显示
案例:
统计站点访问次数
配置web.xml
|
<servlet> <servlet-name>ServletContextDemo21</servlet-name> <servlet-class>com.silvan.servlet.ServletContextDemo21</servlet-class> </servlet> <servlet> <servlet-name>ServletContextDemo22</servlet-name> <servlet-class>com.silvan.servlet.ServletContextDemo22</servlet-class> </servlet> <servlet-mapping> <servlet-name>ServletContextDemo21</servlet-name> <url-pattern>/ServletContextDemo21</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>ServletContextDemo22</servlet-name> <url-pattern>/ServletContextDemo22</url-pattern> </servlet-mapping> |
统计访问次数
ServletContextDemo21.java
|
package com.silvan.servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class ServletContextDemo21 extends HttpServlet { /** * Constructor of the object. */ public ServletContextDemo21() { super(); } /** * Destruction of the servlet. <br> */ public void destroy() { super.destroy(); // Just puts "destroy" string in log // Put your code here } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 每次访问获得原来访问次数+1 ServletContext context = getServletContext(); // 获得访问次数 int count = (Integer) context.getAttribute("count"); // 次数+1保存 context.setAttribute("count", ++count); System.out.println("context对象地址:"+context); System.out.println("网站被访问次数为:" + count); // 浏览器显示中文 response.setContentType("text/html;charset=utf-8"); response.getWriter().println("context对象地址:" + context+"<br/>"); response.getWriter().println("Demo1网站被访问次数为:" + count); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet( request, response); } public void init() throws ServletException { // 在ServletContext对象中保存一个访问次数 ServletContext context = getServletContext(); if(context.getAttribute("count")==null){ // 保存一个数据 context.setAttribute("count", 0); } } } |
ServletContextDemo22.java
|
package com.silvan.servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class ServletContextDemo22 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 每次访问获得原来访问次数+1 ServletContext context = getServletContext(); // 获得访问次数 int count = (Integer) context.getAttribute("count"); // 次数+1保存 context.setAttribute("count", ++count); System.out.println("context对象地址:"+context); System.out.println("网站被访问次数为:" + count); // 浏览器显示中文 response.setContentType("text/html;charset=utf-8"); response.getWriter().println("context对象地址:" + context+"<br/>"); response.getWriter().println("Demo1网站被访问次数为:" + count); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet( request, response); } public void init() throws ServletException { // 在ServletContext对象中保存一个访问次数 ServletContext context = getServletContext(); if(context.getAttribute("count")==null){ // 保存一个数据 context.setAttribute("count", 0); } } } |
访问
第九章 Servlet API的更多相关文章
- 第九章 Servlet工作原理解析
9.1 从Servlet容器说起 Servlet容器:Jetty, Tomcat等. 这里以Tomcat为例, 真正管理Servlet的容器是Context容器,一个Context对应一个WE ...
- 第九章 Servlet工作原理解析(待续)
从 Servlet容器说起 创建 Servlet实例 Servlet体系结构 Servlet如何工作 Servlet中的Listener Filter如何工作 Servlet中的url-pattern
- Servlet工作原理解析 《深入分析java web 技术内幕》第九章
参考关于servblet的相关文章 侧重概况:https://blog.csdn.net/levycc/article/details/50728921 ibm的相关:https://www.ibm. ...
- 精通Web Analytics 2.0 (11) 第九章: 新兴分析—社交,移动和视频
精通Web Analytics 2.0 : 用户中心科学与在线统计艺术 第九章: 新兴分析-社交,移动和视频 网络在过去几年中发生了不可思议的发展变化:从单向对话到双向对话的转变; 由视频,Ajax和 ...
- [Effective Java]第九章 异常
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- 第九章 C语言在嵌入式中的应用
上章回顾 编码的规范和程序版式 版权管理和申明 头文件结构和作用 程序命名 程序注释和代码布局规范 assert断言函数的应用 与0或NULL值的比较 内存的分配和释放细节,避免内存泄露 常量特性 g ...
- Laxcus大数据管理系统2.0(11)- 第九章 容错
第九章 容错 在当前,由于集群庞大的组织体系和复杂性,以及用户普遍要求低成本硬件,使得集群在运行过程中发生的错误概率,远远高于单一且性能稳定的小型机服务器,并且集群在运行过程中几乎是不允许停止的,这就 ...
- [转]Windows Shell 编程 第九章 【来源:http://blog.csdn.net/wangqiulin123456/article/details/7987969】
第九章 图标与Windows任务条 如果问一个非程序人员Windows最好的特色是什么,得到的答案应该是系统最有吸引力的图标.无论是Windows98现在支持的通用串行总线(USB)还是WDM(看上去 ...
- jQuery第九章
第九章 jQuery Mobile 一.HTML5.0简介 谈到Web设计,我们经常把Web分为三个层: (1)结构层:(2)表现层:(3)行为层. 对应的技术分别是: (1)HTML:(2)CSS: ...
随机推荐
- 编译驱动模块所需的Makefile
目标定义:就是用来定义哪些内容作为模块编译,哪些内容要编译并链接进内核. obj-y += foo.o 表示要由foo.c或者foo.s文件编译得到foo.o并链接进内核: obj-m则表示该文件要作 ...
- 工具-VS插件Resharper快捷键
编辑Ctrl + Space 代码完成 Ctrl + Shift + Space代码完成Ctrl + Alt + Space代码完成Ctrl + P 显示参数信息Alt + Insert 生成构造函数 ...
- cogs 1143. [石门中学2009] 切割树
1143. [石门中学2009] 切割树 ★ 输入文件:treecut.in 输出文件:treecut.out 简单对比时间限制:1 s 内存限制:128 MB treecut 题目描 ...
- mac下连接本地安装的mysql报错提示密码过期
前提: mac中之前安装了mysql,一段时间没使用,今天使用mysql客户端去连接,报错提示密码过期,原因是mysql5.7之后版本有密码过期这个功能. error: Your password h ...
- Android 经常使用设计模式(一)
由于项目变更的频繁性,作为一名程序猿,我们须要掌握设计模式的必要性.就不言而喻~~.以下就是一些我自己学习的设计模式总结. 接下来,主要是针对几个比較经常使用模式进行解说,主要是以下几种: 观察者模式 ...
- Linux 网卡驱动学习(六)(应用层、tcp 层、ip 层、设备层和驱动层作用解析)
本文将介绍网络连接建立的过程.收发包流程,以及当中应用层.tcp层.ip层.设备层和驱动层各层发挥的作用. 1.应用层 对于使用socket进行网络连接的server端程序.我们会先调用socket函 ...
- Ubuntu14.04下初步使用MongoDB
不多说,直接上干货! Ubuntu14.04下Mongodb(在线安装方式|apt-get)安装部署步骤(图文详解)(博主推荐) shell命令模式 输入mongo进入shell命令模式,默认连接的数 ...
- Oracle中的数据字典技术及常用数据字典总结
一.Oracle数据字典 数据字典是Oracle存放有关数据库信息的地方,其用途是用来描述数据的.比如一个表的创建者信息,创建时间信息,所属表空间信息,用户访问权限信息等.当用户在对数据库中的数据进行 ...
- 从零开始学习SVG
1 什么是SVG? MDN中的定义是:SVG即可缩放矢量图形(Scalable Vector Graphics,SVG),是一种用来描述二维矢量图形的 XML 标记语言. 简单地说,SVG 面向图形, ...
- Android 中的View与ViewGroup
Android重点知识--View和ViewGroup与自定义控件 作者:丁明祥 邮箱:2780087178@qq.com 一.基础 ViewGroup 参考资料: Android 手把手教您自定义V ...