【问题标题】:How to obtain value from jsp to servlet and make mysql query如何从jsp获取值到servlet并进行mysql查询
【发布时间】:2014-07-05 22:20:17
【问题描述】:

我在index.jsp 和login servlet 有登录表单。如果用户名和密码正确,则取决于权限,打开三个 .jsp 页面之一 (admin.jsp, user1.jsp, user2.jsp)。在打开的 .jsp 页面中,用户的用户名显示为 (${User.username})。我也有存储用户数据的 bean“用户”。

登录小服务程序

public class Login extends HttpServlet {
 @Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();
    String username = request.getParameter("username");
    String password = request.getParameter("password");
    User user = new User();
    user.setUsername(username);
    user.setPassword(password);

    try {
        HttpSession session = request.getSession(true);
        Class.forName("com.mysql.jdbc.Driver");
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/database","root","");
        Statement stm = conn.createStatement();
        if( !(username.equals("")) && !(password.equals("")) ){
          String query = "SELECT * FROM users WHERE username='"+username+"' AND password='"+password+"'";
          ResultSet res = stm.executeQuery(upit);
          if(res.next()){
              String username = res.getString(2);
              int privileges = res.getInt(9);
              int active = res.getInt(10);
              user.setUsername(username);
              user.setPrivileges(privileges);
              user.setActive(active);

              sesija.setAttribute("user", user);
              if(privileges==1 && active==1){
                    RequestDispatcher r = request.getRequestDispatcher("/admin.jsp");
                    r.forward(request, response);
              }
              ......rest of the code

    }catch(Exception e){
    out.println(e);}
}

在 admin.jsp 我有一行:

<div id="topMenu>${user.username} | <a href="Logout">Logout</a></div>

Bean“用户”

public class User {

private String username;
private int privileges;
private int active;



public String getUsername() {
    return username;
}
public void setUsername(String username) {
    this.username = username;
}
public int getPrivileges() {
    return privileges;
}
public void setPrivileges(int privileges) {
    this.privileges = privileges;
}

 public int getActive() {
    return active;
}
public void setActive(int active) {
    this.active = active;
}


}

用户可以根据自己的权限在数据库中搜索产品。在他点击搜索按钮后,我想检索他的用户名并用于在新的 servlet 中进行数据库查询。当我将用户的用户名手动放入 servlet 代码(在 sql 查询语句中)以进行代码检查时,一切正常并生成结果,但是当用户点击搜索按钮时我无法自动获取值。

提前致谢

【问题讨论】:

    标签: java mysql jsp servlets


    【解决方案1】:

    一旦通过身份验证,您应该在 HTTP 会话中简单地存储用户名(或者更确切地说,它的唯一 ID)。这样,对于到达服务器的每个请求,您都知道是哪个用户发送的:

    if (res.next()) {
        String username = res.getString(2);
        request.getSession().setAttribute("authenticatedUserName", username);
    

    并且每次需要获取当前经过身份验证的用户:

    String authenticatedUserName = 
        (String) request.getSession().getAttribute("authenticatedUserName");
    

    旁注:学习使用prepared statements。您的代码很容易受到 SQL 注入攻击,并且一旦用户的名称或密码中包含单引号,该代码就会中断。此外,当您真正想要的是布尔值(例如,活动应该是布尔值)时,不要使用 int。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多