spring-mvc高级技术

Spring MVC高级技术包括但不限于web.xml配置、异常处理、跨重定向请求传递数据

1、web.xml文件的配置

“-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN”
“http://java.sun.com/dtd/web-app_2_3.dtd” >

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:spring-*.xml</param-value>
</context-param>
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<servlet>
    <servlet-name>appServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:springMvc.xml</param-value>
    </init-param>
</servlet>
<servlet-mapping>
    <servlet-name>appServlet</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>


 ContextLoaderListener是根容器,DispatcherServlet是子容器。父容器中管理的bean可以被子容器引用,反之,不行。它们都从各自的xml文件初始化自己的上下文

  ContextLoaderListener如果未指定contextConfigLocation参数,则默认加载的配置文件为/WEB-INF/applicationContext.xml

  DispatcherServlet如果未指定contextConfigLocation参数,则根据元素指定的名称,在/WEB-INF/文件夹下寻找配置文件appServlet-servlet.xml

2、处理异常

Spring提供了多种方式将异常转换为响应

特定的 Spring异常会自动映射为指定的HTTP状态码
异常上可以添加@ResponseStatus注解,将异常映射为某一个HTTP状态码
在方法上可以添加@ExceptionHandler注解,使其用来处理异常
1)特定的 Spring异常会自动映射为指定的HTTP状态码

  如果在控制器中抛出了异常,该异常不在列表中,又没有指定HTTP状态码,则默认为状态码为500
  这里写图片描述
2)异常上可以添加@ResponseStatus注解,将异常映射为某一个HTTP状态码

@Controller
public class HelloController {

@RequestMapping(“/home”)
public String home(){
System.out.println(“执行home”);
throw new MyException();
// return “home”; //返回一个字符串,即逻辑视图名
}
}
package com.cn.Exception;

import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ResponseStatus;
public class MyException extends RuntimeException{

}
这里写图片描述

package com.cn.Exception;

import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ResponseStatus;

@ResponseStatus(value = HttpStatus.NOT_FOUND, reason = “抛出异常的原因”)
public class MyException extends RuntimeException{

}
这里写图片描述
3)在方法上可以添加@ExceptionHandler注解,使其用来处理异常

该方式是按照处理请求的方式处理异常,@ExceptionHandler注解的方法返回值为字符串表示逻辑视图名

package com.cn.Exception;

public class MyException2 extends RuntimeException{

}
@Controller
public class HelloController {

@RequestMapping(“/home”)
public String home(){
System.out.println(“执行home”);
throw new MyException2();
// return “home”; //返回一个字符串,即逻辑视图名
}

@ExceptionHandler(MyException2.class)
public String handleMException(){
System.out.println(“处理异常逻辑”);
return “fail”;
}
}
访问http://localhost:8080/home,后台输出
这里写图片描述
这里写图片描述
@ExceptionHandler注解的方法可以处理同一个控制器中所有处理器方法所抛出的异常(注解指定的异常),注解定义如下

@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface ExceptionHandler {
Class

猜你喜欢

转载自blog.csdn.net/zhuguanghalo/article/details/82467712