这一节我们在表单里增加name和password两个字段实现密码注册功能,并在注册成功后登录。
首先,需要在jsp页面的表单中增加两个input输入框,名称分别为name和password,类型为text和password。
在PersonController.java中,我们要接收这两个参数,所以PersonForm.java里增加这两个属性变量,并生成getter和setter方法。
private String name;
private String password;
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;
}
接收到这两个参数后,要存储到Person类的对象中以保存到数据库。因此,Person.java也需要增加这两个属性,并生成getter和setter方法。
private String name;
private String password;
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;
}
在PersonJdbcTemplateDaoImpl.java中要通过sql语句保存这两个属性,所以addPerson和findPersonById两个方法需要相应地修改。
public int add(Person person) throws Exception { int updatedRow = this.getJdbcTemplate().update("insert into new_table (id, nation, information, gender, hobby, name, password) values (?,?,?,?,?,?,?)", person.getId(), person.getNation(), person.getInformation(), person.getGender(), person.getHobby(), person.getName(), person.getPassword()); return updatedRow; }
public Person getPersonById(String id) throws Exception { Map personrMap = this.getJdbcTemplate().queryForMap("select * from new_table where id=? limit 1", id); Person person = new Person(); person.setId((Integer) personrMap.get("id")); person.setNation((String) personrMap.get("nation")); person.setInformation((String) personrMap.get("information")); person.setGender((String) personrMap.get("gender")); person.setHobby((String) personrMap.get("hobby")); person.setName((String) personrMap.get("name")); person.setPassword((String) personrMap.get("password")); return person; }最后,在PersonController.java中我们像上一节一样增加一个/reg方法,用于接收提交的信息实现注册。
@RequestMapping(value = "/reg", method = RequestMethod.POST) public Object reg(HttpServletRequest request, HttpServletResponse response, PersonForm personForm) { try { Person person = new Person(); person.setId(Integer.parseInt(personForm.getId())); person.setNation(personForm.getNation()); person.setInformation(personForm.getInformation()); person.setGender(personForm.getGender()); person.setHobby(personForm.getHobby()); person.setName(personForm.getName()); person.setPassword(personForm.getPassword()); personService.addPerson(person); Person personAdd = personService.findPerson(personForm.getId()); request.setAttribute("person", personAdd); } catch (Exception e) { e.printStackTrace(); } return "jsp/person.jsp"; }
数据表new_table要增加两个字段name和password,这里给出要执行的sql语句:
ALTER TABLE `newdb`.`new_table` ADD COLUMN `name` VARCHAR(255) NULL AFTER `hobby`, ADD COLUMN `password` VARCHAR(255) NULL AFTER `name`;
注册页面有了,下面再增加一个jsp页面用于登录功能的实现。
这个WebContent/loginForm.jsp中只用了两个输入框,名称为name和password,和一个提交按钮,点击按钮即是进行登录。
接下来在PersonController.java中,新增一个/login方法用于接收登录页面传过来的参数,并按照用户名name这个参数从数据库中查找对应的记录。把数据库中的记录转为Person类的对象后,使用request.getSession().setAttribute方法把person对象存在session对象中。
@RequestMapping(value = "/login", method = RequestMethod.POST) public Object login(HttpServletRequest request, HttpServletResponse response, PersonForm personForm) { try { Person person = personService.findPersonByName(personForm.getName()); request.getSession().setAttribute("person", person); } catch (Exception e) { e.printStackTrace(); } return "jsp/index.jsp"; }
当然,登录还需要做一些判断逻辑,比如简单地判断登录密码是否与数据库里存的密码一样。实现登录可能还有很多种方式,并且要做的逻辑不止判断密码,还有密码加密解密或刷新缓存等,这里只做简单的实现。
@RequestMapping(value = "/login", method = RequestMethod.POST) public Object login(HttpServletRequest request, HttpServletResponse response, PersonForm personForm) { try { Person person = personService.findPersonByName(personForm.getName()); if (person.getPassword().equals(personForm.getPassword())) { request.getSession().setAttribute("person", person); } } catch (Exception e) { e.printStackTrace(); } return "jsp/index.jsp"; }
这里的session对象就是一个有时间规定的会话对象。一般来说session中保存的对象只存活半小时,超过半小时就会自动清空。所以用户登录之后,在半小时之内如果没有任何操作,session会话会自动失效,也就是自动退出登录了。
登录之后,会跳到index.jsp中,这里index.jsp就是登录之后的主页,就像博客登录后看到的第一个页面。这个index.jsp会显示登录的用户信息。
<%=((Person)(request.getSession().getAttribute("person"))).getName() %>主页
<%=request.getSession().getAttribute("person") %>
这里还有一个问题,如何让index.jsp只有登录的人才可以进来。要实现这个功能,只需要加入一句判断就可以了。
<%if(request.getSession().getAttribute("person") !=null) { %>
这样在if语句之间的内容就只能在登录之后才可以看到。
Java视频教程