jsp实验5

  • 格式:doc
  • 大小:190.50 KB
  • 文档页数:15

Java web应用编程基础实验报告实验5:Servlet实验一、实验目的:●理解Servlet、过滤器和监听器概念,掌握Servlet、过滤器和监听器的基本使用方法。

二、实验要求:●使用专业开发工具MyEclipse编程。

●上交实验报告电子文档(文档包含源程序,以班级、学号、姓名依次出现组成的字符串标识文档,以班级为单位上交)。

三、实验内容:1、用JSP编写用户登录页面,用Servlet和处理并在返回给客户端的页面上,显示登录时填写的用户名及密码。

2、用JSP编写发帖页面,用过滤器过滤帖子中的非法文字如脏话、下流词语(过滤掉的每个字符均用一个“*”代替),将过滤后的帖子内容在另一显示页面上输出。

3、应用监听器监听某个用户的登录。

当该用户登录时,在另一监控页面(假定是系统管理员的监控页面)上会出现相应提示信息。

四、实验过程中遇到的问题及解决手段:在实验2的时候,过滤器的配置文件总是写错。

导致文件无法识别或无效,通过网上查找解决了问题。

五、程序源代码:1.SessionServlet.java web.xmlSessionServlet.javapackage com;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.Servlet;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;/*** 使用HttpSession管理会话的登录Servlet*/@WebServlet("/SessionServlet")public class SessionServlet extends HttpServlet implements Servlet { private static final long serialVersionUID = 1L;/*** @see HttpServlet#HttpServlet()*/public SessionServlet() {super();// TODO Auto-generated constructor stub}/*** @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)*/protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request, response);}/*** @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)*/protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType("text/html;charset=GB2312");PrintWriter out = response.getWriter();out.println("<body>");out.println("<head>");out.println("<title>使用HttpSession管理会话的登录页面</title>"); out.println("</head>");out.println("<body>");//获取会话对象HttpSession session = request.getSession();//从会话对象中读取数据Boolean isLogin = (Boolean)session.getAttribute("isLogin");if(isLogin == null){isLogin = Boolean.FALSE;}String user = request.getParameter("user");String password = request.getParameter("pass");if(isLogin.booleanValue()){//会话对象中读取数据user = (String)session.getAttribute(user);password = (String)session.getAttribute(password);out.println("<h2>欢迎您,"+user+"!</h2>");out.println("<h2>您的登录密码是:"+password+"!</h2>");}else if((user != null)&&(password != null)){//会话对象中保存数据session.setAttribute("user", user);session.setAttribute("isLogin", Boolean.TRUE);session.setAttribute("pass", password);out.println("<h2>欢迎您,"+user+"!</h2>");out.println("<h2>您的登录密码是:"+password+"!</h2>");}else{out.println("<h2>请在下面输入登录信息</h2>");out.println("<form method=\"post\"");out.println("<table>");out.println("<tr>");out.println("<td>用户名:</td>");out.println("<td><input name=\"user\" type=\"text\"></td>");out.println("</tr>");out.println("<td>密码:</td>");out.println("<td><input name=\"pass\" type=\"password\"></td>");out.println("</tr>");out.println("<tr>");out.println("<td></td");out.println("<td><input name=\"ok\" type=\"submit\" value=\"确定\">");out.println("<input name=\"cancel\" type=\"reset\" value=\"重置\"></td>");out.println("</tr>");out.println("</table>");out.println("</form>");}out.println("</body>");out.println("</html>");}}web.xml<?xml version="1.0"encoding="UTF-8"?><web-app xmlns:xsi="/2001/XMLSchema-instance"xmlns="/xml/ns/javaee"xmlns:web="/xml/ns/javaee/web-app_2_5.xsd"xsi:schemaLocation="/xml/ns/javaee/xml/ns/javaee/web-app_3_0.xsd"id="WebApp_ID"version="3.0"><display-name>ch</display-name><!-- ServerInfoServlet definition --><servlet><description></description><display-name>getSession</display-name><servlet-name>getSession</servlet-name><servlet-class>com.SessionServlet</servlet-class></servlet><!-- SessionServlet definition --><servlet-mapping><servlet-name>getSession</servlet-name><url-pattern>/getSession</url-pattern></servlet-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>2.CheckFormFilter.java Encoding.java CheckForm.jsp CheckFormOver.jsp web.xmlCheckFormFilter.javapackage com;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;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import jdk.nashorn.internal.ir.RuntimeNode.Request;public class CheckFormFilter implements Filter {protected FilterConfig config;@Overridepublic void destroy() {// TODO Auto-generated method stub}@Overridepublic void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {HttpServletRequest req = (HttpServletRequest)request;HttpServletResponse resp = (HttpServletResponse)response;String name = request.getParameter("name");String word = request.getParameter("word");word = word.replace("日你", "**");word = word.replace("狗日的", "***");word = word.replace("你妹", "**");word = word.replace("操你", "**");word = word.replace("你妈的", "***");req.setAttribute("word", word);chain.doFilter(request, response);}@Overridepublic void init(FilterConfig FilterConfig) throws ServletException { // TODO Auto-generated method stubthis.config = FilterConfig;}}Encoding.javapackage com;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;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class Encoding implements Filter {protected String encoding = null;protected FilterConfig config;@Overridepublic void destroy() {// TODO Auto-generated method stub}@Overridepublic void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {HttpServletRequest req = (HttpServletRequest)request;HttpServletResponse resp = (HttpServletResponse)response;request.setCharacterEncoding("UTF-8");response.setCharacterEncoding("UTF-8");chain.doFilter(request, response);}@Overridepublic void init(FilterConfig FilterConfig) throws ServletException {this.config = FilterConfig;this.encoding = FilterConfig.getInitParameter("Encoding");}protected String getEncoding(){return encoding;}}CheckForm.jsp<%@page language="java"contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN" "/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type"content="text/html; charset=UTF-8"> <title>过滤校验</title></head><body><center><h2>过滤校验:</h2><form method="post"action="CheckFormOver.jsp"><table><tr><td>用户名:</td><td><input name="name"type="text"></td></tr><tr><td>内容:</td><td><input name="word"type="text"></td></tr><tr><td></td><td><input name="submit"type="submit"value="提交"><input name="reset" type="reset"value="重置"></td></tr></table></form></center></body></html>CheckFormOver.jsp<%@page language="java"contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN""/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type"content="text/html; charset=UTF-8"><title>通过校验</title></head><body><center><h2>您提交的数据:</h2><form><table><tr><td>用户名:</td><td><input name="name"type="text"value=<%=request.getParameter("name") %>readonly="true"></td></tr><tr><td>内容:</td><td><input name="word"type="text"value=<%=request.getParameter("word") %>readonly="true"></td></tr></table></form><h2><font color="#FF0000">校验结果!</font></h2></center></body></html>web.xml<web-app xmlns:xsi="/2001/XMLSchema-instance"xmlns="/xml/ns/javaee"xmlns:web="/xml/ns/javaee/web-app_2_5.xsd"xsi:schemaLocation="/xml/ns/javaee/xml/ns/javaee/web-app_3_0.xsd"id="WebApp_ID" version="3.0"><display-name>ch2</display-name><filter><filter-name>EncodingFilter</filter-name><filter-class>com.EncodingFilter</filter-class></filter><filter><filter-name>CheckFormFilter</filter-name><filter-class>com.CheckFormFilter</filter-class></filter><filter-mapping><filter-name>EncodingFilter</filter-name><url-pattern>/CheckFormOver.jsp</url-pattern></filter-mapping><filter-mapping><filter-name>CheckFormFilter</filter-name><url-pattern>/CheckFormOver.jsp</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>3.LogoutServlet.java OnlineUserServlet.java User.java UserList.java Login.html web.xmlLogoutServlet.javapackage com;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import org.apache.catalina.connector.Response;public class LogoutServlet extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet{public LogoutServlet() {super();}public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{response.setContentType("text/html;charset = gb2312");HttpSession session = request.getSession();User user = (User)session.getAttribute("user");session.invalidate();PrintWriter out = response.getWriter();out.println("<html><head><title>退出登录</title></head><body>");out.println(user.getName()+",你已退出登录<br>");out.println("<a href = login.html>重新登录</a>");out.println("</body></html>");out.close();}}OnlineUserServlet.javapackage com;import java.io.*;import java.util.Enumeration;import javax.servlet.*;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;public class OnlineUserServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException {request.setCharacterEncoding("gb2312");String name = request.getParameter("user");String pwd = request.getParameter("password");if(null == name || null == pwd || name.equals("") || pwd.equals("")) {response.sendRedirect("login.html");}else{HttpSession session = request.getSession();User user = (User)session.getAttribute("user");if(null == user || !name.equals(user.getName())) {user = new User(name);session.setAttribute("user", user);}response.setContentType("text/html;charset = gb2312");PrintWriter out = response.getWriter();out.println("欢迎用户<b>"+name+"</b>登录");UserList ul = UserList.getInstance();out.println("<br>当前在线的用户列表:<br>");Enumeration<String> enums = ul.getUserList();int i = 0;while(enums.hasMoreElements()) {out.println(enums.nextElement());out.println("&nbsp;&nbsp;&nbsp;&nbsp;");if(++i == 10) {out.println("<br>");}}out.println("<br>当前在线的用户数:"+i);out.println("<p><a href = logout>退出登录</a>");out.close();}}public void doPost(HttpServletRequest request, HttpServletResponse response) throwsServletException,IOException {doGet(request, response);}}User.javapackage com;import javax.servlet.http.HttpSessionBindingEvent;import javax.servlet.http.HttpSessionBindingListener;public class User implements HttpSessionBindingListener {private String name;private UserList ul = UserList.getInstance();public User() { }public User(String name) { = name;}public void setName(String name) { = name;}public String getName() {return name;}@Overridepublic void valueBound(HttpSessionBindingEvent event) { ul.addUser(name);}@Overridepublic void valueUnbound(HttpSessionBindingEvent event) { ul.removeUser(name);}}UserList.javapackage com;import java.util.Enumeration;import java.util.Vector;public class UserList {private static final UserList userList = new UserList();private Vector<String> vector;private UserList(){vector=new Vector<String>();}public static UserList getInstance(){return userList;}public void addUser(String name) {if(name != null)vector.addElement(name);}public void removeUser(String name) {if(name != null)vector.remove(name);}public Enumeration<String> getUserList() {return vector.elements();}public int getUserCount() {return vector.size();}}Login.html<!DOCTYPE html PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN" "/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type"content="text/html; charset=UTF-8"> <title>用户登录</title></head><body><form action="success"method="post"><table><tr><td>用户名:</td><td><input type="text"name="user"></td></tr><tr><td>密码:</td><td><input type="password"name="password"></td> </tr><tr><td><input type="submit"value="登录"></td><td><input type="reset"value="重填"></td></tr></table></form></body></html>web.xml<?xml version="1.0"encoding="UTF-8"?><web-app xmlns:xsi="/2001/XMLSchema-instance" xmlns="/xml/ns/javaee"xmlns:web="/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="/xml/ns/javaee/xml/ns/javaee/web-app_3_0.xsd"id="WebApp_ID" version="3.0"><display-name>ch3</display-name><servlet><servlet-name>OnlineUserServlet</servlet-name><servlet-class>com.OnlineUserServlet</servlet-class></servlet><servlet-mapping><servlet-name>OnlineUserServlet</servlet-name><url-pattern>success</url-pattern></servlet-mapping><servlet><servlet-name>logout</servlet-name><servlet-class>com.LogoutServlet</servlet-class></servlet><servlet-mapping><servlet-name>logout</servlet-name><url-pattern>logout</url-pattern></servlet-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>六、本次实验的体会(结论):本次实验中,我通过查阅老师的课件和教材,加深了对Servlet、过滤器和监听器概念以及基本使用方法的理解。