我写了一个简单的servlet,在doPost中我从jspand获得了用户名和密码,通过将用户输入的密码发送到数据库(mysql)来验证用户。我正确地获取了数据,并且我将用户重定向到另一个名为welcome.jsp的jsp页面。
我的问题是,我写了这个方法public String getUser(){return userNmae;};我把它放在dopost方法之外,但它返回null。我已经将变量userNmae声明为类变量,当我调试时,变量在dopost方法中包含一个值,但在dopost方法之外它是null。为什么它在dopost方法之外是null?
我在welcome.jsp页面中调用了getUser()方法。 这是我的代码
public class UIclass extends HttpServlet {
public UIclass() { };
private String passWord = null;
private String userNmae = null;
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String name = request.getParameter("userName");
String password = request.getParameter("password");
Connection connection = null;
try {
connection = Connections.getConnection();
java.sql.PreparedStatement statement = connection.prepareStatement("SELECT PASSWORD,USERNAME FROM LOGIN where username =?");
statement.setString(1, name);
ResultSet resultset = statement.executeQuery();
while (resultset.next()) {
passWord = resultset.getString("PASSWORD");
userNmae = resultset.getString("USERNAME");
}
} catch (Exception e) {
// TODO: handle exception
} finally {
if (connection != null)
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
};
}
if (passWord.equalsIgnoreCase(password)) {
RequestDispatcher rd = request.getRequestDispatcher("welcome.jsp");
rd.forward(request, response);
}
}
public String getUser() {
return userNmae;
}
}
答案 0 :(得分:0)
我将通过向您提供代码实际执行情况的更简单示例来回答:
Bottle bottle1 = new Bottle();
bottle1.setMessage("Hi there");
Bottle bottle2 = new Bottle();
System.out.println(bottle2.getMessage());
您希望此程序显示什么?我期待null
,因为你在bottle1上设置了一条消息,并从bottle2读取消息。这是两个不同的瓶子。当你在瓶子里放一条信息时,信息就在那个瓶子里,而不是在其他瓶子里。
你的代码做同样的事情。
UIclass
的实例(唯一)。这相当于在我的示例中创建第一个瓶子。bottle1.setMessage("Hi there")
。容器执行JSP,其中包含代码
<jsp:useBean id="uiclass" class="com.servlet.UIclass" scope="request">
这将创建一个新的UIClass实例。它相当于在我的例子中创建第二个瓶子。
uiclass.getUser()
。这相当于在我的示例中从第二个瓶子获取消息。您的代码中存在许多错误:
request.getSession().setAttribute("userName", userName)
JSP应该使用JSP EL和JSTL来访问servlet中存储在请求或会话中的bean:
<c:out value="${userName}"/>