2010-10-27 121 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页面)'