Servlets request.getRequestDispatcher().forward()无法显示请求的HTML

Servlets request.getRequestDispatcher().forward()无法显示请求的HTML,servlets,forward,requestdispatcher,Servlets,Forward,Requestdispatcher,我正在制作一个数据库管理器web应用程序的原型。成功登录后,应用程序需要导航到数据库管理器视图(dbmanager.html)。但是,请求的页面不会显示在浏览器中 环境是Windows 10、Apache-Tomcat-7.0.94、Glassfish 4、MySql 5.7.24 login.html <form id="login_form" name="login_form" action="LogIn" method="post" onsubmit="formP

我正在制作一个数据库管理器web应用程序的原型。成功登录后,应用程序需要导航到数据库管理器视图(dbmanager.html)。但是,请求的页面不会显示在浏览器中

环境是Windows 10、Apache-Tomcat-7.0.94、Glassfish 4、MySql 5.7.24

login.html

    <form id="login_form" name="login_form" action="LogIn"
      method="post" onsubmit="formPost(this);return false;">
        <fieldset>
            <!-- more fields here -->
            <input id="input_login" value="Login" type="submit" >
        </fieldset>
        <p id="mesg" style="color: red;"></p>
    </form>
JavaScript(无jQuery)


我在
DBManager
servlet中设置了以下代码,并更新了JS

Servlet

@WebServlet(name = "DBManager", urlPatterns = { "/DBManager" })
@MultipartConfig
public class DBManager extends HttpServlet {

   private static final long serialVersionUID = 1L;

   @Override
   protected void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      System.out.print("DBManager dG conx:");
      Connection conx =
         (Connection) ((HttpSession)LogIn.getHTTPSession()).getAttribute("Connection");
      System.out.println(conx.toString());
   }
}
我正在从创建连接的servlet中提取连接对象

编辑的JS

function onload(){
    //alert("win.loc:"+window.location);
    var url = window.location;
    var pageName = url;
    if(url===null || pageName===null) {return;}

    url = url.toString();

    //other logic go here

    if(pageName === "dbmanager"){
        processGet(url);
    }

}
function processGet(url){
    alert("processGet url="+url);
    var xhr = new XMLHttpRequest();
    xhr.onreadystatechange = function() {
        if (xhr.readyState == 4 && xhr.status == 200) {
            var data = xhr.responseText;
            alert("DBManager xhr.responseText:"+data);
        }
    }
    xhr.open('GET', 'DBManager', true);
    xhr.send(null);
}
结果是系统输出像

LogIn dP con=com.mysql.cj.jdbc.ConnectionImpl@1df9967
DBManager dG conx:com.mysql.cj.jdbc.ConnectionImpl@1df9967

适合我。

我在
DBManager
servlet中设置了以下代码,并更新了JS

Servlet

@WebServlet(name = "DBManager", urlPatterns = { "/DBManager" })
@MultipartConfig
public class DBManager extends HttpServlet {

   private static final long serialVersionUID = 1L;

   @Override
   protected void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      System.out.print("DBManager dG conx:");
      Connection conx =
         (Connection) ((HttpSession)LogIn.getHTTPSession()).getAttribute("Connection");
      System.out.println(conx.toString());
   }
}
我正在从创建连接的servlet中提取连接对象

编辑的JS

function onload(){
    //alert("win.loc:"+window.location);
    var url = window.location;
    var pageName = url;
    if(url===null || pageName===null) {return;}

    url = url.toString();

    //other logic go here

    if(pageName === "dbmanager"){
        processGet(url);
    }

}
function processGet(url){
    alert("processGet url="+url);
    var xhr = new XMLHttpRequest();
    xhr.onreadystatechange = function() {
        if (xhr.readyState == 4 && xhr.status == 200) {
            var data = xhr.responseText;
            alert("DBManager xhr.responseText:"+data);
        }
    }
    xhr.open('GET', 'DBManager', true);
    xhr.send(null);
}
结果是系统输出像

LogIn dP con=com.mysql.cj.jdbc.ConnectionImpl@1df9967
DBManager dG conx:com.mysql.cj.jdbc.ConnectionImpl@1df9967

适合我。

@Rahul Kadukar,谢谢你的编辑。当您从servlet获得
成功的
响应后,您可以
重定向到ajax中的某个页面。@Swati,谢谢您的建议。我试过了,下面的代码示例<代码>if(response==“#redirect”){var value=getValue(response);if(value!==null){window.location.replace(value);}}
。它可以工作,但需要知道为什么
response.getRequestDispatcher().forward()
不能导航到请求的html。因为您使用的是
ajax
,它需要一些响应,所以在
请求的页面中执行一些操作后,您需要返回到有ajax调用的页面。您可以直接重定向到服务器端请求的页面,但在这种情况下,您不能使用ajax@Swati非常正确,
var xhr=new-XMLHttpRequest()启动一个新线程,并在该线程中返回响应。因此,读取预格式化(在servlet中格式化)响应并使用它替换当前url是另一种选择。但我需要HTTPSession继续到下一个html页面。我的HTTPSession对象具有我需要为所有页面和servlet共享的成功用户连接对象。请不要吃饼干!这就是为什么我需要response.getRequestDispatcher().forward()。@Rahul-Kadukar,感谢您的编辑。当您从servlet获得
成功的
响应后,您可以
重定向到ajax中的某个页面。@Swati,谢谢您的建议。我试过了,下面的代码示例<代码>if(response==“#redirect”){var value=getValue(response);if(value!==null){window.location.replace(value);}}
。它可以工作,但需要知道为什么
response.getRequestDispatcher().forward()
不能导航到请求的html。因为您使用的是
ajax
,它需要一些响应,所以在
请求的页面中执行一些操作后,您需要返回到有ajax调用的页面。您可以直接重定向到服务器端请求的页面,但在这种情况下,您不能使用ajax@Swati非常正确,
var xhr=new-XMLHttpRequest()启动一个新线程,并在该线程中返回响应。因此,读取预格式化(在servlet中格式化)响应并使用它替换当前url是另一种选择。但我需要HTTPSession继续到下一个html页面。我的HTTPSession对象具有我需要为所有页面和servlet共享的成功用户连接对象。请不要吃饼干!这就是为什么我需要response.getRequestDispatcher().forward()。