jsp新手求教, 求帮忙

没有梦想-何必远方
博客专家认证
2014-01-23 10:37:28
且看这个小程序,问题在最后

//登录判断用户存在方法:
public User login() throws SQLException{
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
User user = null;

conn=DBConnection.getConnection();
String sql = "select * from [user] where name = ? and password = ?";
ps = conn.prepareStatement(sql);
ps.setString(1,name);
ps.setString(2,password);
rs=ps.executeQuery();
while(rs.next()){
user = new User();
user.setId(rs.getInt("id"));
user.setName(rs.getString("name"));
user.setPassword(rs.getString("password"));
user.setEmail(rs.getString("email"));
user.setAge(rs.getInt("age"));
user.setBirthday(rs.getDate("birthday"));
}
conn.close();
ps.close();
return user;
}
以下是登录处理界面,点submit跳转过来
<body>
<jsp:useBean id = "user" class = "jspjavabean.User"/>
<jsp:setProperty name = "user" property = "*" />
<%

user = user.login();
if(user!=null){
session.setAttribute("user", user);
%>

<jsp:forward page = "user.jsp"/>
<%
}
else{
%>
<jsp:forward page = "loginFail.jsp"/>
<%
}
%>
</body>
问题是:为什么user = user.login();这句不能接收信息? 每次都是null?
...全文
222 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
a415473410 2014-01-24
  • 打赏
  • 举报
回复
哦,还有这段: if(user!=null){ session.setAttribute("user", user); 改为: if(user.login()!=null){ session.setAttribute("user", user.login); 楼主的命名规则。。。多多改进吧
a415473410 2014-01-24
  • 打赏
  • 举报
回复
再补充一点,请在提问时贴完整代码
a415473410 2014-01-24
  • 打赏
  • 举报
回复
有个疑问:name和password 这两个变量没有定义怎么传过去的? 另外: 1.请把 User 对象的初始化 (user = new User(); )放到rs外面,否则rs循环多次创建对象浪费资源(因不管实例化最后只返回最后实例化的对象)。 2.请在关闭数据库链接时用遵循后开先关的顺序,即如下顺序: rs.close(); ps.close(); conn.close(); 3.连接数据库应该是最底层的方法,不要在方法上抛出错误,应在内部try{}catch{}。 4.关闭数据库连接前可能报错,然后打开的连接没有关闭,可能导致内存溢出。应在报错的情况下也关闭连接, 最佳实践如下: try{ ... }catch{ ... }finally{ try{ rs.close(); }catch{...} try{ ps.close(); }catch{...} try{ conn.close(); }catch{...} } 5.jsp中user变量两次声明,相信不是楼主想要的。 第一次声明把user变量实例化为User对象 第二次又把user变量声明为null了 相当于java代码: User user = new User(); user = null; user = user.login(); 此处user.login()当然为null 所以楼主把这行<jsp:setProperty name = "user" property = "*" /> 删掉,这行user = user.login()删掉,应该就能取到正确值了。 6.还要再啰嗦一句,楼主的这个代码应该是练习,也只能作为练习, 因为在jsp中连接数据库是非常不好的,因为其他页面无法取到这次的值, 如果其他页面还是需要用户信息,还需要再次查询数据库,还有其他安全方面,错误处理方面都有问题。 在正常的项目中或思维中,用户信息应该放到session中。
fw347969680 2014-01-24
  • 打赏
  • 举报
回复
User类和登陆页面的完整代码也贴下吧。
fw347969680 2014-01-24
  • 打赏
  • 举报
回复
引用 6 楼 fw347969680 的回复:
[quote=引用 5 楼 u011250851 的回复:] [quote=引用 4 楼 fw347969680 的回复:] [quote=引用 3 楼 fw347969680 的回复:] <jsp:useBean id = "user" class = "jspjavabean.User"/> 你的user是在哪里设置的?没有设置会有值?
你在登陆页面输完数据就直接跳转到第二个页面,中间没有任何处理,用 <jsp:useBean id = "user" class = "jspjavabean.User"/>根本取不到任何值。逻辑有点问题。[/quote] <jsp:setProperty name = "user" property = "*" />这一句话是赋值的啊 , 把输入中的所有和user类相同的参数赋值[/quote] 哦哦,没注意。<jsp:useBean id = "user" class = "jspjavabean.User"/>的scope属性默认值是page,而你的是从上一个页面传过来的值,所以还是赋不了值。[/quote] 好像还是回答错了。。我先调下代码吧。
fw347969680 2014-01-24
  • 打赏
  • 举报
回复
引用 5 楼 u011250851 的回复:
[quote=引用 4 楼 fw347969680 的回复:] [quote=引用 3 楼 fw347969680 的回复:] <jsp:useBean id = "user" class = "jspjavabean.User"/> 你的user是在哪里设置的?没有设置会有值?
你在登陆页面输完数据就直接跳转到第二个页面,中间没有任何处理,用 <jsp:useBean id = "user" class = "jspjavabean.User"/>根本取不到任何值。逻辑有点问题。[/quote] <jsp:setProperty name = "user" property = "*" />这一句话是赋值的啊 , 把输入中的所有和user类相同的参数赋值[/quote] 哦哦,没注意。<jsp:useBean id = "user" class = "jspjavabean.User"/>的scope属性默认值是page,而你的是从上一个页面传过来的值,所以还是赋不了值。
  • 打赏
  • 举报
回复
引用 4 楼 fw347969680 的回复:
[quote=引用 3 楼 fw347969680 的回复:] <jsp:useBean id = "user" class = "jspjavabean.User"/> 你的user是在哪里设置的?没有设置会有值?
你在登陆页面输完数据就直接跳转到第二个页面,中间没有任何处理,用 <jsp:useBean id = "user" class = "jspjavabean.User"/>根本取不到任何值。逻辑有点问题。[/quote] <jsp:setProperty name = "user" property = "*" />这一句话是赋值的啊 , 把输入中的所有和user类相同的参数赋值
fw347969680 2014-01-24
  • 打赏
  • 举报
回复
引用 3 楼 fw347969680 的回复:
<jsp:useBean id = "user" class = "jspjavabean.User"/> 你的user是在哪里设置的?没有设置会有值?
你在登陆页面输完数据就直接跳转到第二个页面,中间没有任何处理,用 <jsp:useBean id = "user" class = "jspjavabean.User"/>根本取不到任何值。逻辑有点问题。
fw347969680 2014-01-24
  • 打赏
  • 举报
回复
<jsp:useBean id = "user" class = "jspjavabean.User"/> 你的user是在哪里设置的?没有设置会有值?
  • 打赏
  • 举报
回复
引用 1 楼 heaimnmn 的回复:
jsp里面调用的方法有没有配置struts,要配置了相应struts才能返回相应的,或者没用struts框架的话,要在sevelt里面生成user login这个方法的归属类
有这个类……
哎,真难 2014-01-24
  • 打赏
  • 举报
回复
jsp里面调用的方法有没有配置struts,要配置了相应struts才能返回相应的,或者没用struts框架的话,要在sevelt里面生成user login这个方法的归属类
fw347969680 2014-01-24
  • 打赏
  • 举报
回复
引用 18 楼 u011250851 的回复:
[quote=引用 17 楼 fw347969680 的回复:] 把我上面提到的问题改掉,然后 if (user.login()!= null) { session.setAttribute("newUser", user.login()); 这个地方改掉就OK了。
非常非常感谢!!!你真是太好了 问题终于解决了,就是这个 method拼写的问题! 郁闷了两天终于结束了…… 真的太谢谢您了[/quote] 我把method改为你原来的代码,但是不能重现你的错误。你是改了method就可以了吗?
  • 打赏
  • 举报
回复
引用 17 楼 fw347969680 的回复:
把我上面提到的问题改掉,然后 if (user.login()!= null) { session.setAttribute("newUser", user.login()); 这个地方改掉就OK了。
非常非常感谢!!!你真是太好了 问题终于解决了,就是这个 method拼写的问题! 郁闷了两天终于结束了…… 真的太谢谢您了
fw347969680 2014-01-24
  • 打赏
  • 举报
回复
把我上面提到的问题改掉,然后 if (user.login()!= null) { session.setAttribute("newUser", user.login()); 这个地方改掉就OK了。
fw347969680 2014-01-24
  • 打赏
  • 举报
回复
还有这里,<input type="password" password="password">,应该是name="password" user = user.login();%>,%>是多余的,去掉。
fw347969680 2014-01-24
  • 打赏
  • 举报
回复
引用 14 楼 u011250851 的回复:

public class User {
	private int id;
	private String name;
	private String password;
	private String email;
	private int age;
	private Date birthday;     

	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
	
	
	public User(){
		
	}
	public User(String name, String password){
		this.name = name;
		this.password = password;
	}
	//1、用户登录使用,判断是否存在用户
	public User login() throws SQLException{
		Connection conn = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		User user = null;
		try{
			conn=DBConnection.getConnection();
			String sql = "select * from [user] where name = ? and password = ?";
			ps = conn.prepareStatement(sql);
			ps.setString(1,name);
			ps.setString(2,password);
			rs=ps.executeQuery();
			while(rs.next()){
				user = new User();
				user.setId(rs.getInt("id"));
				user.setName(rs.getString("name"));
				user.setPassword(rs.getString("password"));
				user.setEmail(rs.getString("email"));
				user.setAge(rs.getInt("age"));
				user.setBirthday(rs.getDate("birthday"));
			}
		
		}finally{
			DBConnection.close(rs, ps, conn);
		}
		return user;
	}
}

jsp登录处理:login_do.jsp

<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>

<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=GB18030">
    <title>登录处理页面</title>
  </head>
  <body>
	 <jsp:useBean id = "user" class = "jspjavabean.User"/>
	 <jsp:setProperty name = "user" property = "*" />
     <%	
		user = user.login();
		%>
		if(user!=null){
		session.setAttribute("user", user);
	 %>		
		<jsp:forward page = "user.jsp"/>
	 <%
	 }
		else{
	 %>
		<jsp:forward page = "loginFail.jsp"/>
	 <%
	 }
	 %>
	 
  </body>
</html>


jsp登录:login.jsp

<%@ page language="java" contentType="text/html; charset=GB18030"
    pageEncoding="UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>用户登录</title>
</head>
<body>
<center>
<form action = "login_do.jsp" methon = "post">
<h2>用户登录</h2><br>
<table width="500" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
	<td>用户名 :</td>
	<td>
	<input type = "text" name = "name"><br>
	</td>
</tr>
<tr>
    <td>密码: </td>
    <td>
    <input type = "password" password = "password"><br></td>
    </td>
</tr>
<tr>
<td></td>
	<td>     <input type = "submit" value = "登录"> </td>
</tr>
</h3>
<tr>
<td></td>
</tr>
<tr>
	<td><h4>还没注册?</td><td><a href = "register.jsp">马上注册</a></h4></td>
</tr>
</table>
</form>
</center>
</body>
</html>
methon = "post"这个地方是method吧,细节问题,注意下。
  • 打赏
  • 举报
回复

public class User {
	private int id;
	private String name;
	private String password;
	private String email;
	private int age;
	private Date birthday;     

	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
	
	
	public User(){
		
	}
	public User(String name, String password){
		this.name = name;
		this.password = password;
	}
	//1、用户登录使用,判断是否存在用户
	public User login() throws SQLException{
		Connection conn = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		User user = null;
		try{
			conn=DBConnection.getConnection();
			String sql = "select * from [user] where name = ? and password = ?";
			ps = conn.prepareStatement(sql);
			ps.setString(1,name);
			ps.setString(2,password);
			rs=ps.executeQuery();
			while(rs.next()){
				user = new User();
				user.setId(rs.getInt("id"));
				user.setName(rs.getString("name"));
				user.setPassword(rs.getString("password"));
				user.setEmail(rs.getString("email"));
				user.setAge(rs.getInt("age"));
				user.setBirthday(rs.getDate("birthday"));
			}
		
		}finally{
			DBConnection.close(rs, ps, conn);
		}
		return user;
	}
}

jsp登录处理:login_do.jsp

<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>

<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=GB18030">
    <title>登录处理页面</title>
  </head>
  <body>
	 <jsp:useBean id = "user" class = "jspjavabean.User"/>
	 <jsp:setProperty name = "user" property = "*" />
     <%	
		user = user.login();
		%>
		if(user!=null){
		session.setAttribute("user", user);
	 %>		
		<jsp:forward page = "user.jsp"/>
	 <%
	 }
		else{
	 %>
		<jsp:forward page = "loginFail.jsp"/>
	 <%
	 }
	 %>
	 
  </body>
</html>


jsp登录:login.jsp

<%@ page language="java" contentType="text/html; charset=GB18030"
    pageEncoding="UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>用户登录</title>
</head>
<body>
<center>
<form action = "login_do.jsp" methon = "post">
<h2>用户登录</h2><br>
<table width="500" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
	<td>用户名 :</td>
	<td>
	<input type = "text" name = "name"><br>
	</td>
</tr>
<tr>
    <td>密码: </td>
    <td>
    <input type = "password" password = "password"><br></td>
    </td>
</tr>
<tr>
<td></td>
	<td>     <input type = "submit" value = "登录"> </td>
</tr>
</h3>
<tr>
<td></td>
</tr>
<tr>
	<td><h4>还没注册?</td><td><a href = "register.jsp">马上注册</a></h4></td>
</tr>
</table>
</form>
</center>
</body>
</html>
  • 打赏
  • 举报
回复
引用 8 楼 fw347969680 的回复:
User类和登陆页面的完整代码也贴下吧。
嗯 我把代码贴下来了, 在帮我看看吧, 是一个空指针的问题, 真搞不懂是为什么,唉……
  • 打赏
  • 举报
回复
引用 9 楼 a415473410 的回复:
有个疑问:name和password 这两个变量没有定义怎么传过去的? 另外: 1.请把 User 对象的初始化 (user = new User(); )放到rs外面,否则rs循环多次创建对象浪费资源(因不管实例化最后只返回最后实例化的对象)。 2.请在关闭数据库链接时用遵循后开先关的顺序,即如下顺序: rs.close(); ps.close(); conn.close(); 3.连接数据库应该是最底层的方法,不要在方法上抛出错误,应在内部try{}catch{}。 4.关闭数据库连接前可能报错,然后打开的连接没有关闭,可能导致内存溢出。应在报错的情况下也关闭连接, 最佳实践如下: try{ ... }catch{ ... }finally{ try{ rs.close(); }catch{...} try{ ps.close(); }catch{...} try{ conn.close(); }catch{...} } 5.jsp中user变量两次声明,相信不是楼主想要的。 第一次声明把user变量实例化为User对象 第二次又把user变量声明为null了 相当于java代码: User user = new User(); user = null; user = user.login(); 此处user.login()当然为null 所以楼主把这行<jsp:setProperty name = "user" property = "*" /> 删掉,这行user = user.login()删掉,应该就能取到正确值了。 6.还要再啰嗦一句,楼主的这个代码应该是练习,也只能作为练习, 因为在jsp中连接数据库是非常不好的,因为其他页面无法取到这次的值, 如果其他页面还是需要用户信息,还需要再次查询数据库,还有其他安全方面,错误处理方面都有问题。 在正常的项目中或思维中,用户信息应该放到session中。
谢谢您的细心回答 数据库关闭资源对象顺序确实错了,已改进 我这个问题是一个空指针的问题,执行user = user.login(); 这句时已经给user赋值了啊,不懂为什么还是空呢 <jsp:setProperty name = "user" property = "*" />这一句是给user赋值的啊,怎么能删去? 我把完整代码贴在下面, 您在帮我看看吧

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧