【问题标题】:ajax call to servlet and redirect to jspajax 调用 servlet 并重定向到 jsp
【发布时间】:2013-06-01 07:00:41
【问题描述】:

在下面的代码中,我想通过 ajax 调用 servlet,然后将数据从 servlet 重定向到 jsp.ajax 调用 servlet 工作正常,但问题是重定向到 jsp 页面未显示在浏览器中,并且当我使用没有 ajax 的 javascript 代码时,会显示相同的 jsp 页面。

jspfile中的javascript ajax代码:

function generate(){
...
...
 var url="RedirectServlet";
 var ajax=new AJAXInteraction(url,"RedirectServlet");
 var param    ="FD="+FD+"&TD="+TD+"&actionid="+status+"&usercode="+usercode+"&action=reports"+"";
 ajax.send(param);

....
 }
 function AJAXInteraction(url, actionType) {
     this.url = url;

     var req = init();
   var actionRequested = actionType;
     req.onreadystatechange = processRequest;      
    function init() {
        if (window.XMLHttpRequest) {
            return new XMLHttpRequest();
        } else if (window.ActiveXObject) {
            return new ActiveXObject("Microsoft.XMLHTTP");
        }
     }

     function processRequest () {
        if (req.readyState == 4) {
            if (req.status == 200) {                                
                if(actionRequested=="TestDelegation") {                     
                    PostProcess1(req.responseXML);
                }

            }
        }
     }
     this.send = function(param) {
        req.open("POST", url, true);

        req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

        req.send(param);


     }
}//end of AJAX Interaction object.

Servlet 代码:

  protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException
        {
    System.out.println("calling doPost() ");

    response.setContentType("text/html;charset=WINDOWS-1256");
    String action=request.getParameter("action");
    System.out.println(action);

    if(action.equals("reports")){
        System.out.println("inside reports");



        //Getting values from Reports_arb.jsp
        String Fromdate=request.getParameter("FD");
        String Todate=request.getParameter("TD");
        String status=request.getParameter("actionid");
        String usercode=request.getParameter("usercode");

        //placing given values in a session 


        request.setAttribute("FD", Fromdate);
        request.setAttribute("TD", Todate);
        request.setAttribute("actionid", status);
        request.setAttribute("usercode", usercode);


        //Redirecting to showReport_arb.jsp
        //response.sendRedirect("showReport_arb.jsp");

          ServletContext sc = getServletContext();
            sc.getRequestDispatcher("/sample.jsp").forward(request, response); 

【问题讨论】:

    标签: ajax jsp servlets


    【解决方案1】:

    您需要了解这样一个事实:当您从 ajax 发送 http 请求时,这意味着您是在单独的线程中发送请求,而不是在主线程(您发送请求的页面本身)中发送请求。因此 servlet 的重定向不会反映在客户端。为了实现这一点,发回你想要重定向到的 URL 作为对请求的响应,并且在 ajax 的成功方法上只需使用 java 脚本 window.location(URL);

    在小服务程序

    JSONObject jobj = new JSONObject()
    String urlToRedirect = "test.jsp";
    jobj.put("url",urlStr);
    response.getWriter().write(jobj.toString());
    

    在客户端

    $.ajax({
                    url: 'servletName',
                    data: {
                        userID: selectedID
                    },
                    type: 'post',
                    success: function(data){
                      window.location = data.url;
                    } 
    
                });
    

    【讨论】:

    • 如果我有一些数据要发送到 jsp 页面怎么办?
    • @AbhishekGhosh 据我所知,如果使用 sendRedirect(),则无法将数据发送到 jsp。在需要使用转发的情况下。
    • @Rajan,您在 servlet 中提到的 JSONObject 是什么?我打算将参数从 servlet 传递给 jsp。
    【解决方案2】:

    不要创建requestresponse 对象,而是使用jquery Ajax。使用起来非常简单。

     /* Send the data using post and put the results in a div */
    
     $.ajax({
      url: "/YourServlet",
      type: "post",
      data: values,
      success: function(){
          alert("success");
           $("#result").html('submitted successfully');
      },
      error:function(){
          alert("failure");
          $("#result").html('there is error while submit');
      }   
    }); 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多