急!急!急!请教各位大神JSP问题request.getParameter()和getbytes()
问题截屏图片地址:http://my.csdn.net/dreamfly_123/album/detail/1210882
不知道是什么问题,还请各位大神帮帮忙,谢谢!
源代码:
<body>
<%--jsp:useBean id="pool" scope="application" class="chapter10.ConnPool"/--%>
<%
String name=new String(request.getParameter("name").getBytes("ISO8859_1"),"GBK");
String password1=new String(request.getParameter("password1").getBytes("ISO8859_1"),"GBK");
String password2=new String(request.getParameter("password2").getBytes("ISO8859_1"),"GBK");
String email=request.getParameter("email");
boolean valid=true; //标记提交信息是否合法
String err=""; //显示的错误信息
%>
<%
String driverName = "net.sourceforge.jtds.jdbc.Driver";
String dbURL="jdbc:jtds:sqlserver://localhost:1433;DatabaseName=cakeshop";
Driver driver = (Driver) Class.forName(driverName).newInstance();
DriverManager.registerDriver(driver);
Connection conn =DriverManager.getConnection(dbURL,"sa","sa");
Statement stmt=conn.createStatement();
String sql="select UserID from C_Users where UserID='"+name+"'";
ResultSet rs=stmt.executeQuery(sql);
//判断该用户名在数据库中是否已经存在
if(rs.next()){
//如果已经存在,输出错误提示信息
err+="该用户名已经存在!<br>";
valid=false;
}
else if(name.equals(" ")||password1.equals(" ")||password2.equals(" ")||email.equals(" ")){
//如果有某项为空,输出错误提示信息
err+="用户名、电子邮箱、密码及密码确认都不能为空!<br>";
valid=false;
}
//判断两次输入的密码是否相同
else if(!password1.equals(password2)){
//如果不同,输出错误提示信息
err+="两次输入的密码不同!<br>";
valid=false;
}
else{
//如果所输入的内容全部合法,则向数据库中插入该用户的信息
sql="inset into C_Users values('"+name+"','"+password1+"','"+email+"')";
stmt.executeUpdate(sql);
}
%>
<%-- @ include file="disconn.jsp"//释放数据库连接--%>
<%//如果合法,则跳转登录页面,否则输出非法错误信息
if(valid){
response.sendRedirect("login.jsp");
}
else{%>
<%=err%>
<a href="javascript:history.back();">返回</a>
<%}%>
</body>
------解决方案--------------------错误很明显,
空指针异常String name
String password1
String password2
分析应该有为null的,故getBytes会报
空指针异常
------解决方案--------------------你先打印request.getParameter("name") == null;我估计肯是true,你要转码之前,必须判断是否为null
------解决方案--------------------空指针异常,调试一下应该可以看到是哪出的问题。
猜测应该是你提交到此页面的表单中有某个<input />中没有设置 name="xx" 这样request.getParameter("name")就取不到值。
你的代码还可以这样:
专门定义一个转码的方法方便些
/**
* 汉字GET方法解码
*
* @param str
* @return
*/
public String toChinese(String str) {
try {
return new String(str.getBytes("iso-8859-1"), "utf-8");
} catch (Unsupported
EncodingException e) {
e.printStackTrace();
}
return str;
}
另外,用户验证用javascript脚本 和 Ajax不是更好。
------解决方案--------------------