我开始学习struts 2.我有3个页面,FirstLevel.jsp,SecondLevel.jsp,BadGuess.jsp。我想在三个页面中应用过滤器。过滤url-pattern/*没有映射到所有jsp的
LevelFilter.java
package com.tutorialspoint.struts2;
import java.io.IOException;
import javax.servlet.*;
public class LevelFilter implements Filter{
@Override
public void destroy() {
System.out.println("desroy");
}
@Override
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
System.out.println("level filter");
chain.doFilter(req, res);
}
@Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
System.out.println("init here");
}
}
的web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<display-name>Struts 2</display-name>
<welcome-file-list>
<welcome-file>FirstLevel.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
<filter>
<filter-name>Level Filter</filter-name>
<filter-class>
com.tutorialspoint.struts2.LevelFilter
</filter-class>
</filter>
<filter>
<filter-name>Authentication Filter</filter-name>
<filter-class>
com.tutorialspoint.struts2.AuthenticationFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>Level Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>Authentication Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
三个JSP是刚刚由输入的东西。当我运行FirstLevel.jsp时,控制台堆栈中的消息(“LevelFilter”),但是当我提交表单时(如果正确,表单将提交给Secondlevel.jsp,否则提交到BadGuess.jsp),控制台不会生成信息。它也应该在控制台中产生一条消息,因为我将过滤器映射到所有jsps(/ *)。回复非常感谢。
编辑:
我觉得过滤器并不适用于JSP的通过struts.xml中映射?因为当我尝试直接运行BadGuess.jsp
时,控制台中的消息显示,意思是doFilter
应用于它。
struts.xml的
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.devMode" value="true" />
<package name="magicwords" extends="struts-default">
<action name="firstMagicWord"
class="com.tutorialspoint.struts2.LevelAction"
method="execute">
<result name="success">/SecondLevel.jsp</result>
<result name="error">/BadGuess.jsp</result>
</action>
</package>
</struts>
有什么想法?
您不应该直接在MVC应用程序中访问JSP。那些是你的观点,而不是你的控制者。 – 2012-07-25 14:26:57
“直接访问JSP”是什么意思?对不起,我只是一个支柱2新手。 – Jemp 2012-07-26 01:00:04
浏览器中的URL不应以.jsp结尾。这意味着您直接调用JSP并绕过Struts2框架。根据你的问题,这听起来像你这样做。 – 2012-07-26 13:41:42