HttpSession与Servlet + Java无法正常工作

时间:2014-10-22 15:02:49

标签: java jsp servlets

我有以下代码' 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块然后它工作正常但是我当然不能使用会话属性。

那么错误或者我必须改变什么才能使这段代码有效?

非常感谢

2 个答案:

答案 0 :(得分:1)

这是因为这部分代码:

RequestDispatcher dis = request.getRequestDispatcher("mandant.jsp");
dis.forward(request, response);

使用请求对象(以及HttpSessionServletContext)从mandant.jsp文件生成HTML,以实现任何表达式语言并将此HTML写入响应。只需删除这些行就可以了。

答案 1 :(得分:1)

您正在混合两种类型的通信,从您正在进行ajax调用的JSP页面,但是从正在进行Dispatch重定向的Servlet。

如果您希望在成功登录后重定向登录页面,则不要使用ajax调用调用Servlet,并且最好进行表单提交。

如果您只想检查servlet上的凭据并从客户端重定向,则保持ajax调用,但避免servlet中的请求调度程序,而是返回成功/错误代码。然后从ajax响应中捕获该代码,并根据需要重定向到成功的页面。

相关问题