【问题标题】:Servlet works only for one jsp formServlet 仅适用于一种 jsp 表单
【发布时间】:2014-08-13 17:51:35
【问题描述】:

我开始对 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);
    }
}

以上所有都可以正常工作,从数据库中选择用户并在从标题字段登录时确认用户帐户。

昨天我尝试创建一个类似的表单,它显示在主视图中,使用 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,但用户用户 = UserDB.selectUser(logEmailAddress);尽管用户存在,但返回 null!

有人知道会发生什么吗?我尝试实现一个新的 servlet,但结果相同!任何帮助将不胜感激,因为我花了很多深夜时间试图解决这个问题!

我使用的是 Windows 7 64、Netbeans、7.4 Java 1.7.0-51、Tomcat 7 和 Oracle 11.2XE

【问题讨论】:

  • 您是否删除了新logEmailAddress 字段中的初始空间?我注意到您将其默认为“”。
  • 现在我觉得自己很傻!!我本可以再花 5 个小时来弄清楚这件事,但可能还是看不到这个!谢谢

标签: java oracle jsp tomcat servlets


【解决方案1】:

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

<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">

【讨论】:

    【解决方案2】:

    正如你所指定的

    <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="">
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-31
      • 1970-01-01
      • 2021-12-28
      • 2016-06-08
      • 2017-05-13
      • 1970-01-01
      • 2011-01-23
      • 1970-01-01
      相关资源
      最近更新 更多