前四篇发了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.youkuaiyun.com/detail/u014274324/7822635
工程连接:http://download.youkuaiyun.com/detail/u014274324/7822705