黑马旅游网学习记录(五)
今天学习为登陆界面的设计。还是分成三层进行设计:Servlet,Dao,Service。
后端:LoginServlet
//1、首先在doget中加上这样一句
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
//2、在dopost中进行这样设计
//这里servlet的名字要注意。前端要和后端保持一致。
//@WebServlet("/loginServlet"),这里写的是logServlet,这样在前端跳转的时候,就必须是这个名字。
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1、从前端抓取数据
Map<String, String[]> parameterMap = request.getParameterMap();
//2、封装user对象
User user = new User();
try {
BeanUtils.populate(user,parameterMap);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
//3、开始在service层进行判断
UserService service = new UserServiceImpl();
User u = service.login(user);
ResultInfo resultInfo = new ResultInfo();
if(u == null){
//用户账号密码错误
resultInfo.setFlag(false);
resultInfo.setErrorMsg("账号或者密码输入错误");
}
//用户尚未激活的状态
if(u != null && !u.getStatus().equals("Y")){
resultInfo.setFlag(false);
resultInfo.setErrorMsg("用户尚未激活,请激活后重新登陆");
}
if(u != null && u.getStatus().equals("Y")){
resultInfo.setFlag(true);
System.out.println(u.getStatus());
}
//响应数据,使用json数据进行封装。
ObjectMapper objectMapper = new ObjectMapper();
response.setContentType("application/json;charset=utf-8");
objectMapper.writeValue(response.getOutputStream(),resultInfo);
}
后端:UserServiceImpl
//1、在接口中进行声明。这里不再赘述,可以在LoginServlet里面,写到service.login(user)的时候自动声明。
//2、在实现类中进行重写。
@Override
public User login(User user) {
return userDao.FindByUserNameAndUserPassword(user.getUsername(),user.getPassword());
}
//在写到这里的时候,可以直接快捷键alt+enter自动在Dao接口中声明。
后端:UserDaoImpl
//1、接口中的声明不再赘述。
//2、UserDaoImpl中的方法实现
@Override
public User FindByUserNameAndUserPassword(String username, String password) {
User user = null;
try {
String sql = "select * from tab_user where username = ? and password = ?";
user = template.queryForObject(sql, new BeanPropertyRowMapper<User>(User.class), username,password);
}catch (Exception e){
}
return user;
}
-------------------以上就是登陆界面的后端代码的书写----------------------
前端 login.html
<script>
$(function () {
//1、给登陆按钮绑定事件
$("#btn_sub").click(function () {
//2、发送ajax请求,提交表单数据
$.post("loginServlet",$("#loginForm").serialize(),function (data) {
//3、处理响应结果
if(data.flag){
location.href="index.html";
$("#errorMsg").html("登陆成功");
}
else{
$("#errorMsg").html(data.errorMsg);
}
})
})
})
</script>
姓名的正确显示
这个小东西也要分成前后端,以及后端三个模块来写。
前端 header.html
<script>
$(function () {
$.get("findUserServlet",{},function (data) {
//data: id,name
var msg = "欢迎回来," + data.name;
$("#span_name").html(msg);
});
});
</script>
后端:FindUserServlet
后端只有这一个代码,没有dao和service层。
//1、老规矩,现在doget里添上一句话
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
//2、dopost
//注意servlet的名字,和前端保持一致。
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1、从session中获取user对象
Object user = request.getSession().getAttribute("user");
//2、将user写回客户端
ObjectMapper objectMapper = new ObjectMapper();
response.setContentType("application/json;charset=utf-8");
objectMapper.writeValue(response.getOutputStream(),user);
System.out.println(user);
}