0

我是编程新手,我编写了两段代码来学习 servlet 中的 urlrewriting:

我的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)中获取名称的值,但我无法通过 urlrewriting 获取登录 ID(“mylogin”)的值。我得到它的空值。请帮助。

非常感谢提前。

4

2 回答 2

0

您不能在表单操作中使用 URL 重写。后面有参数吗?将被浏览器丢弃。相反,您可以将登录名添加为第二个表单中的隐藏表单字段:

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

这将以与其他字段相同的方式传递给您的第二个 Servlet。

请参阅提交带有查询字符串参数和隐藏参数的 GET 表单消失

于 2014-06-18T16:11:32.260 回答
0

如果您只是希望将控制权从一个 servlet 转移到另一个,只需将请求转发到另一个 servlet。在这种情况下,“转发”不会返回给客户端。

最后,在您的原始 servlet 中,您需要获取一个 RequestDispatcher,并转发到新的 URL。

例如

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

控制线程将转移到另一个 servlet。IIRC,您仍将完成第一个 servlet 中的方法调用。即它不会从您的方法返回,然后调用另一个servlet。

如果您出于某种原因需要对请求进行后处理,则可以利用这一点。尽管 ServletFitler 将是处理这种情况的更合适的方法。

于 2014-02-19T13:37:00.900 回答