我有以下代码' 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'中使用属性。文件。 但是它不会起作用 - 所有发生的事情都是,我的登录.jsp'进行ajax调用的文件,打印来自' mandant.jsp'的代码。进入我的div 作为文本。 因此,我希望-.-
打开下一页但是如果我注释掉HttpSession块然后它工作正常但是我当然不能使用会话属性。
那么错误或者我必须改变什么才能使这段代码有效?
非常感谢
答案 0 :(得分:1)
这是因为这部分代码:
RequestDispatcher dis = request.getRequestDispatcher("mandant.jsp");
dis.forward(request, response);
使用请求对象(以及HttpSession
和ServletContext
)从mandant.jsp文件生成HTML,以实现任何表达式语言并将此HTML写入响应。只需删除这些行就可以了。
答案 1 :(得分:1)
您正在混合两种类型的通信,从您正在进行ajax调用的JSP页面,但是从正在进行Dispatch重定向的Servlet。
如果您希望在成功登录后重定向登录页面,则不要使用ajax调用调用Servlet,并且最好进行表单提交。
如果您只想检查servlet上的凭据并从客户端重定向,则保持ajax调用,但避免servlet中的请求调度程序,而是返回成功/错误代码。然后从ajax响应中捕获该代码,并根据需要重定向到成功的页面。