1 web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<display-name></display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>checkLogin</filter-name>
<filter-class>com.aaa.mvc.filter.CheckLoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>checkLogin</filter-name>
<url-pattern>/dept/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>charSetFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>charSetFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc-config.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>
2 springmvc-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
<context:component-scan base-package="com.aaa.mvc.*"></context:component-scan>
<mvc:annotation-driven/>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/jsp/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
</beans>
3 过滤器 CheckLoginFilter
package com.aaa.mvc.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebFilter(filterName="checkLogin",urlPatterns="/dept/*")
public class CheckLoginFilter implements Filter {
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
// TODO Auto-generated method stub
HttpServletRequest req = (HttpServletRequest)arg0;
HttpServletResponse resp = (HttpServletResponse)arg1;
Object user = req.getSession().getAttribute("username");
System.out.println("进入过滤器");
String requestURI = req.getRequestURI();
StringBuffer requestURL = req.getRequestURL();
if(user==null){
resp.sendRedirect(req.getContextPath()+"/jsp/emp/login.jsp");
}else{
arg2.doFilter(arg0, arg1);
}
}
@Override
public void init(FilterConfig arg0) throws ServletException {
}
}
4 表现层 EmpController
package com.aaa.mvc.controller;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
import com.aaa.mvc.entity.Emp;
import com.aaa.mvc.service.EmpService;
@Controller
@RequestMapping("/a")
public class EmpController {
@Autowired
private EmpService empservice;
@RequestMapping("/empLogin")
public String empLogin(String username,String password,Model model,HttpServletRequest req,HttpServletResponse resp,HttpSession session){
if("a".equals(username)&&"b".equals(password)){
session.setAttribute("username", username);
return "redirect:/dept/list.do";
}else{
model.addAttribute("errorInfo", "用户名或者密码错误");
return "emp/login";
}
}
@RequestMapping("/list")
public ModelAndView empList(){
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("empList", empservice.selEmp());
modelAndView.setViewName("emp/emplist");
return modelAndView;
}
@RequestMapping("/add")
public String empAdd(Model model,@RequestParam Map paramMap){
int res = empservice.insertEmp(paramMap);
if(res!=0){
model.addAttribute("info", "添加成功!!!");
}else{
model.addAttribute("info", "添加失败!!!");
}
return "forward:list.do";
}
@RequestMapping("/toUpdate")
public String toUpdate(Model model,Integer id){
model.addAttribute("a", empservice.selEmpById(id));
return "emp/editEmp";
}
@RequestMapping("/edit")
public String empEdit(@RequestParam Map paramMap){
empservice.updateEmp(paramMap);
return "forward:list.do";
}
@RequestMapping("/editt")
public String empEditt(Emp emp){
empservice.updateEmp(emp);
return "forward:list.do";
}
@RequestMapping("/del/{id}-{ename}")
public String delete(Model model,@PathVariable Integer id,@PathVariable String ename){
System.out.println(id+","+ename);
int result=empservice.deleteEmp(id);
if(result!=0){
model.addAttribute("info", "删除成功");
}else {
model.addAttribute("info", "删除失败");
}
return "forward:/a/list.do";
}
}
5 服务层 EmpService和EmpServiceImpl
package com.aaa.mvc.service;
import java.util.List;
import java.util.Map;
import com.aaa.mvc.entity.Emp;
public interface EmpService {
int insertEmp(Map map);
List<Map<String,Object>> selEmp();
List<Map<String,Object>> selEmpById(Integer id);
int deleteEmp(Integer id);
int updateEmp(Map map);
int updateEmp(Emp emp);
}
package com.aaa.mvc.service.impl;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.aaa.mvc.dao.EmpDao;
import com.aaa.mvc.entity.Emp;
import com.aaa.mvc.service.EmpService;
import com.aaa.mvc.util.BaseDao;
@Service
public class EmpServiceImpl implements EmpService{
@Autowired
private EmpDao empdao;
public int insertEmp(Map map) {
return empdao.insertEmp(map);
}
public List<Map<String, Object>> selEmp() {
return empdao.selEmp();
}
@Override
public int deleteEmp(Integer id) {
return empdao.deleteEmp(id);
}
@Override
public int updateEmp(Map map) {
return empdao.updateEmp(map);
}
@Override
public List<Map<String, Object>> selEmpById(Integer id) {
return empdao.selEmpById(id);
}
@Override
public int updateEmp(Emp emp) {
return empdao.updateEmp(emp);
}
}
6 持久层 EmpDao和EmpDaoImpl
package com.aaa.mvc.dao;
import java.util.List;
import java.util.Map;
import com.aaa.mvc.entity.Emp;
public interface EmpDao {
int insertEmp(Map map);
List<Map<String,Object>> selEmp();
List<Map<String,Object>> selEmpById(Integer id);
int deleteEmp(Integer id);
int updateEmp(Map map);
int updateEmp(Emp emp);
}
package com.aaa.mvc.dao.impl;
import java.util.List;
import java.util.Map;
import org.springframework.stereotype.Repository;
import com.aaa.mvc.dao.EmpDao;
import com.aaa.mvc.entity.Emp;
import com.aaa.mvc.util.BaseDao;
@Repository
public class EmpDaoImpl implements EmpDao{
public int insertEmp(Map map) {
String sql = "insert into emp(empnum,ename,sex)values(?,?,?)";
Object[] params = {map.get("empnum"),map.get("ename"),map.get("sex")};
int row = BaseDao.insertAndUpdateAndSelect(params, sql);
return row;
}
public List<Map<String,Object>> selEmp() {
String sql = "select id,empnum,ename,sex from emp";
Object[] params = {};
List<Map<String,Object>> a = BaseDao.selectMap(params, sql);
return a;
}
public int deleteEmp(Integer id) {
return BaseDao.insertAndUpdateAndSelect(new Object[]{id},"delete from emp where id=?" );
}
@Override
public int updateEmp(Map map) {
int row = BaseDao.insertAndUpdateAndSelect(new Object[]{map.get("empnum"),map.get("ename"),map.get("sex"),map.get("id")},
"update emp set empnum=?,ename=?,sex=? where id=?");
return row;
}
@Override
public List<Map<String, Object>> selEmpById(Integer id) {
String sql = "select id,empnum,ename,sex from emp where id = ?";
Object[] params = {id};
List<Map<String,Object>> a = BaseDao.selectMap(params, sql);
return a;
}
@Override
public int updateEmp(Emp emp) {
int row = BaseDao.insertAndUpdateAndSelect(new Object[]{emp.getEmpnum(),emp.getEname(),emp.getSex(),emp.getId()},
"update emp set empnum=?,ename=?,sex=? where id=?");
return row;
}
}
7 实体Emp
package com.aaa.mvc.entity;
public class Emp {
private Integer id;
private Integer deptid;
private Integer sal;
private Integer price;
private String empnum;
private String sex;
private String ename;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getDeptid() {
return deptid;
}
public void setDeptid(Integer deptid) {
this.deptid = deptid;
}
public Integer getSal() {
return sal;
}
public void setSal(Integer sal) {
this.sal = sal;
}
public Integer getPrice() {
return price;
}
public void setPrice(Integer price) {
this.price = price;
}
public String getEmpnum() {
return empnum;
}
public void setEmpnum(String empnum) {
this.empnum = empnum;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getEname() {
return ename;
}
public void setEname(String ename) {
this.ename = ename;
}
}
8 addEmp.jsp/editEmp.jsp/emplist.jsp/login.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'addEmp.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<script type="text/javascript" src="js/jquery-1.8.3.min.js"></script>
<script type="text/javascript">
</script>
</head>
<body>
<form action="a/add.do" method="post">
编号:<input name="empnum"><br>
姓名:<input name="ename" id="ena"><span id="info"></span><br>
性别:<input type="radio" name="sex" value="男">男<input type="radio" name="sex" value="女" >女<br>
<input type="submit" id="sbt" value="增加">
</form>
</body>
</html>
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'editEmp.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<script type="text/javascript" src="js/jquery-1.8.3.min.js"></script>
</head>
<body>
<form action="a/editt.do" method="post" >
<c:forEach items="${a}" var="map" varStatus="stat">
<input type="hidden" name="id" value="${map.id}"><br>
编号:<input name="empnum" value="${map.empnum}"><br>
姓名:<input name="ename" value="${map.ename}"><br>
<%-- 性别: <input name="sex" type="radio" <c:if test="${ map.sex=='男'}"> checked="checked"</c:if> value="男" id="nan">男
<input name="sex" type="radio" <c:if test="${ map.sex=='女'}"> checked="checked"</c:if> value="女" id="nv">女<br> --%>
性别: <input name="sex" type="radio" ${map.sex=='男'?'checked=checked':'' } value="男" id="nan">男
<input name="sex" type="radio" ${map.sex=='女'?'checked=checked':'' } value="女" id="nv">女<br>
<input type="submit" value="提交">
</c:forEach>
</form>
</body>
</html>
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title></title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<script>
<%-- function toDel(id){
if(confirm("你确定要删除么")){
location.href="<%=path%>/a/del/"+id+"-ccc.do";
}
} --%>
</script>
</head>
<body>
<center>
${deptList }
${info }
<a href="jsp/emp/addEmp.jsp">添加</a>
<table border="1" width="600px;">
<tr align="center">
<td>账号</td>
<td>姓名</td>
<td>性别</td>
<td>操作</td>
</tr>
<c:forEach items="${empList}" var="emp">
<tr align="center">
<td>${emp.empnum}</td>
<td>${emp.ename}</td>
<td>${emp.sex}</td>
<td>
<a href="a/toUpdate.do?id=${emp.id }">更新</a>
<%-- <a href="javascript:toDel('${emp.id }')">删除</a> --%>
<%-- <a href="javascript:if(confirm('你确定要删除么')){location.href='<%=path%>/a/del/${emp.id }-ccc.do';}">删除</a> --%>
<a href="javascript:if(confirm('确认删除吗?')){location.href='a/del/${emp.id}-bbb.do';}">删除</a>
</td>
</tr>
</c:forEach>
</table>
</center>
</body>
</html>
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>login</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
</head>
<body>
<form action="a/empLogin.do" method="post">
<div>${errorInfo}</div>
<table>
<tr><td>用户名:</td><td><input type="text" name="username"></td></tr>
<tr><td>密码:</td><td><input type="password" name="password" ></td></tr>
<tr><td colspan="2"><input type="submit" value="登陆"></td></tr>
</table>
</form>
</body>
</html>
9 lib下所需jar包
1 fastjson-1.2.49.jar
2 mysql-connector-java-5.1.40.jar
10 BaseDao
package com.aaa.mvc.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class BaseDao {
private static final String DRIVER_CLASS = "com.mysql.jdbc.Driver";
private static final String JDBC_URL = "jdbc:mysql://127.0.0.1:3306/test?user=root&password=wangzhenbao";
private static Connection con = null;
private static PreparedStatement ps = null;
private static ResultSet rs = null;
static {
try {
Class.forName(DRIVER_CLASS);
} catch (ClassNotFoundException e) {
System.out.println("你没有加jar包!");
e.printStackTrace();
}
}
public static Connection getConnection(){
try {
con = DriverManager.getConnection(JDBC_URL);
} catch (SQLException e) {
System.out.println("你的URL写错了!");
e.printStackTrace();
}
return con;
}
public static int insertAndUpdateAndSelect(Object[] params,String sql){
int row = 0;
getConnection();
try {
ps = con.prepareStatement(sql);
setParams(params);
row = ps.executeUpdate();
} catch (SQLException e) {
System.out.println("请仔细检查你的增删改!");
e.printStackTrace();
}finally{
closeAll();
}
return row;
}
public static List<List<Object>> selectList(Object[] params,String sql){
con = getConnection();
List<List<Object>> tabList = new ArrayList<List<Object>>();
try {
ps = con.prepareStatement(sql);
setParams(params);
rs = ps.executeQuery();
while(rs.next()){
List<Object> rowList = new ArrayList<Object>();
for(int i=0;i<rs.getMetaData().getColumnCount();i++){
rowList.add(rs.getObject(i+1));
}
tabList.add(rowList);
}
} catch (SQLException e) {
System.out.println("请仔细检查你的List!");
e.printStackTrace();
}finally{
closeAll();
}
return tabList;
}
public static List<Map<String,Object>> selectMap(Object[] params,String sql){
List<Map<String,Object>> tabMap = new ArrayList<Map<String,Object>>();
try {
con = getConnection();
ps = con.prepareStatement(sql);
setParams(params);
rs = ps.executeQuery();
while(rs.next()){
Map<String,Object> rowlist = new HashMap<String,Object>();
for(int i=0;i<rs.getMetaData().getColumnCount();i++){
rowlist.put(rs.getMetaData().getColumnName(i+1),rs.getObject(i+1));
}
tabMap.add(rowlist);
}
} catch (SQLException e) {
System.out.println("请仔细检查你的Map!");
e.printStackTrace();
}finally{
closeAll();
}
return tabMap;
}
public static int getGeneratedKeys(String sql,Object[] params){
int id = 0;
getConnection();
try {
ps = con.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
setParams(params);
ps.executeUpdate();
rs = ps.getGeneratedKeys();
while(rs.next()){
id = rs.getInt(1);
}
} catch (SQLException e) {
e.printStackTrace();
}
return id;
}
public static void setParams(Object[] params){
if(params==null) return;
for (int i = 0; i < params.length; i++) {
try {
ps.setObject(i+1, params[i]);
} catch (SQLException e) {
System.out.println("第i+1个参数有误!");
e.printStackTrace();
}
}
}
public static void closeAll(){
try {
if(rs!=null){
rs.close();
}
if(ps!=null){
ps.close();
}
if(con!=null){
con.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
11 如果要加入拦截器 LoginInterCepter
springmvc-config.xml中加入下面代码
<!-- 配置拦截器 -->
<mvc:interceptors>
<!-- 自定义登陆拦截器 -->
<mvc:interceptor>
<!-- 配置拦截的路径 相当于filter <url-pattern> *拦截两级-->
<mvc:mapping path="/*/*.do"/>
<!-- 配置拦截的具体实现类 相当于filter <filter-class> -->
<bean class="com.aaa.mvc.interceptor.LoginInterCepter"></bean>
</mvc:interceptor>
</mvc:interceptors>
编写拦截器代码
package com.aaa.mvc.interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
public class LoginInterCepter implements HandlerInterceptor {
@Override
public void afterCompletion(HttpServletRequest arg0,
HttpServletResponse arg1, Object arg2, Exception arg3)
throws Exception {
System.out.println("最终要运行的");
}
@Override
public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1,
Object arg2, ModelAndView arg3) throws Exception {
System.out.println("在视图渲染之前运行");
}
@Override
public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1,
Object arg2) throws Exception {
System.out.println("在处理我们自定义业务之前运行的");
Object user = arg0.getSession().getAttribute("username");
if(user==null){
arg1.sendRedirect(arg0.getContextPath()+"/jsp/login.jsp");
return false;
}
return true;
}
}