史上最全最强SpringMVC详细示例实战教程(二)

IT IT哈哈

 十四、异常的处理

  1.处理局部异常(Controller内)

@ExceptionHandlerpublic ModelAndView exceptionHandler(Exception ex){    ModelAndView mv = new ModelAndView("error");    mv.addObject("exception", ex);    System.out.println("in testExceptionHandler");    return mv;}@RequestMapping("/error")public String error(){    int i = 5/0;    return "hello";}

  2.处理全局异常(所有Controller)

@ControllerAdvicepublic class testControllerAdvice {    @ExceptionHandler    public ModelAndView exceptionHandler(Exception ex){        ModelAndView mv = new ModelAndView("error");        mv.addObject("exception", ex);        System.out.println("in testControllerAdvice");        return mv;    }}

  3.另一种处理全局异常的方法

  在SpringMVC配置文件中配置

<!-- configure SimpleMappingExceptionResolver --><bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">    <property name="exceptionMappings">        <props>            <prop key="java.lang.ArithmeticException">error</prop>        </props>    </property></bean>

  error是出错页面

 十五、设置一个自定义拦截器

  1.创建一个MyInterceptor类,并实现HandlerInterceptor接口

public class MyInterceptor implements HandlerInterceptor {    @Override    public void afterCompletion(HttpServletRequest arg0,            HttpServletResponse arg1, Object arg2, Exception arg3)            throws Exception {        System.out.println("afterCompletion");    }    @Override    public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1,            Object arg2, ModelAndView arg3) throws Exception {        System.out.println("postHandle");    }    @Override    public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1,            Object arg2) throws Exception {        System.out.println("preHandle");        return true;    }}

  2.在SpringMVC的配置文件中配置

<!-- interceptor setting --><mvc:interceptors>    <mvc:interceptor>        <mvc:mapping path="/mvc/**"/>        <bean class="test.SpringMVC.Interceptor.MyInterceptor"></bean>    </mvc:interceptor>       </mvc:interceptors>

  3.拦截器执行顺序

史上最全最强SpringMVC详细示例实战教程(二)

 十六、表单的验证(使用Hibernate-validate)及国际化

  1.导入Hibernate-validate需要的jar包
史上最全最强SpringMVC详细示例实战教程(二)

(未选中不用导入)
史上最全最强SpringMVC详细示例实战教程(二)

  2.编写实体类User并加上验证注解

public class User {    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 Date getBirth() {        return birth;    }    public void setBirth(Date birth) {        this.birth = birth;    }    @Override    public String toString() {        return "User [id=" + id + ", name=" + name + ", birth=" + birth + "]";    }       private int id;    @NotEmpty    private String name;    @Past    @DateTimeFormat(pattern="yyyy-MM-dd")    private Date birth;}

  ps:@Past表示时间必须是一个过去值

  3.在jsp中使用SpringMVC的form表单

<form:form action="form/add" method="post" modelAttribute="user">    id:<form:input path="id"/><form:errors path="id"/><br>    name:<form:input path="name"/><form:errors path="name"/><br>    birth:<form:input path="birth"/><form:errors path="birth"/>    <input type="submit" value="submit"></form:form>

  ps:path对应name

  4.Controller中代码

@Controller@RequestMapping("/form")public class formController {    @RequestMapping(value="/add",method=RequestMethod.POST)       public String add(@Valid User u,BindingResult br){        if(br.getErrorCount()>0){                       return "addUser";        }        return "showUser";    }    @RequestMapping(value="/add",method=RequestMethod.GET)    public String add(Map<String,Object> map){        map.put("user",new User());        return "addUser";    }}

  ps:

  1.因为jsp中使用了modelAttribute属性,所以必须在request域中有一个"user".

  2.@Valid 表示按照在实体上标记的注解验证参数

  3.返回到原页面错误信息回回显,表单也会回显

  5.错误信息自定义

  在src目录下添加locale.properties

NotEmpty.user.name=name can't not be emptyPast.user.birth=birth should be a past valueDateTimeFormat.user.birth=the format of input is wrongtypeMismatch.user.birth=the format of input is wrongtypeMismatch.user.id=the format of input is wrong

  在SpringMVC配置文件中配置

<!-- configure the locale resource --><bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">    <property name="basename" value="locale"></property></bean>

  6.国际化显示

  在src下添加locale_zh_CN.properties

username=账号password=密码

  locale.properties中添加
.

username=user namepassword=password

  创建一个locale.jsp

<body>  <fmt:message key="username"></fmt:message>  <fmt:message key="password"></fmt:message></body>

  在SpringMVC中配置

<!-- make the jsp page can be visited --><mvc:view-controller path="/locale" view-name="locale"/>

  让locale.jsp在WEB-INF下也能直接访问

  最后,访问locale.jsp,切换浏览器语言,能看到账号和密码的语言也切换了

 十七、压轴大戏--整合SpringIOC和SpringMVC

  1.创建一个test.SpringMVC.integrate的包用来演示整合,并创建各类

史上最全最强SpringMVC详细示例实战教程(二)

  2.User实体类

public class User {    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 Date getBirth() {        return birth;    }    public void setBirth(Date birth) {        this.birth = birth;    }    @Override    public String toString() {        return "User [id=" + id + ", name=" + name + ", birth=" + birth + "]";    }       private int id;    @NotEmpty    private String name;    @Past    @DateTimeFormat(pattern="yyyy-MM-dd")    private Date birth;}

  3.UserService类

@Componentpublic class UserService {    public UserService(){        System.out.println("UserService Constructor...\n\n\n\n\n\n");    }    public void save(){        System.out.println("save");    }}

  4.UserController

@Controller@RequestMapping("/integrate")public class UserController {    @Autowired    private UserService userService;    @RequestMapping("/user")    public String saveUser(@RequestBody @ModelAttribute User u){        System.out.println(u);        userService.save();        return "hello";    }}

  5.Spring配置文件

  在src目录下创建SpringIOC的配置文件applicationContext.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"    xsi:schemaLocation="http://www.springframework.org/schema/beans          http://www.springframework.org/schema/beans/spring-beans.xsd         http://www.springframework.org/schema/util         http://www.springframework.org/schema/util/spring-util-4.0.xsd        http://www.springframework.org/schema/context        http://www.springframework.org/schema/context/spring-context.xsd        "        xmlns:util="http://www.springframework.org/schema/util"        xmlns:p="http://www.springframework.org/schema/p"        xmlns:context="http://www.springframework.org/schema/context"           >    <context:component-scan base-package="test.SpringMVC.integrate">        <context:exclude-filter type="annotation"            expression="org.springframework.stereotype.Controller"/>        <context:exclude-filter type="annotation"            expression="org.springframework.web.bind.annotation.ControllerAdvice"/>           </context:component-scan></beans>

  在Web.xml中添加配置

<!-- configure the springIOC --><listener>    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><context-param>   <param-name>contextConfigLocation</param-name>   <param-value>classpath:applicationContext.xml</param-value></context-param>

  6.在SpringMVC中进行一些配置,防止SpringMVC和SpringIOC对同一个对象的管理重合

<!-- scan the package and the sub package -->    <context:component-scan base-package="test.SpringMVC.integrate">        <context:include-filter type="annotation"            expression="org.springframework.stereotype.Controller"/>        <context:include-filter type="annotation"            expression="org.springframework.web.bind.annotation.ControllerAdvice"/>    </context:component-scan>

 十八、SpringMVC详细运行流程图

史上最全最强SpringMVC详细示例实战教程(二)

 十九、SpringMVC与struts2的区别

  1、springmvc基于方法开发的,struts2基于类开发的。springmvc将url和controller里的方法映射。映射成功后springmvc生成一个Handler对象,对象中只包括了一个method。方法执行结束,形参数据销毁。springmvc的controller开发类似web service开发。

  2、springmvc可以进行单例开发,并且建议使用单例开发,struts2通过类的成员变量接收参数,无法使用单例,只能使用多例。

  3、经过实际测试,struts2速度慢,在于使用struts标签,如果使用struts建议使用jstl。

更多相关文章

  1. 史上最全最强SpringMVC详细示例实战教程(一)
  2. 服务端开发指南与最佳实战 | 数据存储技术 | MySQL(07) 范式与反模
  3. 服务端开发指南与最佳实战 | 数据存储技术 | MySQL(06) 数据库安全
  4. 服务端开发指南与最佳实战 | 数据存储技术 | MySQL(05) 索引的排序
  5. 服务端开发指南与最佳实战 | 数据存储技术 | MySQL(04) 索引使用的
  6. 服务端开发指南与最佳实战 | 数据存储技术 | MySQL(03) 如何设计索
  7. 服务端开发指南与最佳实战 | 数据存储技术 | MySQL(01)数据类型的
  8. 服务端开发指南与最佳实战 | 数据存储技术 | MySQL(02) 存储引擎的
  9. Spring Boot 揭秘与实战 工作原理剖析

随机推荐

  1. Android 设置图片的四个角 为圆角
  2. android的ListView显示
  3. Android(安卓)6.0 之AlarmManagerService
  4. Android Camera2 API 学习笔记2
  5. android 鐢佃瘽褰曢煶
  6. Service实例-播放mp3音乐
  7. android 文字滚动动画
  8. android 婧愮爜缁撴瀯鍒嗘瀽
  9. Android清除通知栏的对应的消息
  10. Android/Bluetooth 初始化流程