0

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

层次结构如下:

login.jsp --> check.jsp --> 欢迎.jsp

我必须根据登录的用户在 Welcome.jsp 上显示数据。我无法将用户参数作为显示用户特定数据的 sql 查询的输入获取到服务器。这是我的文件。

登录.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>

检查.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");
      }
      %>

欢迎.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>

任何人都可以看看这个,让我知道我在这里缺少什么:(除了发布的代码之外,请随时询问任何其他信息。

手指交叉..等待帮助!

干杯!

4

2 回答 2

0

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

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>

如果这不能解决问题,请使用应用程序的行为更新您的问题。你看到任何错误吗?您是否在任何地方记录异常?

于 2013-08-04T18:34:22.550 回答
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() 方法检索登录用户的会话属性。然后检查会话属性是否为空,然后重定向回用户,否则打印Welcome +用户。请注意,正在打印的用户来自 session.getAttribute,它是从 check.jsp 中的 session.setAttribute 获取的,这样您就可以从登录中获取用户参数作为输入。我希望这有帮助。

于 2013-08-06T00:22:40.583 回答