前四篇發了spring mvc的配置,這一篇我把spring mvc的工程代碼和jar包發出來。
先發controller層的代碼
@Controller("userController")
@RequestMapping("/user.do")
public class UserController {
@Resource
private UserService userService;
@RequestMapping(params = "method=reg")
public String reg(User user){
System.out.println("用戶註冊");
if (userService.exist(user)) {
return "reg_fail";
}
userService.add(user);
return "reg_success";
}
@RequestMapping(params = "method=log")
public String log(User user) {
System.out.println("用戶登錄");
if (userService.login(user)) {
return "log_success";
}
return "log_fail";
}
}
再發下service層的代碼
@Service("userService")
public class UserService {
@Resource
private UserDao userDao;
@Autowired
TestService testService;
public void add(User user){
userDao.add(user);
//User user2=new User();
//user2.setName("789");
//user2.setPassword("789");
//testService.save(user2);
}
@Transactional(propagation=Propagation.REQUIRED)
public boolean exist(User user) {
return userDao.findUser(user);
}
@Transactional(propagation=Propagation.NEVER)
public boolean login(User user) {
return userDao.userLogin(user);
}
}
再發下dao層的代碼
@Repository("userDao")
public class UserDao {
@Resource
private HibernateTemplate hibernateTemplate;
public void add(User u) {
hibernateTemplate.save(u);
}
public boolean findUser(User u) {
List<?> list = hibernateTemplate.find("from User u where u.name=?",
u.getName());
if (list.size() > 0) {
return true;
}
return false;
}
public boolean userLogin(User u) {
List<?> list = hibernateTemplate.find(
"from User u where u.name=? and u.password=?", u.getName(),
u.getPassword());
if (list.size() > 0) {
return true;
}
return false;
}
}
再發下實體類的代碼
@Entity
public class User {
private int id;
private String name;
private String password;
@Id
@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
最後發下aop異常處理的代碼
public class Aspect {
Logger logger = Logger.getLogger(UserController.class);
String strLog = null ;
/**
* 前置通知:在某連接點之前執行的通知,但這個通知不能阻止連接點前的執行
* @param jp 連接點:程序執行過程中的某一行爲,例如,AServiceImpl.barA()的調用或者拋出的異常行爲
*/
public void doBefore(JoinPoint jp) {
strLog = "log Begining method: "
+ jp.getTarget().getClass().getName() + "."
+ jp.getSignature().getName();
logger.warn(strLog);
}
/**
* 環繞通知:包圍一個連接點的通知,可以在方法的調用前後完成自定義的行爲,也可以選擇不執行
* 類似Web中Servlet規範中的Filter的doFilter方法。
* @param pjp 當前進程中的連接點
* @return
* @throws Throwable
*/
public Object doAround(ProceedingJoinPoint pjp) throws Throwable {
long time = System.currentTimeMillis();
Object retVal = pjp.proceed();
time = System.currentTimeMillis() - time;
System.out.println("process time: " + time + " ms");
return retVal;
}
/**
* 拋出異常後通知 : 在方法拋出異常退出時執行的通知。
* @param jp 連接點:程序執行過程中的某一行爲,例如,AServiceImpl.barA()的調用或者拋出的異常行爲
*/
public void doAfter(JoinPoint jp) {
strLog ="doAfter:log Ending method: "
+ jp.getTarget().getClass().getName() + "."
+ jp.getSignature().getName();
logger.warn(strLog);
}
public void doAfterThrow(JoinPoint jp,Exception e){
System.out.println("*****************異常信息如下**************");
System.out.println("method " + jp.getTarget().getClass().getName()
+ "." + jp.getSignature().getName() + " throw exception");
//System.out.println(e.fillInStackTrace());
StringWriter sw=new StringWriter();
e.printStackTrace(new PrintWriter(sw));
//System.out.println(sw.toString());
//System.out.println(e.getMessage());
//System.out.println("異常通知------"+e.getMessage());
logger.warn(sw.toString());
}
/*@AfterThrowing(pointcut="anyMethod()",throwing="e")
public void doAfterThrow(Exception e){
System.out.println("異常通知------"+e.getMessage());
} */
}
jar包連接:http://download.csdn.net/detail/u014274324/7822635
工程連接:http://download.csdn.net/detail/u014274324/7822705