目录
一、软件架构
软件架构(software architecture)是一系列相关的抽象模式,用于指导大型软件系统软各个方面的设计。软件架构是一个系统的草图。软件体系结构是构建计算机软件实践的基础。
进行项目前,先确定软件架构,可以更清晰明了得进行编写,在此次案例中使用了三层架构。
三层架构:
1. 界面层(表示层):用户看的得界面。用户可以通过界面上的组件和服务器进行交互
2. 业务逻辑层:处理业务逻辑的。
3. 数据访问层:操作数据存储文件。
项目体现:
二、代码实现及分析
1、登录功能
登录页面的html代码和验证码的servlet代码就不详细展示了,需要注意的是验证码的获取以及点击刷新的实现。
验证码jsp代码展示:
<div class="form-inline">
<label for="vcode">验证码:</label>
<input type="text" name="verifycode" class="form-control" id="verifycode" placeholder="请输入验证码"
style="width: 120px;"/>
<a href="javascript:refreshCode()">
<img src="${pageContext.request.contextPath}/checkCodeServlet" title="看不清点击刷新" id="vcode"/>
</a>
</div>
<script type="text/javascript">
function refreshCode() {
//获取验证码图片对象
var vcode = document.getElementById("vcode");
//设置src属性,加上时间戳
vcode.src = "${pageContext.request.contextPath}/checkCodeServlet?time=" + new Date().getTime();
}
</script>
LoginServlet分析:
1、确保验证码的一次性,登录成功或者登录失败后都需要删除验证码。
//确保验证码一次性,使用完就删除
session.removeAttribute("CHECKCODE_SERVER");
2、存储提示信息到request域,转发到登录页面。(存储到request域就使用转发)
//提示信息
request.setAttribute("login_msg", "验证码错误!");
//转发到登录页面
request.getRequestDispatcher("/login.jsp").forward(request, response);
3、调用service方法与数据库进行比对,如果成功需要把数据存储到session域并重定向到index界面。(session域存储就使用重定向)
//登录成功将user存储到session
session.setAttribute("user", loginUser);
//重定向到头页面
response.sendRedirect(request.getContextPath() + "/index.jsp");
LoginServlet代码展示:
//设置post请求体编码
request.setCharacterEncoding("utf-8");
//获取输入的验证码
String verifycode = request.getParameter("verifycode");
//获取生成的验证码进行校验
HttpSession session = request.getSession();
String checkcode_server = (String) session.getAttribute("CHECKCODE_SERVER");
//确保验证码一次性,使用完就删除
session.removeAttribute("CHECKCODE_SERVER");
if (!checkcode_server.equalsIgnoreCase(verifycode)) {
//提示信息
request.setAttribute("login_msg", "验证码错误!");
//转发到登录页面
request.getRequestDispatcher("/login.jsp").forward(request, response);
return;
}
//获取user全部数据
Map<String, String[]> map = request.getParameterMap();
//封装user对象
User user = new User();
try {
BeanUtils.populate(user, map);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
//调用service方法查询
UserService service = new UserServiceImpl();
//如果username和password正确,则返回数据,如果不正确则返回null
User loginUser = service.login(user);
//通过返回值是否为null来判断登录是否成功
if (loginUser != null) {