2014-02-18 137 views
0

我新的編程,我已經寫了兩件代碼,以瞭解在servlet的URL重寫:URL重寫的Servlet

我的HTML形式是:

<form action="loginhidden" method="get"> 
    Login ID:<input name="login" ><br> 
    Password:<input name="pass" type="password"><br> 
      <input type="submit" > 
</form> 

我的web.xml文件:

<web-app> 
     <servlet> 
     <servlet-name>loginhidden</servlet-name> 
     <servlet-class>loginhidden</servlet-class> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>loginhidden</servlet-name> 
     <url-pattern>/loginhidden</url-pattern> 
    </servlet-mapping> 

    <servlet> 
     <servlet-name>loginhidden1_name</servlet-name> 
     <servlet-class>loginhidden1_name</servlet-class> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>loginhidden1_name</servlet-name> 
     <url-pattern>/loginhidden1_name/*</url-pattern> 
    </servlet-mapping> 
</web-app> 

的代碼片段如下:

1.

import java.io.*; 
import javax.servlet.*; 
import javax.servlet.http.*; 

    public class loginhidden extends HttpServlet { 
     public void doGet(HttpServletRequest req, HttpServletResponse res)throws 
     ServletException, IOException           

      { 
       res.setContentType("text/html"); 
       PrintWriter out=res.getWriter(); 
       String login= req.getParameter("login"); 
       String pass=req.getParameter("pass"); 
       if(pass.equals("admin")) 
        { 
        out.println(login); 
        out.println(pass); 
        out.println("<html><head><form action=loginhidden1_name? 
        mylogin="+login+">"); 

        out.println("Your Name:<input type=text name=myname><br>"); 
        out.println("<input type=submit>"); 
        out.println("</body></head></html>"); 
        } 

      } 


     } 

2.

import java.io.*; 
import javax.servlet.*; 
import javax.servlet.http.*; 

    public class loginhidden1_name extends HttpServlet{ 
    @Override 
     public void doGet(HttpServletRequest req, HttpServletResponse res)throws 
     ServletException, IOException 

     { 
      res.setContentType("text/html"); 
      PrintWriter out=res.getWriter(); 
      out.println(req.getParameter("mylogin")); 
      out.println(req.getParameter("myname")); 
     } 
    } 

我能夠得到我的第二個servlet(loginhidden1_name)名字的價值,但我不能夠通過URL重寫來獲得登錄ID(「mylogin」)的值。我得到它的空值。請幫助。

非常感謝。

+0

你想要發生什麼?在某些情況下,您想要將控件轉移到第二個servlet嗎? – Bill

+0

我想從html頁面(表單)中獲取用戶的loginid值。讓它打印在第一個servlet中,然後通過url重寫將值傳遞給第二個servlet並重新打印。謝謝比爾。 – gallactico

回答

0

如果您只是想將控制權從一個servlet轉移到另一個servlet,那麼將請求轉發到其他servlet是一件簡單的事情。這種情況下的「轉發」不會返回給客戶端。

在你最初的servlet中,最後你會想要一個RequestDispatcher,然後轉發到新的URL。

例如

getServletContext().getRequestDispatcher("/modified/url").forward(request, response); 

控制線程將轉移到另一個servlet。 IIRC,你仍然可以在第一個servlet中完成方法調用。即它不會從您的方法返回,然後調用其他servlet。

如果您出於某種原因需要後處理請求,則可以利用此優勢。儘管ServletFitler是處理這種情況的更合適的方法。

0

您不能在表單操作中使用URL重寫。任何參數後?將被瀏覽器丟棄。相反,你可以添加登錄作爲隱藏的表單字段在你的第二個形式:

... 
out.println("<input type=hidden name=\"mylogin\" value=\""+login+"\">"); 
... 

這將通過同樣的方式與其他領域傳遞給你的第二個servlet。

請參閱submitting a GET form with query string params and hidden params disappear