一、实验介绍
1.1 实验内容
本节课程主要利用 Spring MVC 框架实现 Controller 层以及一些辅助类的实现。
1.2 实验知识点
Spring MVC 框架
1.3 实验环境
JDK1.8
Eclipse JavaEE
二、实验步骤
在项目 hrms 的目录 src/main/java 下新建包 com.shiyanlou.controller,作为 Controller 层的包,新建包 com.shiyanlou.util,作为辅助类的包,这些辅助类是为了使 Controller 层的代码更好维护,以及实现一些其他功能。
2.1 辅助类的实现
2.1.1 DateUtil 类
在包 com.shiyanlou.util 下建一个辅助类 DateUtil,其中的 getDate() 方法的作用是返回格式化的当前日期,代码如下:
package com.shiyanlou.util;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateUtil {
public static Date getDate() throws ParseException{
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
return sdf.parse(sdf.format(date));
}
}
2.1.2 JsonDateValueProcessor 类
在包 com.shiyanlou.util 下建一个辅助类 JsonDateValueProcessor,其作用是将日期转化使之能在 easyUI 的 datagrid 中正常显示,代码如下:
package com.shiyanlou.util;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import net.sf.json.JsonConfig;
import net.sf.json.processors.JsonValueProcessor;
public class JsonDateValueProcessor implements JsonValueProcessor {
private String format ="yyyy-MM-dd";
public JsonDateValueProcessor() {
super();
}
public JsonDateValueProcessor(String format) {
super();
this.format = format;
}
@Override
public Object processArrayValue(Object paramObject,
JsonConfig paramJsonConfig) {
return process(paramObject);
}
@Override
public Object processObjectValue(String paramString, Object paramObject,
JsonConfig paramJsonConfig) {
return process(paramObject);
}
private Object process(Object value){
if(value instanceof Date){
SimpleDateFormat sdf = new SimpleDateFormat(format,Locale.CHINA);
return sdf.format(value);
}
return value == null ? "" : value.toString();
}
}
2.1.3 ResponseUtil 类
在包 com.shiyanlou.util 下建一个辅助类 ResponseUtil,其 write() 方法的作用是将用 HttpServletResponse 返回前台 JSON 格式数据,同时减少 Controller 层代码的冗余,代码如下:
package com.shiyanlou.util;
import java.io.PrintWriter;
import javax.servlet.http.HttpServletResponse;
public class ResponseUtil {
public static void write(HttpServletResponse response, Object o)
throws Exception {
response.setContentType("text/html;charset=utf-8");
response.addHeader("Access-Control-Allow-Origin", "*");
PrintWriter out = response.getWriter();
out.println(o.toString());
out.flush();
out.close();
}
}
2.1.4 IntegrateObject 类
在包 com.shiyanlou.util 下建一个辅助类 IntegrateObject,其 genericAssociation() 方法的作用是完成 Employee 与 Department, Position 对象的关联映射,代码如下:
package com.shiyanlou.util;
import com.shiyanlou.domain.Department;
import com.shiyanlou.domain.Employee;
import com.shiyanlou.domain.Position;
public class IntegrateObject {
/**
* 由于部门和职位在 Employee 中是对象关联映射,
* 所以不能直接接收参数,需要创建 Department 对象和 Position 对象
* */
public static void genericAssociation(Integer dept_id,Integer pos_id,Employee employee){
Department department = new Department();
department.setId(dept_id);
Position position = new Position();
position.setId(pos_id);
employee.setDepartment(department);
employee.setPosition(position);
}
}
2.2 Controller 层代码实现
2.2.1 AdminController
在包 com.shiyanlou.controller 下新建一个类 AdminController,代码如下:
package com.shiyanlou.controller;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import com.shiyanlou.domain.Admin;
import com.shiyanlou.service.AdminService;
import com.shiyanlou.util.ResponseUtil;
/**类中的所有响应方法都被映射到 /admin 路径下
*
* @author shiyanlou
*
*/
@Controller
@RequestMapping("/admin")
public class AdminController {
// 自动注入 adminService
@Resource
private AdminService adminService;
/** 处理登录请求
*
* @param admin
* @param request
* @param session
* @return
*/
@RequestMapping("/login")
public String login(Admin admin, HttpServletRequest request,
HttpSession session) {
Admin resultAdmin = adminService.login(admin);
// 如果该登录的管理员用户名或密码错误返回错误信息
if (resultAdmin == null) {
request.setAttribute("admin", admin);
request.setAttribute("errorMsg",
"Please check your username and password!");
return "login";
} else {
// 登录成功, Session 保存该管理员的信息
session.setAttribute("currentAdmin", resultAdmin);
session.setAttribute("username", resultAdmin.getUsername());
return "redirect:main";
}
}
/**处理跳转至主页请求
*
* @param model
* @return
* @throws Exception
*/
@RequestMapping(value="