netctoss02_登陆页面【Servlet+JSP版】
1.设计分析
2.代码实现
1)Admin实体类
Admin.java
package com.netctoss.entity;
import java.io.Serializable;
import java.sql.Timestamp;
public class Admin implements Serializable {
private int admin_id; //id
private String admin_code; //账号
private String password; //密码
private String name; //真实姓名
private String telephone; //电话
private String email; //邮箱
private Timestamp enrolldate; //创建时间
public int getAdmin_id() {
return admin_id;
}
public void setAdmin_id(int adminId) {
admin_id = adminId;
}
public String getAdmin_code() {
return admin_code;
}
public void setAdmin_code(String adminCode) {
admin_code = adminCode;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getTelephone() {
return telephone;
}
public void setTelephone(String telephone) {
this.telephone = telephone;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Timestamp getEnrolldate() {
return enrolldate;
}
public void setEnrolldate(Timestamp enrolldate) {
this.enrolldate = enrolldate;
}
public String toString() {
return "Admin [admin_id=" + admin_id + ",admin_code=" + admin_code
+ ", password=" + password + "]";
}
}
2)设计DAO接口及实现
Admin.dao
package com.netctoss.dao;
import com.netctoss.entity.Admin;
public interface AdminDao {
Admin findByCode(String adminCode);
}
AdminDaoJdbcImpl.java
package com.netctoss.dao.impl;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.netctoss.dao.AdminDao;
import com.netctoss.entity.Admin;
import com.netctoss.util.DBUtil;
public class AdminDaoJdbcImpl implements AdminDao {
@Override
public Admin findByCode(String adminCode) {
Connection conn = null;
try{
conn = DBUtil.getConnection();
String sql = "select * from admin_info where admin_code=?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1,adminCode);
ResultSet rs = ps.executeQuery();
while(rs.next()){
Admin admin = new Admin();
admin.setAdmin_id(rs.getInt("admin_id"));
admin.setAdmin_code(rs.getString("admin_code"));
admin.setPassword(rs.getString("password"));
admin.setName(rs.getString("name"));
admin.setTelephone(rs.getString("telephone"));
admin.setEmail(rs.getString("email"));
admin.setEnrolldate(rs.getTimestamp("enrolldate"));
return admin;
}
}catch(SQLException e){
e.printStackTrace();
throw new RuntimeException("查询管理员失败",e);
}finally{
DBUtil.close(conn);
}
return null;
}
}
3)Servlet设计
MainServlet.java
package com.netctoss.web;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.util.List;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.commons.collections4.sequence.DeleteCommand;
import com.netctoss.dao.AdminDao;
import com.netctoss.dao.CostDao;
import com.netctoss.entity.Admin;
import com.netctoss.entity.Cost;
import com.netctoss.util.Factory;
import com.netctoss.util.ImageUtil;
public class MainServlet extends HttpServlet{
@Override
protected void service(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
//获取请求路径
String path =req.getServletPath();
//处理各个请求
if("/toLogin.do".equals(path)){
//打开登陆页面
toLogin(req,res);
}else if("/toIndex.do".equals(path)){
//打开主页
toIndex(req,res);
}else if("/login.do".equals(path)){
//登陆校验
login(req,res);
}else if("/createImage.do".equals(path)){
//验证码图片
createImage(req,res);
}else{
throw new RuntimeException("查无此页");
}
}
private void createImage(HttpServletRequest req, HttpServletResponse res) throws IOException {
Object[] objs = ImageUtil.createImage();
HttpSession session = req.getSession();
session.setAttribute("imageCode",objs[0]);
res.setContentType("image/png");
BufferedImage image = (BufferedImage) objs[1];
OutputStream os = res.getOutputStream();
ImageIO.write(image, "png", os);
}
private void login(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
String adminCode = req.getParameter("adminCode");
String password = req.getParameter("password");
String imageCode = req.getParameter("imageCode");
AdminDao dao = Factory.getAdminDao();
Admin admin = dao.findByCode(adminCode);
HttpSession session = req.getSession();
String icode = (String) session.getAttribute("imageCode");
if(!icode.equalsIgnoreCase(imageCode)){
req.setAttribute("error","验证码错误");
req.getRequestDispatcher("WEB-INF/main/login.jsp").forward(req,res);
return ;
}
if(admin == null){
req.setAttribute("error","用户名错误");
req.getRequestDispatcher("WEB-INF/main/login.jsp").forward(req,res);
}else if(!admin.getPassword().equals(password)){
req.setAttribute("error","密码错误");
req.getRequestDispatcher("WEB-INF/main/login.jsp").forward(req,res);
}else{
session.setAttribute("adminCode",adminCode);
res.sendRedirect("toIndex.do");
}
}
private void toIndex(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
req.getRequestDispatcher("WEB-INF/main/index.jsp").forward(req,res);
}
private void toLogin(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
req.getRequestDispatcher("WEB-INF/main/login.jsp").forward(req,res);
}
}
4)Jsp页面设计
login.jsp
<%@page pageEncoding="utf-8" contentType="text/html; charset=utf-8" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>NetCTOSS</title>
<link type="text/css" rel="stylesheet" media="all" href="styles/global.css" />
<link type="text/css" rel="stylesheet" media="all" href="styles/global_color.css" />
<script type="text.javascript">
function submit(){
document.forms[0].submit();
}
</script>
</head>
<body class="index">
<div class="login_box">
<form action="login.do" method="post">
<table>
<tr>
<td class="login_info">账号:</td>
<td colspan="2"><input name="adminCode" type="text" class="width150" value="${param.adminCode }"/></td>
<td class="login_error_info"><span class="required">30长度的字母、数字和下划线</span></td>
</tr>
<tr>
<td class="login_info">密码:</td>
<td colspan="2"><input name="password" type="password" class="width150" value="${param.password }"/></td>
<td><span class="required">30长度的字母、数字和下划线</span></td>
</tr>
<tr>
<td class="login_info">验证码:</td>
<td class="width70"><input name="imageCode" type="text" class="width70" /></td>
<td><img src="createImage.do" alt="验证码" title="点击更换"
οnclick="this.src='createImage.do?x='+Math.random();"/></td>
<td><span class="required"></span></td>
</tr>
<tr>
<td></td>
<td class="login_button" colspan="2">
<a href="javascript:;" οnclick="submit();"><img src="images/login_btn.png" /></a>
</td>
<td><span class="required">${error}</span></td>
</tr>
</table>
</form>
</div>
</body>
</html>
index.jsp
<%@page pageEncoding="utf-8" contentType="text/html; charset=utf-8" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>NetCTOSS</title>
<link type="text/css" rel="stylesheet" media="all" href="styles/global.css" />
<link type="text/css" rel="stylesheet" media="all" href="styles/global_color.css" />
</head>
<body class="index">
<!--导航区域开始-->
<div id="index_navi">
<ul id="menu">
<li><a href="toIndex.do" class="index_on"></a></li>
<li><a href="role/role_list.html" class="role_off"></a></li>
<li><a href="admin/admin_list.html" class="admin_off"></a></li>
<li><a href="findCost.do" class="fee_off"></a></li>
<li><a href="account/account_list.html" class="account_off"></a></li>
<li><a href="service/service_list.html" class="service_off"></a></li>
<li><a href="bill/bill_list.html" class="bill_off"></a></li>
<li><a href="report/report_list.html" class="report_off"></a></li>
<li><a href="user/user_info.html" class="information_off"></a></li>
<li><a href="user/user_modi_pwd.html" class="password_off"></a></li>
</ul>
</div>
</body>
</html>