实验八过滤器与监听器--web

一、实验目的
理解和巩固课堂上所学的Filter的基本结构、注册、映射、部署方式,掌握涉及的Servet Filter技术的开发与使用方法,提高学生对知识的实际运用与软件编程实现能力。
二、实验内容
设计一个Filter验证程序,通过使用Servlet filter,实现filter信息输出。通过该实验,掌握servlet Filter的注册、映射、部署过程。具体步骤如下:1. 编写1个jsp页面index.jsp,内容自己定义。2. 设计一个类名为filter的TestFilter,用于实现filter信息输出,输出信息内容自定。3. 在Web.xml中部署TestFilter。4. 部署TestFilter应用程序到Web服务器中。5. 测试应用程序运行结果是否正确。
三、
实验要求1. 文件名字不要使用中文,文件名字首字母小写。2. 第一个文件命名为为index.jsp。3. 所有文件打成一个文件压缩包提交。压缩包文件命名规则:计181-01-姓名。4.在程序中的title或者注释等地方加入个人名字信息。5.提交程序运行成功结果截图,可以截多张图。

//index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head> 
    <title>xxx-index</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <script language="Javascript">
    function checkvalid()
    {
    
    
      var a=form1.name.value;
      var b=form1.password.value;
      if(a.length==0)
      {
    
    
        alert("姓名输入不能为空");
        form1.name.focus();
        return false;
      }
      if(b.length==0)
      {
    
    
        alert("学号输入不能为空");
        form1.xuehao.focus();
        return false;
      }
      else return true;
    }
    </script>
  </head>
  <body>
    <form name="form1" action="/zuoyes/test" method="post" >
       姓名(必填):<input type="text" name="name"/><br>
       学号(必填):<input type="text" name="xuehao"/><br>
       性别(非必填)<br><input type="radio" name="sex" value="男" checked="${info.sex=='男'?'checked':''}"/><br>
          <input type="radio" name="sex" value="女" checked="${info.sex=='女'?'checked':''}"/><br>
        爱好(非必填)<br><input type="checkbox" name="HOBBY" value="篮球"/>篮球<br>
          <input type="checkbox" name="HOBBY" value="游泳"/>游泳<br>
          <input type="checkbox" name="HOBBY" value="爬山"/>爬山<br>
       所在地(非必填)<br><select name=City>
             <option value="北京">北京</option>
             <option value="上海">上海</option>
             <option value="深圳">深圳</option>
           </select><br>
       目标(非必填)<textarea rows="10" cols="30" name="idea"></textarea>
    <input type="submit" name="submit" value="提交" onClick="checkvalid()"/>
    <input type="reset" value="重置"/>
    </form>
  </body>
</html>

//web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   
 http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<filer>
     <filter-name>filter</filter-name>
     <filter-class>filter.TestFilter</filter-class>
</filter>
<filter-mapping>
     <filter-name>filter</filter-name>
     <url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>/zuoye8</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>

//Success.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>    
    <title>登陆成功</title>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <h1>欢迎,登陆成功!</h1> <br>
    <a href="index.jsp">返回登陆页面</a><br>
    <a href="Fail.jsp">访问其他页面</a>
  </body>
</html>

//Fail.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>    
    <title>登陆失败</title>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
     抱歉,登陆失败! <br>
<a href="index.jsp">返回登陆页面</a>
  </body>
</html>

//test.java(src下建包filter,filer包里边建TestFilter.java文件)

package filter;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.PrintWriter;
public class TestFilter implements Filter {
    
    
 /*
  *初始化
  */
 public void init(FilterConfig config) throws ServletException {
    
    
    }
    public void destroy() {
    
    
    }
    /*
     * 拦截方法
     */
    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
    
    
       /*
       *放行前
       * 判断是否有session
       * 有,放行
       * 没有,拦截,即不让调用chain.doFilter(req, resp);这条语句
        */
     HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) resp;
        response.setContentType("text/html;charset=utf-8");
  PrintWriter out=response.getWriter();
  out.print("执行过滤器<br>");
  //准备放行的url
  String urls="/index.jsp,/Fail.jsp,/Success.jsp";
  //获取请求的url
  String requestURL = request.getRequestURI().toString();
  String url = requestURL.substring(requestURL.lastIndexOf("/"));
  if(urls.indexOf(url)==-1)
  {
    
    //若不在准备放行的url范围内
   HttpSession session = request.getSession();
   String name = (String)session.getAttribute("name");
   String xuehao = (String)session.getAttribute("xuehao");
  if("zhangsan".equals(name)&&"123456".equals(xuehao))
  {
    
    
   out.print("登陆成功!");
   response.setHeader("refresh","1,url=/zuoyes/zuoye8/Success.jsp");
   
  }
  else
  {
    
    
   out.print("登陆失败!");
   response.setHeader("refresh","1,url=/zuoyes/zuoye8/Fail.jsp");
  }
  chain.doFilter(req, resp);
     
    }
  chain.doFilter(req, resp);
  out.print("过滤器执行结束<br>");
  }
}

Guess you like

Origin blog.csdn.net/weixin_45800653/article/details/107956338