我在jsp中製作了一個帶有登錄和一些受限制頁面的開始頁面的小型web應用程序,其中包含一些使用過濾器和servlet控制的頁面。我開始製作它是因爲我想學習如何使用過濾器和servlet,並認爲我已經很好地完成了。
一切工作正常,當我只是確保一切都發生在'根'url-模式,但問題是我想受限制的頁面在它自己的url-pattern目錄中...回到url-pattern(從jsp頁面調用servlet)
在我的受限制頁面我已經包括(< @包括...>),其中包含此形式的註銷頁面:
<form method=POST action=LC>
<table align="right">
<tr>
<td>Navn:</td>
<td><b><%=login.getName() %></b></td>
</tr>
<tr>
<td>Aktør:</td>
<td><b><%= login.getAktoer() %></b></td>
</tr>
<tr>
<td><input type="submit" value="Log ud"></td>
</tr>
<tr>
<td></td>
<td><b><%= login.getMeddelelse() %></b></td>
</tr>
</table>
</form>
此頁面上的提交將發送給用戶剛清除一個LoginBean一個控制小服務程序,設置一個布爾isLoggedin在同一個bean上將值設置爲false,最後將用戶「sendRedirect」發送到我的起始頁面。當所有頁面都位於'根'url-pattern目錄中時,這很有效。
我的一個受限制頁面是Yellow.jsp。因爲它是現在,它只是有下列servlet映射:
<servlet>
<servlet-name>ptYellow</servlet-name>
<jsp-file>/Yellow.jsp</jsp-file>
</servlet>
<servlet-mapping>
<servlet-name>ptYellow</servlet-name>
<url-pattern>/Yellow.jsp</url-pattern>
</servlet-mapping>
什麼,我想這是是這樣的:
<servlet-mapping>
<servlet-name>ptYellow</servlet-name>
<url-pattern>/RestrictedPages/YellowZone/Yellow.jsp</url-pattern>
</servlet-mapping>
但是,當我嘗試映射像這樣,我試圖從註銷Yellow.jsp頁面,它只是吐出一個404錯誤,因爲它試圖訪問'/ RestrictedPages/YellowZone /'目錄中的我的註銷控制servlet。
它試圖訪問:
的http://本地主機:8080/MyApp的/ RestrictedPages/YellowZone/LC
(LC是我退出控制小服務程序)
當它應該只是去:
HTTP://localhost:8080/myapp/LC
我想在不同的url-patterns中將我的註銷包含在許多不同的受限制頁面中,所以它不應映射到相同的url-pattern(似乎並不能解決問題反正)。
我絕對不想在所有受限制的頁面上對註銷表單進行硬編碼,當我知道它應該可以'包括'它時...
我在猜我必須寫些特別的東西在我的註銷表單action屬性中,但無法弄清楚要寫什麼。我曾嘗試這樣的東西:
行動= */LC
和
行動=/../LC
從最不相關的代碼剝離,我的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_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<welcome-file-list>
<welcome-file>StartSide.jsp</welcome-file>
</welcome-file-list>
<error-page>
<error-code>404</error-code>
<location>/404.jsp</location>
</error-page>
<filter>
<filter-name>LoginFilter</filter-name>
<filter-class>control.LoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>LoginFilter</filter-name>
<servlet-name>AC</servlet-name>
</filter-mapping>
<filter>
<filter-name>YellowFilter</filter-name>
<filter-class>control.YellowFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>YellowFilter</filter-name>
<url-pattern>/RestrictedPages/YellowZone/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>ptYellow</servlet-name>
<jsp-file>/Yellow.jsp</jsp-file>
</servlet>
<servlet-mapping>
<servlet-name>ptYellow</servlet-name>
<url-pattern>/RestrictedPages/YellowZone/Yellow.jsp</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>start</servlet-name>
<jsp-file>/StartSide.jsp</jsp-file>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>start</servlet-name>
<url-pattern>/start</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>AC</servlet-name>
<servlet-class>control.ActorControl</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>AC</servlet-name>
<url-pattern>/AC</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>LC</servlet-name>
<servlet-class>control.LogoutControl</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LC</servlet-name>
<url-pattern>/LC</url-pattern>
</servlet-mapping>
</web-app>
會如果有人能指出我在做什麼錯誤,那就太棒了......我可以看到在網址模式上使用過濾器的潛力很大,但當我不能做簡單的事情時,對我來說沒用一個url模式....
我使用Eclipse Helios和apache-tomcat 7.0,如果它有任何相關性...
(我用了幾個小時試圖尋找一個答案,但我不認爲我知道要搜索什麼的)
編輯:錯別字和澄清
EDIT2:我試圖做一些映射在我的Logout.jsp頁面(這是我登錄在我的受限制頁面上的註銷頁面),但這似乎不能解決問題...
編輯3:我已經探索了更多今晚的這個問題。
我想這段代碼添加到我的YellowFilter.java(和添加的名稱=註銷在Logout.jsp提交按鈕):
try{
if(httpReq.getParameter("logout").equals("Log ud"))
httpResp.sendRedirect("LC");
} catch(NullPointerException e)
{
}
它也不起作用,它仍然只是嘗試訪問
http:// localhost:8080/myapp/RestrictedPages/YellowZone/LC
我也嘗試從我的註銷表單中刪除操作參數,所以它只會POST到同一頁面。這並沒有幫助...
此外,我曾嘗試編輯Servlet映射爲XML文件我退出控制小服務程序:
<servlet-mapping>
<servlet-name>LC</servlet-name>
<url-pattern>/*/*/LC</url-pattern>
</servlet-mapping>
沒有工作,然後我想:
<servlet-mapping>
<servlet-name>LC</servlet-name>
<url-pattern>/*/LC</url-pattern>
</servlet-mapping>
也不能工作,所以後來我想:
<servlet-mapping>
<servlet-name>LC</servlet-name>
<url-pattern>/*LC</url-pattern>
</servlet-mapping>
,但這並沒有工作,要麼...
/嘆息,很煩人的問題,不能讓他走......