回到url-pattern(从jsp页面调用servlet)
我在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>
,但这并没有工作,要么...
/叹息,很烦人的问题,不能让他走......
我发现了一个很简单的解决问题的方法。我只是在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页面)'