使用JSP显示从MYSQL登录的用户特定数据

时间:2013-08-04 17:51:49

标签: mysql jsp session jstl

我遇到了一个问题,我必须根据登录的用户显示MYSQL评级表中的某些数据。

层次结构如下:

login.jsp - > check.jsp - > welcome.jsp

我必须根据登录的用户在Welcome.jsp上显示数据。我无法将user参数作为输入显示用户特定数据的sql查询。这是我的档案。

的login.jsp

<%-- 
Document   : login
Created on : May 15, 2012, 10:36:24 AM
Author     : Diaa
--%>

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<script>
function validate(){
var username=document.form.user.value;
var password=document.form.pass.value;
if(username==""){
alert("Enter Username!");
return false;
}
if(password==""){
alert("Enter Password!");
return false;
}
return true;
 }
</script>

    <div align="center">
   <div class='cssmenu'>
   <ul>
   <li class='active '><a href='index.jsp'><span>Home</span></a></li>
   <li><a href='login.jsp'><span>Login</span></a></li>
   <li><a href='index.jsp'><span>About</span></a></li>
    <li><a href='#'><span>Contact</span></a></li>
   </ul>
    </div>
    <form name="form" method="post" action="check.jsp" onsubmit="javascript:return  validate();">

<div align="center">
<h1>USER LOGIN</h1>
<table>
<tr><td bgcolor="#FF9900">Username:</td><td bgcolor="#33CCCC"><input type="text"  name="user"></td></tr>
<tr><td bgcolor="#FF9900">Password:</td><td bgcolor="#33CCCC"><input type="password" name="pass"></td></tr>
<tr><td></td><td><input type="submit" value="Submit"></td></tr>
</table>
</div>

check.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<%@page import="java.sql.*"%>

<%
String user=request.getParameter("user");
String pass=request.getParameter("pass");
Class.forName("com.mysql.jdbc.Driver").newInstance();

 Connection  con=DriverManager.getConnection("jdbc:mysql://localhost:3306/recommend","root","root");  
       Statement st=con.createStatement();
       ResultSet rs=st.executeQuery("select UserID,password from Users where   UserID='"+user+"' and password='"+pass+"'");
      int count=0;
      while(rs.next())
      {

               count++;
      }

                if(count>0)
      {
        out.println("welcome "+user);
        response.sendRedirect("welcome.jsp?msg=welcome "+user +"   <a   href=\"index.jsp\">logout</a>");
        session.removeAttribute("user");
      }
      else
      {
                   response.sendRedirect("login.jsp?msg=Invalid Username or Password");
      }
      %>

的welcome.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql"%>

   <%-- Database Interaction Queries Start --%>
   <% String user=(String)session.getAttribute(user); %>
   <sql:setDataSource var="genretype" driver="com.mysql.jdbc.Driver"
   url="jdbc:mysql://localhost/recommend"
   user="root"  password="root"/>

<sql:query dataSource="${genretype}" var="result">
SELECT * from Genres;
</sql:query>

<sql:query dataSource="${genretype}" var="result1">
SELECT * from Ratings where UserID = ?
<sql:param value="${user}"/>
</sql:query>

 <%-- Database Interaction Queries End --%>    



<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

    <title>Heading</title>
</head>
    <body>
    <div align="center">
    <div class='cssmenu'>
   <ul>
   <li class='active '><a href='index.jsp'><span>Home</span></a></li>
   <li><a href='login.jsp'><span>Login</span></a></li>
   <li><a href='index.jsp'><span>About</span></a></li>
   <li><a href='#'><span>Contact</span></a></li>
   </ul>
    </div>    
    <%String msg=request.getParameter("msg");
    if(msg!=null){
    %>

<label><font color="red"><%=msg%></font></label> 
<% 
}
 %>
    <h1>Sample Title</h1>
    <%--For Displaying Genre List Start --%>
    <div>
    <div align="left" position:absolute left:1200px>

             <c:forEach var="row" items="${result.rows}">
   <ul id="tab_nav">


   <li><c:out value="${row.GenreName}"/></li>

   </ul>

   </c:forEach>    

        </div>


    <div id="box" >

    <table border="1">
             <c:forEach var="row" items="${result1.rows}">

    <tr>
        <td><c:out value="${row.Rating}"/></td>              
        <td><c:out value="${row.UserID}"/></td>
        <td><c:out value="${row.GenreName}"/></td>
        <td><c:out value="${row.MovieName}"/></td>
    </tr>

  </c:forEach>    
  </table>
        </div>
    </div>
    </body>
  </html>

任何人都可以调查一下,让我知道我在这里缺少的东西:(除了发布的代码外,请随时回复任何其他信息。

手指交叉..等待帮助!!

干杯!

2 个答案:

答案 0 :(得分:0)

您无法将HTML附加到sendRedirect()方法调用的网址参数中。它可能存在编码问题,因此可能会失败:

response.sendRedirect("welcome.jsp?msg=welcome "+user +"   <a   href=\"index.jsp\">logout</a>");

这应该只是

response.sendRedirect("welcome.jsp?user=" + user);

将消息在JSP中构造为

<c:if test="${not empty user}">
    <label><font color="red">Welcome ${user}</font></label><br />
    <a href="logout.jsp">logout</a>
</c:if>

如果这不能解决问题,请更新您的问题,了解应用程序的行为方式。你看到有什么错误吗?您是否在任何地方记录例外情况?

答案 1 :(得分:0)

我在这里做了一个示例代码供您查看。  这是一个示例login.jsp表单:

<form action="check.jsp" method="post"> 
           <table border="0">
        <tr>       
       <input type="text" name="user" id="user"/>
           </tr>
    <tr>
    <input type="password" name="pass" id="pass"/>
    </tr>
<td>
    <input type="submit" id="submit"/>

</td>

       </table>

       </form>

然后,check.jsp可以这样看:

<%@page import="java.sql.*" %>

        <%
            Connection con;
            ResultSet rs;
            PreparedStatement ps;
            String query;

            String user = request.getParameter("user");
            String pass = request.getParameter("pass");

            try{
                Class.forName("com.mysql.jdbc.Driver");
                con = DriverManager.getConnection("jdbc:mysql://localhost:3306/recommend","root","root");
                query = "select userID,password from Users where userID='"+user+"' and password='"+pass+"'";
                ps = con.prepareStatement(query);
                //ps.setString(1,request.getParameter("user"));
                //ps.setString(1,request.getParameter("pass"));
                rs = ps.executeQuery();

            if(rs.next()){

                session.setAttribute("user", user);
          %>
          <jsp:forward page="welcome.jsp"/>     
       <%   
            }else{

               response.sendRedirect("login.jsp");

            }    

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

        %>  

从上面的代码中,您可以看到在查询数据库之后设置了用户的属性,并且check.jsp将其转发到welcome.jsp页面,该页面具有已设置的用户的属性,否则,如果用户或密码不正确,则该人员将被重定向到login.jsp页面。

welcome.jsp页面看起来像这样:

<body>
        <% String user = (String)session.getAttribute("user");%>
        <% if(user == null){
            response.sendRedirect("login.jsp");
}else{
        out.println("Welcome "+user);
        }
        %>
    </body>

在welcome.jsp页面中,它检索通过session.getAttribute()方法登录的用户的会话属性。然后检查会话属性是否为空,然后重定向回用户,否则打印欢迎+用户。请注意,正在打印的用户来自session.getAttribute,它来自check.jsp中的session.setAttribute,这样您就可以从登录中获取用户参数作为输入。我希望这有帮助。