9实验九 过滤器编程实验.docx

上传人:b****4 文档编号:13902477 上传时间:2023-06-19 格式:DOCX 页数:17 大小:222.27KB
下载 相关 举报
9实验九 过滤器编程实验.docx_第1页
第1页 / 共17页
9实验九 过滤器编程实验.docx_第2页
第2页 / 共17页
9实验九 过滤器编程实验.docx_第3页
第3页 / 共17页
9实验九 过滤器编程实验.docx_第4页
第4页 / 共17页
9实验九 过滤器编程实验.docx_第5页
第5页 / 共17页
9实验九 过滤器编程实验.docx_第6页
第6页 / 共17页
9实验九 过滤器编程实验.docx_第7页
第7页 / 共17页
9实验九 过滤器编程实验.docx_第8页
第8页 / 共17页
9实验九 过滤器编程实验.docx_第9页
第9页 / 共17页
9实验九 过滤器编程实验.docx_第10页
第10页 / 共17页
9实验九 过滤器编程实验.docx_第11页
第11页 / 共17页
9实验九 过滤器编程实验.docx_第12页
第12页 / 共17页
9实验九 过滤器编程实验.docx_第13页
第13页 / 共17页
9实验九 过滤器编程实验.docx_第14页
第14页 / 共17页
9实验九 过滤器编程实验.docx_第15页
第15页 / 共17页
9实验九 过滤器编程实验.docx_第16页
第16页 / 共17页
9实验九 过滤器编程实验.docx_第17页
第17页 / 共17页
亲,该文档总共17页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

9实验九 过滤器编程实验.docx

《9实验九 过滤器编程实验.docx》由会员分享,可在线阅读,更多相关《9实验九 过滤器编程实验.docx(17页珍藏版)》请在冰点文库上搜索。

9实验九 过滤器编程实验.docx

9实验九过滤器编程实验

实验九过滤器编程实验

实验目的

掌握过滤器的主要功能

掌握过滤器的编程方法

掌握过滤器的配置方法

实验内容

1、在前面实验的基础上体验过滤器功能的使用。

编写一个过滤器,用于监测用户输入的帐号和密码是否正确,如果正确则进入系统,否则重定向到登录页面。

在前面实验的基础上进行修改,登录密码验证使用过滤器实现。

2、过滤器链的使用。

在上面过滤器实现登录信息验证的基础上添加一个过滤器实现对JSP页面的过滤,将公共的Foot信息(版权、单位信息)插入到每个JSP页面中,避免每个页面重复嵌入Foot代码。

实验操作步骤

1、操作步骤

(1)新建一个WebProject,工程名为ExperiNineFilter,在WebRoot下新建一个login.jsp文件,是图书管理系统的学生或管理员的登录界面。

login.jsp中标签部分的代码如下:


用户登录


 账号:

 密码:

管理员

学生


  

 

(2)将工程发布测试,输入地址http:

//localhost:

8080/ExperiNineFilter/login.jsp,可以看到如图1所示的界面。

图1登录界面

(3)下面将根据选择的是管理员还是学生,分别打开数据库bookmgs中的数据库表admin或student_info,只要界面上输入的用户账号和密码同数据库中的一致,则允许用户跳转到图书管理系统的主界面。

假设主界面只显示“欢迎您:

×××”的信息。

连接数据库进行验证的处理不在Servlet中处理,而是由过滤器处理。

将前面连接数据库处理等操作在过滤器中进行处理。

在src目录下新建一个过滤器类LoginCheckFilter,重写doFilter(),init()和destroy()方法。

过滤器类的代码如下:

packagecs.javaee;

importjava.io.IOException;

importjava.sql.Connection;

importjava.sql.DriverManager;

importjava.sql.ResultSet;

importjava.sql.SQLException;

importjava.sql.Statement;

importjavax.servlet.Filter;

importjavax.servlet.FilterChain;

importjavax.servlet.FilterConfig;

importjavax.servlet.ServletContext;

importjavax.servlet.ServletException;

importjavax.servlet.ServletRequest;

importjavax.servlet.ServletResponse;

importjavax.servlet.http.HttpServletRequest;

importjavax.servlet.http.HttpServletResponse;

importjavax.servlet.http.HttpSession;

publicclassLoginCheckFilterimplementsFilter{

Connectioncn=null;

privateStringwebroot=null;

publicvoiddestroy(){

try{

if(cn!

=null&&(!

cn.isClosed())){

cn.close();

cn=null;

}

}catch(Exceptione){

System.out.println("DestroyError:

"+e.getMessage());

}

}

publicvoiddoFilter(ServletRequestarg0,ServletResponsearg1,

FilterChainarg2)throwsIOException,ServletException{

//根据页面上选择的是管理员还是学生来选择不同的数据库表进行读取验证

HttpServletRequestrequest=(HttpServletRequest)arg0;

HttpServletResponseresponse=(HttpServletResponse)arg1;

HttpSessionsession=request.getSession(false);

Stringuri=request.getRequestURI();

StringuserID=null;

Stringpassword=null;

StringdbUserID=null;//读取数据库表中的账号

StringdbPwd=null;//读取数据库表中的密码

StringsqlStr="";//命令字符串

Statementst=null;

ResultSetrs=null;

userID=request.getParameter("name");

password=request.getParameter("pwd");

StringselectRole=request.getParameter("chkRole");

System.out.println("selectedRole:

"+selectRole);

//根据选择的是管理员还是学生来选择到不同的数据库中去查找

try{

st=cn.createStatement();

System.out.println("数据库连接成功...");

}catch(SQLExceptione1){

//TODOAuto-generatedcatchblock

System.out.println("数据库连接失败!

");

e1.printStackTrace();

}

if(selectRole.equals("admin")==true){//查找管理员的数据库表

sqlStr="select*fromadmin";

try{

rs=st.executeQuery(sqlStr);

if(rs.next()){

dbUserID=rs.getString("admin_id").toString();

System.out.println("dbUser"+dbUserID);

dbPwd=rs.getString("admin_pwd");

request.setAttribute("userID",userID);

}

if(userID.equals(dbUserID)==true

&&password.equals(dbPwd)==true){//账号和密码正确,通过

arg2.doFilter(arg0,arg1);

//return;

}else{

System.out.println("账号或密码有误!

");

response.sendRedirect("login.jsp");//账号和密码不对,重新回到登录界面

return;

}

rs.close();

st.close();

}catch(SQLExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}

}elseif(selectRole.equals("student")==true){//查找学生的数据库表

sqlStr="select*fromstudent_info";

try{

rs=st.executeQuery(sqlStr);

if(rs.next()){

dbUserID=rs.getString("stu_id");

dbPwd=rs.getString("stu_pwd");

request.setAttribute("userID",userID);

}

if(userID.equals(dbUserID)==true

&&password.equals(dbPwd)==true){//账号和密码正确,通过

arg2.doFilter(arg0,arg1);

}else{

System.out.println("账号或密码有误!

");

response.sendRedirect("login.jsp");//账号和密码不对,重新回到登录界面

return;

}

rs.close();

st.close();

}catch(SQLExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}

}

}

publicvoidinit(FilterConfigarg0)throwsServletException{

ServletContextctx=arg0.getServletContext();

webroot=ctx.getContextPath();

Stringdriver=arg0.getInitParameter("driver");

Stringurl=arg0.getInitParameter("url");

Stringuser=arg0.getInitParameter("user");

Stringpassword=arg0.getInitParameter("password");

try{

Class.forName(driver);

cn=DriverManager.getConnection(url,user,password);

System.out.println("connectiondatabase...");

}catch(Exceptione){

System.out.println("初始化错误:

"+e.getMessage());

}

}

}

(4)配置过滤器,此过滤器只过滤登录处理LoginServlet,配置过滤器的web.xml文件的配置如下:

xmlversion="1.0"encoding="UTF-8"?

>

xmlns:

xsi="http:

//www.w3.org/2001/XMLSchema-instance"

xsi:

schemaLocation="

LoginFilter

cs.javaee.LoginCheckFilter

driver

com.mysql.jdbc.Driver

url

jdbc:

mysql:

//localhost:

3306/bookmgs

user

root

password

vip

LoginFilter

/LoginAction

ThisisthedescriptionofmyJ2EEcomponent

ThisisthedisplaynameofmyJ2EEcomponent

LoginServlet

cs.javaee.LoginServlet

LoginServlet

/LoginAction

index.jsp

BASIC

(5)在src目录下新建一个HttpServlet类LoginServlet,其主要工作是如果过滤器中得到输入的账号和密码一致,在LoginServlet中,直接显示欢迎用户的信息。

LoginServlet的配置在上面的web.xml文件中已经配置。

LoginServet中的doPost()方法的代码如下:

publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)

throwsServletException,IOException{

System.out.println("通过验证,然后转到主页面");

response.setContentType("text/html");

response.setCharacterEncoding("gbk");

PrintWriterout=response.getWriter();

StringuserID=(String)request.getAttribute("userID");

out.println("

DOCTYPEHTMLPUBLIC\"-//W3C//DTDHTML4.01Transitional//EN\">");

out.println("");

out.println("图书管理系统主页");

out.println("");

out.println("

");

out.println("

图书管理系统



");

out.println("欢迎您:

");

out.println(userID);

out.println("");

out.println("");

out.flush();

out.close();

}

(6)再次测试,选择管理员用户,如图2所示,如果账号和密码不正确,重新回到登录页面,如果账号和密码正确,则转到图书管理系统的主页面,如图3所示。

图2登录用户输入信息

图3主页面

2、操作步骤

(1)一般网页底部版权等信息的添加可以采用页面组合的方式,此处使用过滤器直接添加,主要是体验过滤器链的使用。

在cs.javaee包下新建一个响应体数据包装类FootResponseWrapper,重写其中的getWriter()方法和toString()方法。

FootResponseWrapper类的代码如下:

packagecs.javaee;

importjava.io.CharArrayWriter;

importjava.io.IOException;

importjava.io.PrintWriter;

importjavax.servlet.http.HttpServletResponse;

importjavax.servlet.http.HttpServletResponseWrapper;

publicclassFootResponseWrapperextendsHttpServletResponseWrapper{

privateCharArrayWriterbuffer=null;

publicFootResponseWrapper(HttpServletResponseresponse){

super(response);

buffer=newCharArrayWriter();

}

@Override

publicPrintWritergetWriter()throwsIOException{

returnnewPrintWriter(buffer);

}

@Override

publicStringtoString(){

//TODOAuto-generatedmethodstub

returnbuffer.toString();

}

}

(2)定义一个过滤器类FootFilter,用于对响应的页面添加底部文本信息,FootFilter类的代码如下:

packagecs.javaee;

importjava.io.CharArrayWriter;

importjava.io.IOException;

importjava.io.PrintWriter;

importjavax.servlet.Filter;

importjavax.servlet.FilterChain;

importjavax.servlet.FilterConfig;

importjavax.servlet.ServletException;

importjavax.servlet.ServletRequest;

importjavax.servlet.ServletResponse;

importjavax.servlet.http.HttpServletResponse;

publicclassFootFilterimplementsFilter{

privateStringfooter=null;

publicvoiddestroy(){

//TODOAuto-generatedmethodstub

}

publicvoiddoFilter(ServletRequestarg0,ServletResponsearg1,

FilterChainarg2)throwsIOException,ServletException{

//响应对象封装

FootResponseWrapperwrapper=newFootResponseWrapper((HttpServletResponse)arg1);

System.out.println("wrapper...."+wrapper.toString()+"!

");

//调用链中下一个对象

arg2.doFilter(arg0,wrapper);

//响应数据修改处理,这些处理操作要放在doFilter()方法之后

CharArrayWriteroutbuffer=newCharArrayWriter();

System.out.println("outbuffer:

"+outbuffer.toString());

Stringo

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2