我有一个简单的程序:
登录
过程
结果
作为servlet和过滤器:
这是我的.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<display-name>PDPJ Servlet Application</display-name>
<description>
Not in english so skipping this
</description>
<listener>
<listener-class>listeners.InitServlet</listener-class>
</listener>
<servlet>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>servlet.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>ProcessingServlet</servlet-name>
<servlet-class>servlet.ProcessingServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ProcessingServlet</servlet-name>
<url-pattern>/PDPJ_-_Servlet_-_V4/process/</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>ResultsServlet</servlet-name>
<servlet-class>servlet.ResultsServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ResultsServlet</servlet-name>
<url-pattern>/process/results</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>1200</session-timeout>
</session-config>
<filter>
<filter-name>AuthFilter</filter-name> <!-- mandatory -->
<filter-class>filter.AuthentificationFilter</filter-class> <!-- mandatory -->
</filter>
<filter-mapping>
<filter-name>AuthFilter</filter-name>
<url-pattern>/PDPJ_-_Servlet_-_V4/process/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
</web-app>
现在,处理servlet的URL为“/ PDPJ _- Servlet -_ V4 / process /”,以前只是“/ process /".
事情是,在我登录后,网址应该像这样http://localhost:8080/PDPJ_-_Servlet_-_V4/process/?username=admin&password=admin
并且它适用于手动输入,但是如果我只是点击提交按钮,则网址变为http://localhost:8080/process/?username=admin&password=admin
我只是得到。
以下是表格:
PrintWriter pw = resp.getWriter();
pw.println("<html><head></head><body>");
pw.println("<form action=\"/process/\"> " +
"Username:<input type=\"text\" name=\"username\"/><br/> " +
"Password:<input type=\"password\" name=\"password\"/><br/> " +
"<input type=\"submit\" value=\"login\"> " +
"</form> ");
pw.println("</body></html>");
有人能说出我错过的东西吗?
编辑另外,如果.xml包含/ PDPJ _- Servlet -_ V4 /或者我可以告诉它我想要一个“相对路径”或类似的东西吗?
答案 0 :(得分:1)
您将其设置为表单中的该网址(参见下文)。领先的斜线使其绝对。
用Java生成HTML几乎是不对的;使用JSP或类似的视图层。
答案 1 :(得分:1)
下面:
pw.println("<form action=\"/process/\">
您告诉表单回发到URL /进程/这是绝对路径。
答案 2 :(得分:0)
好吧,您的表单操作为action="/process/"
,因此当按下提交时,它会将请求提交到:<server-url>:<server-port>/process/
并且没有'/ PDPJ _- Servlet -_ V4 { {1}}动作in the URL, by the way there is no context name in the URL too, so even if you change the
context`名称,否则会发生相同的事情。