javaweb黑马旅游网站
环境的搭建
第一步:先搭建maven环境,使用maven创建javaweb项目。Idea环境下创建具体步骤为:
- File-new-Module-设置项目组和项目名称和项目保存位置
- File-setting-Maven-设置maven文件配置和仓库所在位置,建立自动映射
- 选中项目在Facets里面添加webinf要放在main\webapp下面
第二步:配置相关文件
- 先导入相关工具类和前端页面模板还有配置文件具体目录如下:
- 设置好mybatis的相关配置,包括数据库位置和用户名密码。
用户模块的搭建
用户模块
实现的功能:用户注册,用户登录,用户登出
**步骤分析:**注册用了ajax技术获取表单信息用向服务器发送请求,这里用到的新技术是用序列化获取表单的所有参数的值。var params = $("#registerForm").serialize();
值得注意的一点是:这里的表单不能使用type=submit,因为表单提交是属于同步发送请求,所以前端页面的表单可以使用普通按钮绑定事件的方法来提交ajax异步发送请求。
web层获取到ajax的请求参数以后使用工具类BeanUtils进行封装,BeanUtils.populate(user,map);
参数传给Service层然后service层连接数据库,把封装好的javabean插入到数据库中,这里的密码使用工具类进行了加密:user.setPassword(Md5Util.getMD5(user.getPassword()));
在进行注册的时候对用户名、密码、邮箱、手机号码等信息使用jquery、ajax技术进行了合法性 校验,其中校验用户名需要发送ajax去数据库查询这个用户名是否存在,其他的信息则直接使用正则表达式进行校验即可。
用户登录的时候先是前端通过ajax传递参数:用户名和密码,验证码,这三个直接使用request.getparameter去获取请求参数即可,系统的验证码是工具类生成好的,绑定了点击事件和页面加载事件:
并且每次生成工具类都会把它放到session会话中,web层进行校验的时候直接进行调用即可。
这里在进行校验的时候除了要向前台发送是否校验通过,还要发送校验的信息,所以要返回一个javabean,这个javavean封装了返回是否成功的信息和返回失败的信息还有成功的信息。
public class ResultInfo {
private boolean flag; //表示服务器的执行结果
private String errorMsg; // 存放错误信息
private Object successData;
}
由于是javabean,ajax需要接收的返回值是json类型的数据所以web层调用service层进行查询后要对javabean进行封装,使用工具类:
String s = objectMapper.writeValueAsString(resultInfo);
response.getWriter().print(s);
由于验证码和用户名密码校验都需要返回resultinfo信息,所以把这段代码抽取出来直接放在resultinfo里面进行调用即可。
public String toJson(Object obj) throws JsonProcessingException {
ObjectMapper om = new ObjectMapper();
String jsonStr = om.writeValueAsString(obj);
return jsonStr;
}
最后要把用户的信息放入到session作用域中方便回显读取,这里为了防止用户清除cookie导致读取不到session,所以要对cookie进行设置指定时间覆盖原来的绑定的cookie
Cookie cookie = new Cookie("JSESSIONID", session1.getId());
cookie.setMaxAge(30*60);
cookie.setPath(request.getContextPath());
response.addCookie(cookie);
接下来是用户信息的回显模块,每一次进行头页面加载的时候,都得调用ajax去web层查询session中是否存储 了用户信息,如果有的话就回显回页面。
最后一个是登出模块,在表单中进行请求,清除用户的session信息后跳转回到首页。
request.getSession().invalidate();
response.sendRedirect(request.getContextPath());
最后全部完成后进入代码优化阶段:
这里为了防止servlet的代码进行太多的方法判断对代码逻辑进行了抽取:提交过来的action方法必须和servet要调用的方法一致,新建一个BaseServlet类继承了HttpServlet,再让UserServlet去继承这个类,当请求过来的时候会发现UserServlet没有doget/dopost方法,就去找他的父类,由BaseServlet使用反射技术进行方法的调用。
try {
String action = req.getParameter("action");
Class clazz = this.getClass();
Method method = clazz.getMethod(action, HttpServletRequest.class, HttpServletResponse.class);
method.invoke(this,req,resp);
} catch (Exception e) {
e.printStackTrace();
}
这里的this指的是谁调用方法,this指的就是哪个对象。注:每次请求过来的时候UserServlet都是会创建一个对象的。
下一篇: java Socket UDP实例详解