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>