繁体   English   中英

Servlet仅适用于一种jsp形式

[英]Servlet works only for one jsp form

我开始对JSP和Servlet进行了一些实验。我有一个项目,可以让您创建一个帐户并将用户数据保存在Oracle db中。我创建了一种表单,该表单允许用户从webapps标头进行快速登录使用电子邮件和密码字段:

 <jsp:include page="/includes/header.jsp" />
 <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
 <link href="<c:url value='sources/css/logIn.css'/>" type="text/css" rel="stylesheet"   />

<form action="logIn" method="post">
       <table>
            <td>
                <div id="header_logo"> 
                      <a href="<c:url value='/welcome.jsp'/>"> 
                          <img src="<c:url value='/sources/images/logo.jpg'/>">
                      </a>
                </div>
            </td>
            <td>
                Dont have an account?
            </td> 
            <td>
               <a href ="create_account.jsp"> JOIN! </a></td>
            <td class="header_label" align="left">
              <div id ="header_email">
                  email Address<br>
                 <input type="text" name="logEmailAddress" size="15" value="" class="header_input">
              </div>
            </td>
            <td class="header_label" align="left">
                <div id="header_password">
                     password<br>
                     <input type="password" name="logPassword" size="15" value="" class="header_input">
                </div>
            </td>
            <td>
               <div id="header_submit">
                  <br><input id="sub" type="submit" value="Log In">
               </div>
             </td>
      </table>
   </form>

我使用post方法来调用LogInServlet,如下所示:

package appUsers;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

import business.User;
import data.UserDB;


public class LogInServlet extends HttpServlet {

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException 
{
        String logEmailAddress = request.getParameter("logEmailAddress");
        String logPassword = request.getParameter("logPassword");
        String url = "";
        String message ="";
        boolean isLogged=false;


        //debug message
        System.out.println("user input is emailaddress: " + logEmailAddress + " and password: " + logPassword);

        if (logEmailAddress.length()==0 || logPassword.length()==0)
        {
            message = "Please provide your email address and password";
            url = "/welcome.jsp";
        }


        User user = UserDB.selectUser(logEmailAddress);

        if (user!=null)
        {
            isLogged = logPassword.equals(user.getPassword());
            System.out.println(isLogged);

            if(isLogged)
            {
                 message = "You have succesfully loged in";
                 url = "/welcome.jsp";  


            }
            else
            {
                message = "Invalid password";
                url = "/welcome.jsp";
            }
        }
        else
        {
           message = "No such account";
           url = "/welcome.jsp"; 
        }

         HttpSession session = request.getSession();
         session.setAttribute("user", user);
         session.setAttribute("isLogged", isLogged);
         request.setAttribute("message",message);

        RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(url);
        dispatcher.forward(request, response);
}

}

从数据库中选择用户的函数:

用户用户= UserDB.selectUser(logEmailAddress);

是这样实现的:

public static User selectUser(String emailAddress)
    {
    ConnectionPool pool = ConnectionPool.getInstance();
    Connection connection = pool.getConnection();
    PreparedStatement ps = null;
    ResultSet rs = null;

    String query = "SELECT * FROM USERS " + "WHERE EmailAddress = ?";
    try
    {
        ps = connection.prepareStatement(query);
        ps.setString(1, emailAddress);
        rs = ps.executeQuery();
        User user = null;

        if (rs.next())
        {
            user = new User();
            user.setFirstName(rs.getString("FirstName"));
            user.setLastName(rs.getString("LastName"));
            user.setEmailAddress(rs.getString("EmailAddress"));
            user.setUserName(rs.getString("UserName"));
            user.setPassword(rs.getString("Password"));
            user.setUserType(rs.getString("Type"));
        }

        return user;
    }
    catch (SQLException e){
        e.printStackTrace();
        return null;
    }        
    finally
    {
        DBUtil.closeResultSet(rs);
        DBUtil.closePreparedStatement(ps);
        pool.freeConnection(connection);
    }
}

上面所有这些都能很好地工作,从DB中选择用户并在从标题字段登录时确认用户帐户。

昨天我尝试创建一个类似的表单,该表单使用post方法调用主Servlet时显示在主视图中:

<jsp:include page="/includes/header.jsp" />
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<link href="<c:url value='sources/css/logIn.css'/>" type="text/css" rel="stylesheet"   />

    <div id="log">
        <h1>Log in to Triptip</h1>

            <form action="logIn" method="post">
                 <table>
                    <tr class="spaceBetweenRows">
                             <td class="user_label" align="left">
                                 email Address<br>
                             </td>
                             <td>
                               <input class="user_input" type="text" name="logEmailAddress" value=" ">
                             </td>
                    </tr>
                    <tr>
                            <td class="user_label" align="left">
                                password<br>
                            </td>
                            <td>
                                 <input class="user_input" type="password" name="logPassword" value="">
                            </td>
                    </tr>
                    <tr>
                        <td>
                        </td>
                        <td align="right">
                            <br>
                            <input id="sub" type="submit" value="Log In">
                        </td>
                    </tr>
               </table>
            </form>
    </div>
</body>

尽管我已经确认电子邮件和密码属性已正确传递给Servlet,但User user = UserDB.selectUser(logEmailAddress); 尽管用户存在,但返回null!

任何人都知道会发生什么事吗? 我尝试实现一个新的servlet,但结果却是相同的!由于我花了大量的深夜时间来尝试解决这个问题,因此可以提供任何帮助!

我正在使用Windows 7 64,Netbeans,7.4 Java 1.7.0-51,Tomcat 7和Oracle 11.2XE

在代码中,您设置了一个包含空格的默认值-

<input class="user_input" type="text" name="logEmailAddress" value=" ">

根据您的评论,您没有注意到,仅添加了更多字符。 您不需要默认值就可以,

<input class="user_input" type="text" name="logEmailAddress" value="">

要不就

<input class="user_input" type="text" name="logEmailAddress">

如您所指定

<input class="user_input" type="text" name="logEmailAddress" value=" ">

因此,每当您在文本字段(例如abc输入一些值时

String email = request.getParameter("logEmailAddress");

电子邮件应为您​​提供initialspace+abc因此请更改

<input class="user_input" type="text" name="logEmailAddress" value=" ">

<input class="user_input" type="text" name="logEmailAddress" value="">

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM