2010-10-27 123 views
0

我在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> 

,但這並沒有工作,要麼...


/嘆息,很煩人的問題,不能讓他走......

回答

0

我發現了一個很簡單的解決問題的方法。我只是在Logout.jsp改變窗體的方法方法= GET而不是POST,然後寫動作= /「myappname」 /「名稱的小服務程序」:

<form method=GET action=/Prototype/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> 

該解決方案是很明顯對我來說,我愚蠢地忽略了這一點,所以我真的希望別人有同樣的問題xD ...
將我的問題的標題更改爲'回到url-pattern(從servlet中調用servlet jsp頁面)'