柯侧耳倾听者 - 云代码空间
—— 翱翔在Java世界的海洋之上
一、实验目的 学习编写和配置过滤器。 学习使用context、application对象。
二、预习内容及要求(要求写出预习内容) 利用Filter实现一个网页计数器。本次实验需要编写1个JSP文件:index.jsp,和一个Filter:CountFilter.java。 要求实现功能: 利用浏览器请求index.jsp,页面显示效果如下。点击刷新按钮,访客数字会相应增长。
三、实验内容、操作过程及实验结果记录 1.编写Filter代码 用户自定义的Filter是一个类。这个类实现Filter接口。 Filter接口的定义:javax.servlet.Filter public abstract interface javax.servlet.Filter { public abstract void init(javax.servlet.FilterConfig arg0) throws javax.servlet.ServletException; public abstract void doFilter(javax.servlet.ServletRequest arg0, javax.servlet.ServletResponse arg1, javax.servlet.FilterChain arg2) throws java.io.IOException, javax.servlet.ServletException; public abstract void destroy(); } 本次实验需要覆盖init()和doFilter()方法。 在init()方法中,从初始化参数中取出计数变量的初值。 代码提示:String *1* = filterConfig.getInitParameter("变量名"); 将取出的String类型的初值转换为int型变量,用于计算 代码提示:int *2* = *1*.parseInt();
在doFilter方法中。需要将*2*变量值加一(记为*3*),将*3*写入servletContext 代码提示: 1、 为了获得servletContext,首先将doFilter()方法中的第一个参数arg0转换为HttpServletRequest. HttpServletRequest request = (HttpServletRequest)arg0 2、 通过request获得session,并通过session获得servletContext ServletContext * = request.getSession().getServletContext(); 3、 把*3*变量作为属性写入servletContext. servletContext.setAttribute(“属性名”,“属性变量”); 4、 执行doFilter()方法 arg2.doFilter(ServletRequest req,ServletResponse resp);
编写web.xml部署描述文件。文件的大致结构
<filter> <description>This is the description of my J2EE component</description> <display-name>This is the display name of my J2EE component</display-name> <filter-name>过滤器的名字</filter-name> <filter-class>过滤器类的名字(包名+类名)</filter-class> <init-param> <param-name>初始化参数名</param-name> <param-value>初始化参数的值</param-value> </init-param> </filter>
<filter-mapping> <filter-name>过滤器的名字</filter-name> <url-pattern>被过滤对象的url格式</url-pattern> </filter-mapping>
2.编写JSP代码 编写一个index.jsp文件,输出效果如下图:访客数量利用application对象从servletContext中取出属性得到。 代码提示:application.getParameter(“属性名”);
3.部署项目并运行JSP 部署: 写一个与你的项目同名的xml文件。 文件内容: <Context path="/项目名" reloadable="false" docBase="项目存放路径\WebContent"> </Context>
启动Tomcat服务器 通过开始菜单>>“apache tomcat”>>“monitor tomcat”。可以在任务栏右下角看到这个图标,,右键单击这个图标,选择“start service”,可启动Tomcat服务器,服务器启动后,图标变为。 查看运行结果 打开浏览器,在地址栏中输入相应的地址,可以看到我们编写的jsp文件在浏览器页面上的展示效果。 请求地址:http://localhost:8080 / 目录名 / jsp文件名
程序代码: LogFilter.Java import javax.servlet.*; import javax.servlet.annotation.WebFilter; import javax.servlet.http.*; import java.io.*;
@WebFilter(filterName="log",urlPatterns={"/*"}) public class LogFilter implements Filter { private FilterConfig config; int intvalue=0; public void init(FilterConfig config) { this.config=config; } public void destroy() { this.config=null; } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest)request; ServletContext context=req.getSession().getServletContext(); context.setAttribute("count",++intvalue); } }
LogFilter.Java.bak
import javax.servlet.*; import javax.servlet.http.*; import java.io.*;
@WebFilter(filterName="log",urlPatterns={"/*"}) public class LogFilter implements Filter { private FilterConfig config; public void init(FilterConfig config) { this.config=config; } public void destroy() { this.config=null; } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { ServletContext context=this.config.getServletContext(); long before=System.currentTimeMillis(); System.out.println("开始过滤..."); HttpServletRequest hrequest=(HttpServletRequest)request; chain.doFilter(request,response); long after=System.currentTimeMillis(); System.out.println("过滤结束"); System.out.println("请求被定位到"+hrequest.getRequestURI()+"所花的时间为:"+(after-before)); } }
四、实验过程中所遇问题思考与讨论(可写个人体会,或相关理论知识,根据个人具体情况选做) 通过这次的学习与实验,我进一步掌握了JavaWeb中有关JSP内置对象的一些方法,也更加了解了JavaWeb中内置对象的概念,为今后更好的学习JavaWeb做好铺垫,在学习的过程中,我更加深刻的体会到与老师和同学间的交流与合作是多么的重要,所以在今后的学习与实验当中,我们要善于发现问题,更要及时与老师反馈问题所在,并与老师和同学交流学习经验,共同解决问题,这样才能更好的学好JavaWeb这门课程。
|