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>
- Servlet 技术
- Servlet技术
- Servlet 技术
- servlet 技术
- Servlet 技术
- Servlet技术
- servlet 技术
- Servlet技术
- Servlet 技术
- Servlet技术
- Servlet技术
- Servlet技术
- Servlet 技术
- Servlet技术
- Servlet技术
- Servlet技术
- servlet技术
- servlet技术
- 有关Windows免密码登陆远程桌面的两种实现方法
- HDU 2546 (01背包)
- iOS应用程序打包
- [bzoj4544]椭圆上的整点 解题报告
- Java四种线程池的使用以及callable future整理
- Servlet技术
- easyui扩展 - 验证两个字符串是否相同
- 函数模板和类模板
- android 改变app亮度不影响系统亮度(获取系统亮度)
- Android ORM 框架——greenDAO
- Linux 调优方案
- 最大连续子序列和
- Jmeter基础(一)---元件作用域与执行顺序
- PHP添加新模块