Servlet技术

来源:互联网 发布:单片机流水灯实验报告 编辑:程序博客网 时间:2024/05/16 09:12

在Java Web程序开发中,Servlet主要用于处理各种业务逻辑,它比JSP更具有业务逻辑层的意义,而且Servlet的安全性、扩展性和性能都十分优秀,它在Java Web程序开发及MVC模式的应用方面起到了极其重要的作用。


Servlet是一个接口,它常用的方法有:

public void service(ServletRequest request,ServletResponse response) //Servlet在处理客户端请求时,调用此方法。public ServletConfig getServletConfig() //用于获取Servlet对象的配置信息,返回ServletConfig对象public String getServletInfo()  //返回有关Servlet的信息,它是纯文本格式的字符串,如作者、版本等

HttpServlet类是Servlet接口的实现类,此类主要封装了对Http请求的处理方法,其常用方法生命及说明如下:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//方法体内容}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//方法体内容}

HttpServletRequest类:位于javax.servlet.http包中,它封装了Http的请求,通过此对象可以获取客户端传递的Http的请求参数,其常用方法声明及说明如下:

public String getContextPath() //返回上下文路径,此路径以“/”开头public Cookie[] getCookies() //返回所有Cookie对象,返回值类型为Cookie数组public String getMethod() //返回Http请求的类型,如GET POST等public String getRequestURI() //返回请求URI路径public HttpSession getSession() //返回与客户端关联的HttpSession对象

HttpServletResponse类:位于javax.servlet.http包中,它封装了对Http的请求的回应,通过此对象可以向客户端发送回应,其常用方法声明及说明如下:

public void addCookie(Cookie cookie) //向客户端发送Cookie信息public void sendRedirect(String location) //将客户端请求重定向到新的URL

Servlet过滤器

Servlet过滤器与Servlet十分相似,但它具有拦截客户端浏览器请求的功能,Servlet过滤器可以改变请求中的内容,来满足实际开发的需要。对于程序开发人员而言,过滤器实质上就是在Web应用服务器上的一个Web应用组件,用于拦截客户端浏览器与目标资源的请求,并对这些请求进行一定过滤处理再发送给目标资源。在Web容器中部署了过滤器以后,不仅客户端发送的请求会经过过滤器的处理,而且请求在被送到目标资源处理以后,请求的回应信息也同样要经过过滤器。如果在Web容器中部署了过滤器链,也就是部署了多个过滤器,请求会依次按照过滤器顺序进行处理,在第一个过滤器处理请求后,会将其传递给第二个过滤器进行处理,以此类推,一直传递到最后一个过滤器为止,再将请求交给目标资源进行处理。目标资源在处理了经过过滤的请求后,其回应信息再从最后一个过滤器依次被传递到第一个过滤器,最后传送到客户端,这就是过滤器在过滤链中的应用流程。

Filter接口

每一个过滤器对象都要直接或者间接的实现Filter接口。Filter接口定义了3个方法,分别是init()方法、doFilter()方法与destroy()方法,其方法声明及说明如下:

public void init(FilterConfig fConfig) throws ServletException {//方法体} //过滤器初始化方法,此方法在过滤器初始化时被调用public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {//方法体}//对请求进行过滤处理public void destroy() {}//销毁方法,释放资源

FilterConfig接口:主要用于获取过滤器中的配置信息,其方法声明及说明如下:

public ServletContext getServletContext() //获取Servlet上下文public String getInitParameter(String name) //获取过滤器的初始化参数值public Enumeration getInitParameterNames() 获取过滤器的所有初始化参数

FilterChain接口:只有一个方法,起方法声明如下:

public void doFilter(ServletRequest request,ServletResponse response) throws IOException,ServletException

下面给出一个项目代码实例,这个项目实现了通过Servlet添加一个User对象,并通过Filter过滤器对中文字符进行过滤输出。

1、index.jsp页面代码------添加用户入口:

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>添加用户入口</title></head><body><form action="addUser" method="post"><div style="margin-top:100px;text-align:center;margin-bottom:10px;font-size:24px;font-weight:bolder">添加用户页面</div><table align="center" cellpadding="0" cellspacing="0" ><tr><td style="text-align:right">姓名:</td><td style="text-align:left"><input type="text" name="name" value="" /></td></tr><tr><td style="text-align:right">性别:</td><td style="text-align:left"><input type="radio" name="sex" value="男" />男 <input type="radio" name="sex" value="女" />女</td></tr><tr><td style="text-align:right">年龄:</td><td style="text-align:left"><input type="text" name="age" value="" /></td></tr></table><div style="margin-top:10px;text-align:center;"><input type="submit" value="增加"/></div></form></body></html>


2、User.java ---- 用户实体类

package com.kj.test;public class User {/** 姓名 */private String name;/** 性别 */private String sex;/** 年龄 */private String age;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public String getAge() {return age;}public void setAge(String age) {this.age = age;}}

3、MyFilter.java ---- 定义中文字符过滤器

package com.kj.test;import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;public class MyFilter implements Filter {private String encode;public MyFilter() {    }public void destroy() {}public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {if (encode != null) {request.setCharacterEncoding(encode);response.setContentType("text/html;charset="+encode);}chain.doFilter(request, response);}public void init(FilterConfig fConfig) throws ServletException {encode = fConfig.getInitParameter("encode");}}

4、AddUserServlet.java ----- 添加用户Servlet处理类:

package com.kj.test;import java.io.IOException;import java.util.ArrayList;import java.util.List;import javax.servlet.RequestDispatcher;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 AddUserServlet extends HttpServlet {private static final long serialVersionUID = 1L;           public AddUserServlet() {        super();    }protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String name = request.getParameter("name");String sex = request.getParameter("sex");String age = request.getParameter("age");User user = new User();user.setAge(age);user.setName(name);user.setSex(sex);ServletContext application = getServletContext();List<User> userList = (List<User>) application.getAttribute("users");if (userList == null) {userList = new ArrayList<User>();}userList.add(user);application.setAttribute("users", userList);RequestDispatcher dispathcer = request.getRequestDispatcher("manageUser.jsp");dispathcer.forward(request, response);}}

5、web.xml ---- 配置Servlet和Filter

<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">  <display-name>servletTest</display-name>  <!-- servlet配置示例 -->  <servlet>    <servlet-name>AddUserServlet</servlet-name>    <servlet-class>com.kj.test.AddUserServlet</servlet-class>  </servlet>  <servlet-mapping>    <servlet-name>AddUserServlet</servlet-name>    <url-pattern>/addUser</url-pattern>  </servlet-mapping>  <!-- filter配置示例 -->  <filter>  <filter-name>MyFilter</filter-name>  <filter-class>com.kj.test.MyFilter</filter-class>  <init-param>  <param-name>encode</param-name>  <param-value>UTF-8</param-value>  </init-param>  </filter>  <filter-mapping>  <filter-name>MyFilter</filter-name>  <url-pattern>/*</url-pattern>  </filter-mapping>  <welcome-file-list>    <welcome-file>index.html</welcome-file>    <welcome-file>index.htm</welcome-file>    <welcome-file>index.jsp</welcome-file>    <welcome-file>default.html</welcome-file>    <welcome-file>default.htm</welcome-file>    <welcome-file>default.jsp</welcome-file>  </welcome-file-list></web-app>

5、manageUser.jsp ---- Servlet处理增加用户请求后返回用户管理的页面:

<%@page import="com.kj.test.User"%><%@page import="java.util.List"%><%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>管理用户页面</title></head><body><div style="margin-top:100px;text-align:center;margin-bottom:10px;font-size:24px;font-weight:bolder">管理用户页面</div><table align="center" border="1" cellpadding="0" cellspacing="0" ><%List<User> userList = (List<User>) application.getAttribute("users");if (userList != null && userList.size() > 0) {for (User user : userList) {%><tr><td style="text-align:right">姓名:</td><td style="text-align:left"><%=user.getName() %></td><td style="text-align:right">性别:</td><td style="text-align:left"><%=user.getSex() %></td><td style="text-align:right">年龄:</td><td style="text-align:left"><%=user.getAge() %></td></tr><%}}%></table></body></html>


2 0
原创粉丝点击