簡體   English   中英

我不明白web.xml在使用servlet時如何工作/應該工作

[英]I don't understand how web.xml works / should work while using servlets

我有一個簡單的程序:

  • 登錄

  • 處理

  • 結果

作為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 /或者我可以告訴它我想要一個“相對路徑”或類似的東西嗎?

您將其設置為表單中的該URL(參見下文)。 領先的斜線使它成為絕對的。


在Java中生成HTML幾乎是不對的; 使用JSP或類似的視圖層。

這里:

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

您告訴表單回發到URL /進程/這是一個絕對路徑。

好吧,你的表單的動作是action="/process/" ,所以當按下提交時它將請求提交到: <server-url>:<server-port>/process/並且沒有'/ PDPJ_- Servlet -_V4 in the URL, by the way there is no context name in the URL too, so even if you change the操作value, you can only deploy your application with no上下文名稱的value, you can only deploy your application with no ,否則會發生同樣的事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM