我開始學習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