SpringMVC详解笔记-下

servlet的api获取

pom引入依赖

方法形参填写request,response,session即可获取该类型对象 
条件:导入servlet依赖
<!--servlet的api-->
<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>servlet-api</artifactId>
  <version>2.5</version>
  <scope>provided</scope>
</dependency>

helloworld代码

 @RequestMapping(value = "/param7",name = "servlet的api获取")
    public String param7(HttpServletRequest request, HttpServletResponse response, HttpSession session){
        System.out.println(request);
        System.out.println(response);
        System.out.println(session);
        return "success";
    }

异步ajax的数据封装(其实就是前段的json转化为java实体类,再将返回的java实体类转化为json传回去)

pom引入依赖

<!--jackson转换工具-->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.9.0</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>2.9.0</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-annotations</artifactId>
      <version>2.9.0</version>
    </dependency>

controller的helloworld代码:

 @RequestMapping(value = "/ajax",name = "springmvc中封装异步数据")
                        //后台:json对象--jackson--readValue--account对象
    public @ResponseBody User ajax(@RequestBody Account account){

        System.out.println(account);

        //比如:从数据库查询了一个用户User
        User user = new User();
        user.setUsername("jack");
        user.setAge(100);

        //user对象返回给ajax  jackson--writeValueAsString--json--ajax
        return user;  //@ResponseBody---{"username":"jack","age":100}
    }

RestFul编程风格

在这里插入图片描述
注意:

1.区分请求方式
借助@RequestMapping中的method属性
2.定义接受的地址参数
{自定义地址参数名}
3.程序中获取地址参数
@Pathvariable:配置到方法形参上
Value属性:自定义地址参数名

controller的helloworld代码:

@Controller
public class RestFulController {


    /*
    *  1:如何控制方法的提交方式  RequestMapping:method
    *
    *  2: 如果接受地址参数  格式:{随便写值} 值就是页面的id参数
    *
    *  3:程序中如何获取地址参数  @PathVariable(value = "id")方法形参 id必须得是{}定义的值
    *
    * */
    //根据id查
    @RequestMapping(value = "/{id}.html",method = RequestMethod.GET)
    public String findById(@PathVariable(value = "id") String value){
        //
        System.out.println("我是根据id:"+value+"做查询");
        return "success";
    }
}

统一异常处理器

在这里插入图片描述
配置步骤:

1 创建全局异常处理类
2 添加注解@RestControllerAdvice
3 指定异常进行接受处理

新建异常类:

@RestControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(Exception.class)
    public String exceptionHandler(Exception ex) {
        return "错误原因:"+ex.getMessage();
    }
}

拦截器

拦截器的作用和过滤器的作用是一样的,都是对访问资源时的一种请求拦截

虽然他们作用是一样的,但是也有区别:

1 过滤器是servlet规范中的一部分,任何java web工程都可以使用
2 拦截器是springmvc框架自己的,只有使用了springmvc框架的工程才能使用
3 拦截器和过滤器能够同时使用 优先级:过滤器>拦截器

自定义拦截器

设置步骤:

1.自定义拦截器:实现HandlerInterceptor
2.配置拦截器(springmvc.xml)

新建拦截器 MyInterceptor1.java

public class MyInterceptor1 implements HandlerInterceptor {

    @Override //在控制器方法之前执行(常用)
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("之前...");
        return true;
    }

    @Override  //在控制器方法之后执行(不常用)
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("之后...");
    }

    @Override  //整个响应结束最终执行 条件:preHandle的返回值true(不常用)
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("响应结束..");
    }
}

springmvc.xml中设置:

<mvc:interceptors>
                <mvc:interceptor>
                        <mvc:mapping path="/**"/>
                        <bean class="cn.itcast.interceptor.MyInterceptor1"></bean>
                </mvc:interceptor>

                <mvc:interceptor>
                        <mvc:mapping path="/**"/>
                        <bean class="cn.itcast.interceptor.MyInterceptor2"></bean>
                </mvc:interceptor>
</mvc:interceptors>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值