1 Servlet
1.1 基本概念
Servlet(Server Applet),全称Java Servlet。是用Java编写的服务器端程序。其主要功能在于交互式地浏览和修改数据,生成动态Web内容。狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。
过程:
客户端发送请求至服务器
服务器启动并调用Servlet,Servlet根据客户端请求生成响应内容并将其传给服务器
服务器将响应返回客户端
1.2 生命周期
加载 ->2.初始化 - > 3.调用 - >4.销毁
1.3 重要函数
Javax.servlet软件包中相关类为ServletResponse、ServletRequest
Javax.servlet.http为HttpServletResponse、HttpServletRequest
1.3.1 init()方法
在Servlet的生命周期中,仅执行一次init()方法
1.3.2 Service()方法
包含两个参数:
HttpServletRequest,包含了客户端请求的信息,可以通过该参数取得客户端的一些信息(如IP、浏览器类型等)及HTTP请求类型(如GET、HEAD、POST、PUT等)
HttpServletResponse,通过调用HttpServletResponse.getOutputStream()客户取得客户端进行输出的输出流,向客户端发送HTML页面
当需要修改服务器端的数据时,应该使用doPost()方法
当不需要修改服务器端的数据时,应该使用doGet()方法
1.3.3 Destroy()方法
GetServletConfig()
GetServletInfo()
1.4 Selvlet配置
Web.xml
<servlet> <servlet-name>UserServlet</servlet-name> <servlet-class>com.demo.servlet.UserServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>UserServlet</servlet-name> <url-pattern>/UserServlet.do</url-pattern> </servlet-mapping> |
1.5 Servlet经典实例
1.5.1 编码过滤器
Web.xml添加过滤
<filter> <filter-name>EncodingFilter</filter-name> <filter-class>com.utils.EncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>gb2312</param-value> </init-param> </filter> <filter-mapping> <filter-name>EncodingFilter</filter-name> <url-pattern>/login.jsp</url-pattern> </filter-mapping> |
输入参数为encoding,设置为gb2312。匹配的URLo /*,表示匹配所有请求
EncodingFilter.java
package com.utils;
import javax.servlet.*; import javax.servlet.http.*;
public class EncodingFilter extends HttpServlet implements Filter{ private FilterConfig config=null; private String encoding=""; public void init(FilterConfig config)throws ServletException{ this.config=config; this.encoding=config.getInitParameter("encoding");
}
public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain) throws java.io.IOException,ServletException { HttpServletRequest req=(HttpServletRequest)request; HttpServletResponse res=(HttpServletResponse)response; response.setCharacterEncoding(this.encoding); java.io.PrintWriter out=res.getWriter(); out.print("过滤器设置编码为:"+this.encoding+"<br><br>"); chain.doFilter(req, res); } } |
1.5.2 站点计数监听器
Web.xml添加监听
<listener> <listener-class>com.utils.CounterListener</listener-class> </listener> |
CountListener.java
package com.utils; import javax.servlet.http.HttpSessionEvent; import javax.servlet.http.HttpSessionListener; public class CounterListener implements HttpSessionListener { public static int count; public CounterListener(){ count=0; } //创建一个session时激发 public void sessionCreated(HttpSessionEvent arg0) { count++; } //一个session失效时激发 public void sessionDestroyed(HttpSessionEvent arg0) { if(count>0)count--; } } |
在页面中增加以下代码
当前在线用户:<%=CounterListener.count %> |
Servlet调用
Web.xml中配置
<listener> <listener-class>com.utils.CounterListener</listener-class> </listener> |