JSP+Servlet实现注册模块

在实现注册模块时遇到了很多坑,在这里记录一下。


技术内容很简单,通过form表单向后台提交一组String类型的键值对,然后我们进行获取。并将其封装进入实体类。

在开始搭建环境时,按照MVC三层架构进行搭建,主要是servlet,service,dao层,各自进行各自管理。

这里遇到的第一个坑是关于Date类型转换的,通过request所获取到的都是String类型,在向数据库进行封装时需要进行转换。开始没有注意报了convertException,这里可以简单通过simpleDateFormat类指定格式进行转换。

        //手动获取
	String birthday = request.getParameter("birthday");
	//进行转换
	SimpleDateFormat sim = new SimpleDateFormat("yyyy-MM-dd");
	try {
		Date DateBirthday = sim.parse(birthday);
		user.setBirthday(DateBirthday);
	} catch (ParseException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}

后来又碰到了一个很奇怪的异常。

Can't get hostname for your address

开始时候以为自己数据库的地址,用户名端口号写错了,检查后没有找到错误。然后去网上看,有博客说这个是关于MySql设置的错误,Mysql有本地系统和网络服务,如果设置为网络服务则需要加域名等其他信息,然后我尝试从Windows的服务中修改为本地系统。问题解决。

java.lang.reflect.InvocationTargetException

再开始的时候尝试用BeanUtils通过反射向实体类中封装数据,希望代码更加简洁,但是会多次出现该异常,后来放弃了BeanUtils,改为通过request手动获取数据封装,问题解决,但是代码会冗余。之后看看能不能解决这个问题。

感觉应该是内部反射造成的原因.

这是Servlet代码,所有方法返回值都为String,该返回值可以直接跳转一个页面

扫描二维码关注公众号,回复: 3323590 查看本文章
public class UserServlet extends BaseServlet {
	
	public String registUI(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		return "/jsp/register.jsp";
	}
	
	public String userRegist(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		//创建传递对象
		User user = new User();
		/*
		 * 对不存在的字段进行默认填充
		 * uid telephone state 等等
		 */
		//设置用户ID
		String uid = UUIDUtils.getId();
		user.setUid(uid);
		String name = request.getParameter("name");
		user.setName(name);
		String password = request.getParameter("password");
		user.setPassword(password);
		String username = request.getParameter("username");
		user.setUsername(username);
		String email = request.getParameter("email");
		user.setEmail(email);
		String sex = request.getParameter("sex");
		user.setSex(sex);
		//设置初始状态,初始为0,未激活
		user.setState(0);
		//设置激活码,该激活码需要保持,发送邮件时附带该激活码
		String code = UUIDUtils.getCode();
		user.setCode(code);
		String telephone = request.getParameter("telephone");
		user.setTelephone(telephone);
		//手动获取
		String birthday = request.getParameter("birthday");
		//进行转换
		SimpleDateFormat sim = new SimpleDateFormat("yyyy-MM-dd");
		try {
			Date DateBirthday = sim.parse(birthday);
			user.setBirthday(DateBirthday);
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.out.println(uid+" "+name+" "+password+" "+username+" "+email+" "+sex+" "+birthday);

		
		/*
		 * 开始调用service层的方法,并通过返回值进行判断是否注册成功
		 */
		UserService service = new UserServiceImp();
		boolean isSuccess = service.userRegist(user);
		if(isSuccess == true) {
			request.setAttribute("msg", "注册成功");
		}else {
			request.setAttribute("msg", "注册失败,请重试");
		}
		return "/jsp/index.jsp";
	}
	
	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

这里代码为Jsp代码

<div class="col-md-8" style="background:#fff;padding:40px 80px;margin:30px;border:7px solid #ccc;">
		<font>会员注册</font>USER REGISTER
		<form class="form-horizontal" style="margin-top:5px;" action="${pageContext.request.contextPath}/UserServlet?method=userRegist" method="post">
			 <div class="form-group">
			    <label for="username" class="col-sm-2 control-label">用户名</label>
			    <div class="col-sm-6">
			      <input type="text" class="form-control" id="username" placeholder="请输入用户名" name="username">
			    </div>
			  </div>
			   <div class="form-group">
			    <label for="inputPassword3" class="col-sm-2 control-label">密码</label>
			    <div class="col-sm-6">
			      <input type="password" class="form-control" id="inputPassword3" placeholder="请输入密码" name="password">
			    </div>
			  </div>
			   <div class="form-group">
			    <label for="confirmpwd" class="col-sm-2 control-label">确认密码</label>
			    <div class="col-sm-6">
			      <input type="password" class="form-control" id="confirmpwd" placeholder="请输入确认密码" name="repassword">
			    </div>
			  </div>
			  <div class="form-group">
			    <label for="inputEmail3" class="col-sm-2 control-label">Email</label>
			    <div class="col-sm-6">
			      <input type="email" class="form-control" id="inputEmail3" placeholder="Email" name="email">
			    </div>
			  </div>
			 <div class="form-group">
			    <label for="usercaption" class="col-sm-2 control-label">姓名</label>
			    <div class="col-sm-6">
			      <input type="text" class="form-control" id="usercaption" placeholder="请输入姓名" name="name">
			    </div>
			  </div>
			  <div class="form-group opt">  
			  <label for="inlineRadio1" class="col-sm-2 control-label">性别</label>  
			  <div class="col-sm-6">
			    <label class="radio-inline">
			  <input type="radio" name="sex" id="inlineRadio1" value="男" checked="checked"> 男
			</label>
			<label class="radio-inline">
			  <input type="radio" name="sex" id="inlineRadio2" value="女"> 女
			</label>
			</div>
			  </div>		
			  <div class="form-group">
			    <label for="date" class="col-sm-2 control-label">出生日期</label>
			    <div class="col-sm-6">
			      <input type="date" class="form-control" name="birthday" >		      
			    </div>
			  </div>
			  
			  <div class="form-group">
			    <label for="date" class="col-sm-2 control-label">电话号码</label>
			    <div class="col-sm-6">
			      <input type="text" class="form-control" name="telephone" >		      
			    </div>
			  </div>
			  
			  <div class="form-group">
			    <label for="date" class="col-sm-2 control-label">验证码</label>
			    <div class="col-sm-3">
			      <input type="text" class="form-control"  >
			      
			    </div>
			    <div class="col-sm-2">
			    <img src="${pageContext.request.contextPath}/img/captcha.jhtml"/>
			    </div>
			    
			  </div>
			 
			  <div class="form-group">
			    <div class="col-sm-offset-2 col-sm-10">
			      <input type="submit"  width="100" value="注册" name="submit" border="0"
				    style="background: url('${pageContext.request.contextPath}/img/register.gif') no-repeat scroll 0 0 rgba(0, 0, 0, 0);
				    height:35px;width:100px;color:white;">
			    </div>
			  </div>
			</form>
	</div>

由于service并没有过多的操作,主要体现了dao层,这里用了JDBCUtils

@Override
	public int userRegist(User user) {
		// TODO Auto-generated method stub
		String sql = "INSERT INTO USER VALUES(?,?,?,?,?,?,?,?,?,?)";
		QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());
		Object[] params = { user.getUid(), user.getUsername(), user.getPassword(), user.getName(), user.getEmail(),
				user.getTelephone(), user.getBirthday(), user.getSex(), user.getState(), user.getCode() };
		int n = 0;
		try {
			
			n = qr.update(sql, params);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return n;
	}

猜你喜欢

转载自blog.csdn.net/weixin_41582192/article/details/82763418