显示JSP之前执行servlet(过滤器)

原创 2013年12月04日 10:02:04

今天打算模拟一个JSTL表达式出现的一个问题,结果想实现一种效果——先执行servlet之后再跳转到JSP页面

 

下面我简单介绍一下我实现的方式,使用的是——过滤器

过滤器:是可插入的web组件,拦截请求和响应,可以对请求和响应进行过滤(是在中间件中的东西tomcat\weblogic)

 

1、在web.xml中添加如下配置信息

 <!-- 测试过滤器的使用方式  -->
  <filter>
  	<filter-name>filterTest</filter-name>
  	<filter-class>hb.servlet.filter.MyFilter</filter-class>
  </filter>
  <filter-mapping>
  	<filter-name>filterTest</filter-name>
  	<!-- 下面这个url一定要配置正确,因为在系统启动的时候会执行init()方法 -->
  	<url-pattern>/filter/filter.do</url-pattern>
  </filter-mapping>

 

2、编写一个类继承Filter 接口,实现过滤器的功能

package hb.servlet.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

import org.apache.log4j.Logger;

public class MyFilter implements Filter {

	private static Logger log = Logger.getLogger(MyFilter.class);
	
	public void destroy() {
		log.info("destroy filter");
	}

	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain filter) throws IOException, ServletException {
		log.info("doFilter filter");
		request.setAttribute("abc", "huangbiao");
		RequestDispatcher rd = request.getRequestDispatcher("/filter/filterTest.jsp");
		rd.forward(request, response);
	}

	public void init(FilterConfig filterConfig) throws ServletException {
		log.info("init filter");
	}

}

 

3、在URL地址栏中输入http://localhost:8080/dbpool/filter/filter.do

每次输入上面的地址都会执行doFilter()方法里的内容

 

在JSP页面中使用EL表达式将内容显示出来

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'filterTest.jsp' starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
  
  <body>
	filterTest.jsp<br>
	<%=request.getAttribute("abc") %><p>
	
	<textarea name="textarea" style="width:100%; height:125px;" id="textarea" readonly="readonly">
		<c:choose>
			<c:when test="${abc != null}"><%=request.getAttribute("abc") %></c:when>
			<c:otherwise></c:otherwise>
		</c:choose>
	</textarea>
	<br>
	
	<div><textarea name="textarea2" style="width:100%; height:125px;" id="textarea2" readonly="readonly"><c:choose><c:when test="${abc != null}"><%=request.getAttribute("abc") %></c:when><c:otherwise></c:otherwise></c:choose></textarea></div>
	
  </body>
</html>

会发现一种很奇怪的现象,两种textarea标签里面的内容不一样

 

因此,在使用JSTL逻辑控件的时候,尽量不要换行,不然会出现一些意想不到的效果

 

显示JSP之前执行servlet(过滤器)

今天打算模拟一个JSTL表达式出现的一个问题,结果想实现一种效果——先执行servlet之后再跳转到JSP页面   下面我简单介绍一下我实现的方式,使用的是——过滤器 过滤器:是可插入的web组...
  • hbiao68
  • hbiao68
  • 2013年12月04日 10:02
  • 368

Filter 过滤器详解

1、简介   Filter也称之为过滤器,它是Servlet技术中最实用的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文...
  • huan7622523822
  • huan7622523822
  • 2014年09月18日 11:56
  • 610

servlet和jsp页面过滤器Filter详解

servlet API中最重要的一个功能就是能够为servlet和JSP页面定义过滤器。过滤器提供了某些早期服务器所支持的非标准“servlet链接”的一种功能强大且标准的替代品。         ...
  • happyAliceYu
  • happyAliceYu
  • 2016年08月30日 09:00
  • 4682

servlet+jsp实现过滤器 防止用户未登录访问

我们可能经常会用到这一功能,比如有时,我们不希望用户没有进行登录访问后台的操作页面,而且这样的非法访问会让系统极为的不安全,所以我们常常需要进行登录才授权访问其它页面,否则只会出现登录页面,当然我的思...
  • xiaoshuji
  • xiaoshuji
  • 2016年01月29日 13:33
  • 961

Java Web过滤器

过滤器只是服务器端的组件,它可以截取客户端的请求和响应信息过滤器的生命周期: 实例化:在web容器启动时,通过web.xml进行配置,然后就会加载过滤器,实例化只进行一次。 初始化:过滤器...
  • sinat_35670989
  • sinat_35670989
  • 2017年03月15日 11:48
  • 176

jsp中文乱码问题解决方法

1.调用JSP页面显示乱码通过浏览器调用JSP页面,在客户端浏览器中所有的中文内容出现乱码。solution:首先确认本JSP在编辑器中保存时,使用的是GBK的编码格式,然后在JSP页面的开始部分添加...
  • hupingemail
  • hupingemail
  • 2009年11月12日 11:58
  • 140

servlet+jsp实现过滤器,防止用户未登录访问

我们可能经常会用到这一功能,比如有时,我们不希望用户没有进行登录访问后台的操作页面,而且这样的非法访问会让系统极为的不安全,所以我们常常需要进行登录才授权访问其它页面,否则只会出现登录页面,当然我的思...
  • lsx991947534
  • lsx991947534
  • 2015年05月05日 10:20
  • 6637

怎么在一个JSP页面打开时就加载servlet

一、用jquery的ajax异步加载。 二、用struts的action标签,页面一加载就执行一个action, 不过用servlet就没用了。 三、java urlReWrite实现网站URL重写,...
  • zzqworkspace
  • zzqworkspace
  • 2016年11月22日 16:36
  • 1560

servlet和JSP过滤器Filter

servlet和JSP过滤器Filter或许,servlet API的2.3版本中最重要的一个新功能就是能够为servlet和JSP页面定义过滤器。过滤器提供了某些早期服务器所支持的非标准servle...
  • gxf212
  • gxf212
  • 2006年07月04日 21:48
  • 793

Filter 过滤器的执行顺序与实例

Filter介绍  Filter可认为是Servlet的一种“变种”,它主要用于对用户请求进行预处理,也可以对HttpServletResponse进行后处理,是个典型的处理链。它与Servlet的...
  • Ivan_mo
  • Ivan_mo
  • 2013年05月31日 16:39
  • 3421
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:显示JSP之前执行servlet(过滤器)
举报原因:
原因补充:

(最多只允许输入30个字)