先说下我的项目文件放置 项目名:sheji项目里文件夹security和WEB-INFsecurity里的文件是register.jsp(注册页面)提交信息到UserServlet.java和registerSuccess.jsp(注册成功页面)
问题来了!!运行的时候提交register.jsp的信息给UserServlet.java居然说找不到register.jsp,而将request.getRequestDispatcher("/security/register.jsp").forward(request, response);这句的/security去掉却能提示用户***已经被注册(我事先在数据库中加了一条用户信息,明明register.jsp和registerSuccess.jsp是在registerSuccess.jsp下的),而注册数据库中没有的用户的时候跳转不过来了(跳转显示的是http://localhost:8080/biyesheji/user.do?method=register)空白页,显示不了注册成功,不知道为什么,搞了一下午的!
本来就看起来很简单的,不知道为什么。。
运行了半天有时候会出现this.process提示变量错误。
希望懂的指导下,非常感谢
下面是一些程序片段
UserServlet.java
public class UserServlet extends HttpServlet { private UserDao userDao = new UserDao(); /**
* 处理get请求.
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { this.process(request, response);
} /**
* 处理post请求
*/
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws ServletException, IOException { this.process(request, response);
}
public void process(HttpServletRequest request,HttpServletResponse response)
throws ServletException, IOException { String method = request.getParameter("method");
if(method==null){
return;
}
try {
// 分发请求
if ("register".equals(method)) {
this.register(request, response);
}
} catch(Exception ex) {
System.err.println(ex);
ex.printStackTrace();
}
} /**
* 注册新用户.
*/
public void register(HttpServletRequest request,HttpServletResponse response) throws Exception {
String username = request.getParameter("username");
String password = request.getParameter("password"); boolean userExists = userDao.checkExists(username);
if (userExists) {
request.setAttribute("error", "用户名:" + username + "已被使用了,请更换其他用户名注册。");
request.getRequestDispatcher("/security/register.jsp").forward(request, response);
} else {
UserBean userbean = new UserBean();
userbean.setUsername(username);
userbean.setPassword(password); userDao.save(userbean);
response.sendRedirect(request.getContextPath()+"/security/registerSuccess.jsp");
}
}UserDao.javapublic void save(UserBean userbean) throws Exception {
Connection conn = null;
PreparedStatement state = null; try {
conn = DbUtils.getConn();
state = conn.prepareStatement("insert into userguanli(username,password) values(?,?)");
state.setString(1, userbean.getUsername());
state.setString(2, userbean.getPassword());
state.executeUpdate();
} finally {
DbUtils.close(null, state, conn);
}
}
// ==
public boolean checkExists(String username) throws Exception {
Connection conn = null;
PreparedStatement state = null;
ResultSet rs = null; boolean userExists = false;
try {
conn = DbUtils.getConn();
state = conn.prepareStatement("select id from userguanli where username=?");
state.setString(1, username);
rs = state.executeQuery(); if (rs.next()) {
userExists = true; }
} finally {
DbUtils.close(rs, state, conn);
}
return userExists;
}
问题来了!!运行的时候提交register.jsp的信息给UserServlet.java居然说找不到register.jsp,而将request.getRequestDispatcher("/security/register.jsp").forward(request, response);这句的/security去掉却能提示用户***已经被注册(我事先在数据库中加了一条用户信息,明明register.jsp和registerSuccess.jsp是在registerSuccess.jsp下的),而注册数据库中没有的用户的时候跳转不过来了(跳转显示的是http://localhost:8080/biyesheji/user.do?method=register)空白页,显示不了注册成功,不知道为什么,搞了一下午的!
本来就看起来很简单的,不知道为什么。。
运行了半天有时候会出现this.process提示变量错误。
希望懂的指导下,非常感谢
下面是一些程序片段
UserServlet.java
public class UserServlet extends HttpServlet { private UserDao userDao = new UserDao(); /**
* 处理get请求.
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { this.process(request, response);
} /**
* 处理post请求
*/
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws ServletException, IOException { this.process(request, response);
}
public void process(HttpServletRequest request,HttpServletResponse response)
throws ServletException, IOException { String method = request.getParameter("method");
if(method==null){
return;
}
try {
// 分发请求
if ("register".equals(method)) {
this.register(request, response);
}
} catch(Exception ex) {
System.err.println(ex);
ex.printStackTrace();
}
} /**
* 注册新用户.
*/
public void register(HttpServletRequest request,HttpServletResponse response) throws Exception {
String username = request.getParameter("username");
String password = request.getParameter("password"); boolean userExists = userDao.checkExists(username);
if (userExists) {
request.setAttribute("error", "用户名:" + username + "已被使用了,请更换其他用户名注册。");
request.getRequestDispatcher("/security/register.jsp").forward(request, response);
} else {
UserBean userbean = new UserBean();
userbean.setUsername(username);
userbean.setPassword(password); userDao.save(userbean);
response.sendRedirect(request.getContextPath()+"/security/registerSuccess.jsp");
}
}UserDao.javapublic void save(UserBean userbean) throws Exception {
Connection conn = null;
PreparedStatement state = null; try {
conn = DbUtils.getConn();
state = conn.prepareStatement("insert into userguanli(username,password) values(?,?)");
state.setString(1, userbean.getUsername());
state.setString(2, userbean.getPassword());
state.executeUpdate();
} finally {
DbUtils.close(null, state, conn);
}
}
// ==
public boolean checkExists(String username) throws Exception {
Connection conn = null;
PreparedStatement state = null;
ResultSet rs = null; boolean userExists = false;
try {
conn = DbUtils.getConn();
state = conn.prepareStatement("select id from userguanli where username=?");
state.setString(1, username);
rs = state.executeQuery(); if (rs.next()) {
userExists = true; }
} finally {
DbUtils.close(rs, state, conn);
}
return userExists;
}
解决方案 »
- 这个SQL怎么写?
- tomcat 的问题
- 'org.apache.commons.logging.Log'
- 怎样给一个被include的页面传一个对象过去?
- 设计一个大用户量的login程序,看看大家有什么好的想法和建议。
- java上传文件生成缩图的问题!!急!急!急!急!
- 开发的工具如何在linux下运行?
- 用Weblogic和Jbuilder进行WebApp程序设计步骤详解
- 问一个入门级的问题JDBC
- jdk1.3+tomcat3.2+IIS5.0如何配置在IIS中运行jsp
- jsp运行时一个郁闷问题,一会成功,一会失败
- 请问JSP页面中java代码和Javascript代码之间怎么传递参数
如果是那样,相对路径中自然就不需要些/security了啊
但是另外个别人的项目,也是那么写的。为什么能运行过去呢???我的就不行
tomcat根目录/sheji/(文件夹security,文件夹WEB-INF)/security下有registerSuccess.jsp 跟 register.jspWEB-INF下有src文件夹(各有文件夹分别存java程序)
哎,不管怎么弄只能跳转到用户重复则提示却不能跳转到提示成功,也不能保存注册信息
我感觉是因为这个原因,所以才出现上面问的问题
public boolean checkExists(String username) throws Exception { ///觉得最好把 password 也传进来,
Connection conn = null;
PreparedStatement state = null;
ResultSet rs = null; boolean userExists = false;
try {
conn = DbUtils.getConn();
state = conn.prepareStatement("select id , password from userguanli where username=?");
state.setString(1, username);
rs = state.executeQuery(); if (rs.next()) {
sysout.. rs.getString("id"); //
if(password.equals(rs.getString("passord")
userExists = true; }
} finally {
DbUtils.close(rs, state, conn);
}
return userExists;
}你看下 id 是多少, 觉得这里出了问题,但不知道是什么问题, 你最好也把 userName打印出来