Servlets request.getRequestDispatcher().forward()无法显示请求的HTML
我正在制作一个数据库管理器web应用程序的原型。成功登录后,应用程序需要导航到数据库管理器视图(dbmanager.html)。但是,请求的页面不会显示在浏览器中 环境是Windows 10、Apache-Tomcat-7.0.94、Glassfish 4、MySql 5.7.24 login.htmlServlets 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
<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()。