电机javaweb实验六 Servlet实验二bx1312韩锟45.docx
《电机javaweb实验六 Servlet实验二bx1312韩锟45.docx》由会员分享,可在线阅读,更多相关《电机javaweb实验六 Servlet实验二bx1312韩锟45.docx(12页珍藏版)》请在冰豆网上搜索。
电机javaweb实验六Servlet实验二bx1312韩锟45
实验六Servlet实验
(二)
一、实验目的
学习编写和配置过滤器。
学习使用context、application对象。
二、实验要求
利用Filter实现一个网页计数器。
本次实验需要编写1个JSP文件:
index.jsp,和一个Filter:
CountFilter.java。
要求实现功能:
利用浏览器请求index.jsp,页面显示效果如下。
点击刷新按钮,访客数字会相应增长。
三、实验步骤
1.编写Filter代码
用户自定义的Filter是一个类。
这个类实现Filter接口。
Filter接口的定义:
javax.servlet.Filter
publicabstractinterfacejavax.servlet.Filter{
publicabstractvoidinit(javax.servlet.FilterConfigarg0)throwsjavax.servlet.ServletException;
publicabstractvoiddoFilter(javax.servlet.ServletRequestarg0,javax.servlet.ServletResponsearg1,javax.servlet.FilterChainarg2)
throwsjava.io.IOException,javax.servlet.ServletException;
publicabstractvoiddestroy();
}
本次实验需要覆盖init()和doFilter()方法。
在init()方法中,从初始化参数中取出计数变量的初值。
代码提示:
String*1*=filterConfig.getInitParameter("变量名");
将取出的String类型的初值转换为int型变量,用于计算
代码提示:
int*2*=*1*.parseInt();
在doFilter方法中。
需要将*2*变量值加一(记为*3*),将*3*写入servletContext
代码提示:
1、为了获得servletContext,首先将doFilter()方法中的第一个参数arg0转换为HttpServletRequest.
HttpServletRequestrequest=(HttpServletRequest)arg0
2、通过request获得session,并通过session获得servletContext
ServletContext*=request.getSession().getServletContext();
3、把*3*变量作为属性写入servletContext.
servletContext.setAttribute(“属性名”,“属性变量”);
4、执行doFilter()方法
arg2.doFilter(ServletRequestreq,ServletResponseresp);
编写web.xml部署描述文件。
文件的大致结构
ThisisthedescriptionofmyJ2EEcomponent
ThisisthedisplaynameofmyJ2EEcomponent
过滤器的名字
过滤器类的名字(包名+类名)
初始化参数名
初始化参数的值
过滤器的名字
被过滤对象的url格式
2.编写JSP代码
编写一个index.jsp文件,输出效果如下图:
访客数量利用application对象从servletContext中取出属性得到。
代码提示:
application.getParameter(“属性名”);
3.部署项目并运行JSP
部署:
Eclipse中设置的输出根目录,根据具体设置更改
写一个与你的项目同名的xml文件。
文件内容:
docBase="项目存放路径\WebContent">
启动Tomcat服务器
通过开始菜单>>“apachetomcat”>>“monitortomcat”。
可以在任务栏右下角看到这个图标,
,右键单击这个图标,选择“startservice”,可启动Tomcat服务器,服务器启动后,图标变为
。
查看运行结果
打开浏览器,在地址栏中输入相应的地址,可以看到我们编写的jsp文件在浏览器页面上的展示效果。
请求地址:
http:
//localhost:
8080/目录名/jsp文件名
四、实验报告要求
1.
2.
3.
4.
代码
Home.jsp:
<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%>
<%
Stringpath=request.getContextPath();
StringbasePath=request.getScheme()+":
//"+request.getServerName()+":
"+request.getServerPort()+path+"/";
%>
DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">
">
MyJSP'home.jsp'startingpage
--
-->
ThisismyJSPpage.
您好:
您是本站的第<%=application.getAttribute("count")%>位访客!
Web.xml:
xmlversion="1.0"encoding="UTF-8"?
>
xmlns="
xmlns:
xsi="http:
//www.w3.org/2001/XMLSchema-instance"
xsi:
schemaLocation="
index.jsp
CountFilter
com.test.filter.CountFilter
count
0
CountFilter
/*
454.xml:
xmlversion="1.0"encoding="UTF-8"?
>
\tomcat\webapps\454">
CounterFilter.java:
packagecom.test.filter;
importjava.io.IOException;
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;
publicclassCountFilterimplementsFilter{
privateintcount;
publicvoidinit(FilterConfigarg0)throwsServletException{
Stringparam=arg0.getInitParameter("count");
count=Integer.valueOf(param);
}
publicvoiddoFilter(ServletRequestarg0,ServletResponsearg1,FilterChainarg2)throwsIOException,ServletException{
count++;
HttpServletRequestreq=(HttpServletRequest)arg0;
ServletContextcontext=req.getSession().getServletContext();
context.setAttribute("count",count);
arg2.doFilter(arg0,arg1);
}
publicvoiddestroy(){
}