【问题标题】:how to pass the same parameter from one JSP to two servlets? Then pass the different parameters from servlet to the same JSP?如何将相同的参数从一个 JSP 传递给两个 servlet?然后将不同的参数从 servlet 传递给同一个 JSP?
【发布时间】:2017-03-25 05:30:21
【问题描述】:

我是 Web 应用程序的新手。 我的问题:如何将相同的参数从一个 JSP 传递给两个 servlet?然后将不同的参数从 servlet 传递给同一个 JSP?

重要!!我们应该先做流程A,然后做流程B!!!!

由于项目占用的进程太多,我想将这些进程分成两个servlet。

目前,我完成了 processA 的实现,它将搜索词从 SEARCH PAGE JSP 传递给 SERVLET A(执行 processA)并将结果传递给 WELCOME PAGE JSP。它有效!!!(我在图片中以红色突出显示)

我使用的代码: Web.xml

  <servlet>
    <servlet-name>ServletA</servlet-name>
    <servlet-class>test.processA</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>ServletA</servlet-name>
    <url-pattern>/download result</url-pattern>
  </servlet-mapping>

搜索页面JSP:

<form   action="download result">           
             Please enter a Keyword <br> 
            <input type="text" name="term"size="20px">
            <input type="submit" value="submit">

</form>

servletA:

public class processA  extends HttpServlet { 
     protected void doGet(HttpServletRequest request, 
              HttpServletResponse response) throws ServletException, IOException 
          {
            // reading the user input

            response.setCharacterEncoding("UTF-8");
            PrintWriter out = response.getWriter();
            // Retrieve search term from GET request and parse to desired format
            String searchTerm = (request.getParameter("term").toString()).replace("%20", "_").replace(" ", "_").replace("+", "_").replace(".", "");
            System.out.println("=====(servlet) searchTerm is:"+searchTerm);

  }

              protected void doPost(HttpServletRequest request, 
                      HttpServletResponse response) throws ServletException, IOException 
                  {
                 doGet(request, response);

          }  
                }

那么如何实现processB进入系统???这看起来像我展示的图片。

servletB

public class processB extends HttpServlet {
    protected void doGet(HttpServletRequest request,  HttpServletResponse response) throws ServletException, IOException 
          {
            doPost(request,response);
          }


    protected void doPost(HttpServletRequest request,  HttpServletResponse response) throws ServletException, IOException 
      {



        String searchTerm = (request.getParameter("term")).replace(" ", "_");
        String queryTerm = request.getParameter("term");

        System.out.println("=====(servlet) searchTerm is:"+searchTerm);

System.out.println("=====(servlet) keep doing the other process……………………!!!”);


}
}

非常感谢! 或者如果doGET和doPOST不能同时使用,我可以将processA改为doPost。

重要!!我们应该先做流程A,然后做流程B!!!!

【问题讨论】:

  • 在servletA中,不是转发到jsp,而是重定向到servletB
  • 你的意思是使用 servletA 调用 servletB 并将字符串 searchTerm 从 servletA 传递给 servletB???

标签: java jsp servlets web-applications


【解决方案1】:

SearchPage.jsp 的表单只能有一个操作方法(获取/发布等)。

作为程序员,您必须首先决定需要处理什么以及如何处理请求,而不是让用户在 doPostdoGet 方法之间进行选择。

这两种方法有不同的用途检查区别here

您必须将处理单元 A 和 B 保留在一个 servlet(servletA/servletB) 中,
例如: 首先从 JSP 调用 Process A,然后从 JSP 调用 Process B Process A 最后将响应从Process B 重定向/转发到Welcome.jsp
下面是代码:

Search.jsp

<form action="download result" method="get">
...
</form>

servletA:

 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
      {
        ... //processing logic of A
        ... //processing logic of A
        ... //processing logic of A
        doPost(request,response);//call Post 
      }
 protected void doPost(HttpServletRequest request,  HttpServletResponse response) throws ServletException, IOException 
  {
        ... //processing logic of B
        ... //processing logic of B
        ... //processing logic of B

        RequestDispatcher rd=request.getRequestDispatcher("welcome.jsp");  
        rd.forward(request, response);  
  }

注意:您可以反之亦然,即根据您的要求先调用doPost,然后再调用doGet。另外,需要为此更改form tag中的method="post"


对于您在 cmets 中的查询,请使用以下代码:

servletA:

 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
      {
        ... //processing logic of A
        ... //processing logic of A
        ... //processing logic of A
        RequestDispatcher dispatcher = null;
        dispatcher=request.getRequestDispatcher("servletB");
        dispatcher.forward(request, response);//call Post 
      }

servletB:

 protected void doPost(HttpServletRequest request,  HttpServletResponse response) throws ServletException, IOException 
  {
        ... //processing logic of B
        ... //processing logic of B
        ... //processing logic of B

        RequestDispatcher rd=request.getRequestDispatcher("welcome.jsp");  
        rd.forward(request, response);  
  }

【讨论】:

  • 感谢您的分享。我明白了。但在您的情况下,您将 servletA 和 servletB 组合为“新 servletA”。但是,我想保留两个 servlet 。是否可以在 servletA 中使用“response.sendRedirect(serveletB)”??
  • 为此,您可以通过先处理servletA 来保留两个servlet,然后使用requestdispatcher 调用serlvetB 而不是重定向,以便参数值保持原样。稍后将来自serlvetB 的请求发送到welcome.jsp。这里是一个示例,其中使用了两个 servlet login 和 welcomeServlet javatpoint.com/requestdispatcher-in-servlet
猜你喜欢
  • 2019-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-28
  • 2010-12-16
  • 2015-01-18
  • 1970-01-01
相关资源
最近更新 更多