一、实验目的
理解和巩固课堂上所学的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>");
}
}