springmvc与struts2的区别

来源:互联网 发布:python 执行adb shell 编辑:程序博客网 时间:2024/04/30 01:37

springmvc与struts2的区别

1.机制:springmvc的入口是servlet,是方法级别的拦截,拦截到方法后根据参数上的注解,把request数据注入进去,而struts2是filter,是类级别的拦截,每次来了一个请求就创建一个action,然后调用seter与getter方法把request中的数据注入,struts2其实是setter与getter与request打交道

,这样导致了二者的机制不同

2.性能:springmvc比struts2快,springmvc是基于方法的设计,而struts2是基于类,

3.springmvc的验证也是亮点,支持JSR303,处理ajax的请求更是方便,只需一个注解@REsponseBOdy,然后直接返回响应文本即可

附上代码

@RequestMapping(method=RequestMethod.POST,value = "/login")
    @AvoidDuplicateSubmission(remove=true)
    @ResponseBody
    public Map<String, String> login(Model model,HttpServletRequest request, HttpServletResponse response) throws Exception {
        Map<String, String> map = new HashMap<String, String>();
        String UserName = request.getParameter("UserName");
        String Password = request.getParameter("Password");
        logger.info("UserName: " + UserName + ", Password: " + Password);
        try {
            TblPerson person = null;
            if(null == UserName || null == Password){
                map.put("failure","true");
                map.put("msg", "用户名和密码不能为空!");
                return map;
            }
            person = personService.findPersonByName(UserName);
            String pw=Constants.encodePassword(Password);
            if (null == person) {
                map.put("failure","true");
                map.put("msg", "登陆失败请确认用户名是否正确!");
            }
            else{
                if(!person.getPassword().equals(pw)){
                    map.put("failure", "true");
                    map.put("msg", "登录失败请确密码是否正确!");
                    
                }
               else {    
                request.getSession().setAttribute(Constants.USER_INFO_SESSION, person);
                    map.put("success", "true");
                    String path = request.getContextPath();
                    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
                    map.put("msg", basePath+"main.jsp");
                    person.setLastLoginTime(new Timestamp(System.currentTimeMillis()));
                    personService.updatePersonService(person);            
                    TblPersonlog userlog = new TblPersonlog();
                    userlog.setUserName(UserName);
                    userlog.setIP(getRemortIP(request));
                    userlog.setLogMessage(UserName + " login success");
                    userlog.setAddTime(new Timestamp(System
                                    .currentTimeMillis()));
                    personlogService.savePersonlogService(userlog);
                }
            }
            
        } catch (Exception e) {
            TblPersonlog userlog = new TblPersonlog();
            userlog.setUserName(UserName);
            userlog.setIP(getRemortIP(request));
            userlog.setLogMessage(UserName + " login success");
            userlog
                    .setAddTime(new Timestamp(System
                            .currentTimeMillis()));
            personlogService.savePersonlogService(userlog);
            map.put("failure","true");
            map.put("msg", "登陆异常请稍后再试!");
        }
        logger.info("user: " + UserName + "login success!");
        return map;
    }

4.设计思想上,struts2更加符合oop(面向对象编程)的编程思想,spring更加谨慎,在servlet上扩展

5,intercepter的实现机制:struts以自己的interceptor机制,而springmvc用的是独立的aop方式,这样导致struts2的配置文件比spring mvc大,虽然struts2配置也能继承,所以理论来讲,springmvc更加简洁,开发效率spring mvc确实比struts2 高


0 0