![](/img/trans.png)
[英]Java Servlet HttpSession not maintained on Weblogic session forward
[英]HttpSession with Servlet + Java not working
我有以下代码'anmelden.java'的价格:
@WebServlet("/anmelden")
public class anmelden extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String benutzer = request.getParameter("benutzer");
String passwort = request.getParameter("passwort");
try {
PrintWriter out = response.getWriter();
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost/test","admin","*****");
PreparedStatement stmt = con.prepareStatement("SELECT benutzer,passwort,rolle FROM login WHERE benutzer = ? AND passwort = ?");
stmt.setString(1, benutzer);
stmt.setString(2, passwort);
ResultSet rs = stmt.executeQuery();
if(rs.next())
{
HttpSession session = request.getSession();
session.setAttribute("benutzer", rs.getString("benutzer"));
RequestDispatcher dis = request.getRequestDispatcher("mandant.jsp");
dis.forward(request, response);
out.print("1");
}
else
{
out.print("Benutzername und/oder Passwort falsch");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
这是我的jsp文件“ login.jsp”:
$("#anmelden").click(function(){
var benutzer = $("#benutzer").val();
var passwort = $("#passwort").val();
if(benutzer == "" || passwort == "")
{
return;
}
$.ajax({
url:"anmelden",
type:"POST",
data:"benutzer="+benutzer+"&passwort="+passwort
}).success(function(data){
var erfolg = data;
if(erfolg == "1")
{
window.location.href="http://localhost:8080/PSD/mandant.jsp";
}
else
{
$("#ok").text(erfolg);
}
});
});
如您所见,我尝试将来自数据库的名称设置为会话属性。 我想在“ mandant.jsp”文件中使用该属性。 但这行不通-发生的一切是,我的进行ajax调用的'login.jsp'文件将代码从 'mandant.jsp' 打印 为text到我的div 中 。 所以它并没有按照我的要求打开下一页-.-
但是,如果我注释掉HttpSession块,那么它可以正常工作,但是我当然不能使用session Attribute。
那么,什么地方出错或必须更改什么才能使此代码起作用?
非常感谢
这是因为这部分代码:
RequestDispatcher dis = request.getRequestDispatcher("mandant.jsp");
dis.forward(request, response);
正在使用请求对象(以及HttpSession
和ServletContext
)从mandant.jsp文件生成HTML,以实现任何表达式语言并将该HTML写入响应中。 只需删除这些行,您就可以了。
您在这里混合了两种类型的通信,在JSP页面中进行的是ajax调用,而在Servlet中进行的是Dispatch重定向。
如果您希望成功登录后重定向登录页面,则不要使用ajax调用来调用Servlet,最好进行表单提交。
如果您只想检查servlet上的凭据并从客户端重定向,则保留ajax调用,但避免servlet中的请求分配器,而是返回成功/错误代码。 然后从ajax响应中捕获该代码,并根据需要重定向到成功的页面。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.