【问题标题】:I don't understand how web.xml works / should work while using servlets我不明白 web.xml 是如何工作的/在使用 servlet 时应该如何工作
【发布时间】:2014-02-03 05:47:37
【问题描述】:

我有一个简单的程序:

  • 登录

  • 流程

  • 结果

作为 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/”。

问题是,在我登录后,url 应该看起来像这样http://localhost:8080/PDPJ_-_Servlet_-_V4/process/?username=admin&amp;password=admin,它适用于手动输入,但是如果我只是单击提交按钮,url 就会变成 http://localhost:8080/process/?username=admin&amp;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>");

有人能指出我缺少什么吗?

EDIT另外,.xml 是否应该包含 /PDPJ_-Servlet-_V4/ 或者我可以告诉它我想要一个“相对路径”或类似的东西吗?

【问题讨论】:

    标签: java xml servlets web.xml


    【解决方案1】:

    好吧,您的表单的操作是action="/process/",所以当按下提交时,它会将请求提交到:&lt;server-url&gt;:&lt;server-port&gt;/process/,并且没有'/PDPJ_-Servlet-_V4in the URL, by the way there is no context name in the URL too, so even if you change theaction@ 987654324@context` 名称,否则会发生同样的事情。

    【讨论】:

    • 上下文名称到底是什么?
    • 将您的war文件命名为something.war并将其部署在Tomcat中(默认模式下),上下文名称将为something
    【解决方案2】:

    这里:

    pw.println("<form action=\"/process/\">
    

    您告诉表单回发到 URL /process/,这是一个绝对路径。

    【讨论】:

    • 我会将其设为...非绝对路径...如何?
    • 对不起,英语不是我的母语,前导是第一还是最后?
    • 领先为先,对不起
    【解决方案3】:

    将其设置为表单中的那个 URL(见下文)。前导斜线使其成为绝对值。


    用 Java 生成 HTML 几乎是不对的;使用 JSP 或类似的视图层。

    【讨论】:

    • 作业只针对servlet,没有jsp。 Jsp 紧随其后。谢谢,但你能否也给我一个它应该如何工作的例子?
    • @Kalec 什么例子?我说前导斜杠使其绝对......所以让它相对......删除前导斜杠。
    • 英语不是我的母语,我听不懂,领先是第一还是最后?
    猜你喜欢
    • 2021-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-03
    • 1970-01-01
    相关资源
    最近更新 更多