用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字

柯侧耳倾听者    -  云代码空间

—— 翱翔在Java世界的海洋之上

JSP内置对象二

2017-12-07|917阅||

摘要:一、实验目的 学习编写和配置过滤器。 学习使用context、application对象。   二、预习内容及要求(要求写出预习内容)

一、实验目的

学习编写和配置过滤器。

学习使用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这门课程。

顶 0踩 0收藏
文章评论
    发表评论

    个人资料

    • 昵称: 柯侧耳倾听者
    • 等级: 初级设计师
    • 积分: 2220
    • 代码: 64 个
    • 文章: 64 篇
    • 随想: 5 条
    • 访问: 43 次
    • 关注

    标签

    最新提问

      站长推荐