我不明白web.xml在使用servlet时如何工作/应该工作

时间:2014-01-14 23:01:43

标签: java xml servlets web.xml

我有一个简单的程序:

  • 登录

  • 过程

  • 结果

作为servlet和过滤器:

  • AuthentifFilter

这是我的.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 /或者我可以告诉它我想要一个“相对路径”或类似的东西吗?

3 个答案:

答案 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`名称,否则会发生相同的事情。