SpringMVC_02_进阶

在完成网页与前端交互的基础功能之后,我们进一步对MVC开发进行简化,分别了解以下几个功能:

一、RestFul风格

是一种风格,而不是约束

以前的传参方式:htttp://127.0.0.1:8080/test?name=张三&age=18

RestFul风格传参:htttp://127…0.0.1:8080/test/张三/18

优点:简洁、高效、安全

代码实现:

@RequestMapping("/test/{name}/{age}")
public String test(@PathVariable String name,@PathVariable String age, Model model){
    //接受参数,并存入Model
    model.addAttribute("mgr",name+"----------"+age);
    return "next";
}

二、接收、发送数据

在WEB-INF目录下的jsp文件,只能通过controller层进行return、forward进行转发跳转
不能被重定向、前端文件直接跳转访问,

1.发送(请求转发、重定向)

使用视图解析器:直接return、原理为请求转发

return "/test";

不使用视图解析器:
注解:@RestController
当@Controller注解替换为此注解时,此类中所有请求均不走视图解析器

return "forward:"WEB-INF/jsp/test.jsp";  请求转发

return "redirect:/index.jsp";  重定向

2、接收

(1)提交的名称与方法参数一致

htttp://127…0.0.1:8080/test?name=张三

@RequestMapping("/test")
public String test(String name){
    model.addAttribute("mgr",name);
    return "next";
(2)提交名称与方法参数不一致

htttp://127…0.0.1:8080/test?username=张三

@RequestMapping("/test")
public String test(@RequestParam("username") String name){
    model.addAttribute("mgr",name);
    return "next";
(3)提交对象

htttp://127…0.0.1:8080/test?name=张三&sex=男&age=21

(1)新建实体类User

(2)传参

参数名必须和对象变量名 一致,不然参数为空

@RequestMapping("/test")
public String test(User user){
    System.out.println(user);
    return "next";

3、解决数据传输乱码

​ Spring内置过滤器

<filter>
    <filter-name>filter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>utf-8</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>filter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

三、拦截器

Spring的拦截器,与之前Javaweb中的过滤器作用相同

1.编写拦截器类,需要继承HandlerInterceptor接口

public class Myinterceptor implements HandlerInterceptor {
    //return true 放行
    //return false 停止运行,不推荐使用
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("-----------程序运行之前--------------");
        //获取URI(URL中的控制器)
        if(request.getRequestURI().contains("login")){//只要URI中包含login就放行
            System.out.println("包含log:放行");
            return true;
        }
        //获取Session
        String session = (String) request.getSession().getAttribute("testsession");
        //没有Session代表没登录,让去登陆
        if(session==null||session==""){
            System.out.println("叉出去");
            request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request,response);
        }
        System.out.println("包含session,放行");
        return true;
    }
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("-----------程序运行之后--------------");
    }
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("-----------清理开始运行--------------");
    }
}

2.Spring注册拦截器

<!--  拦截器设置  -->
    <mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/**"/>
            <bean class="com.xawl.interceptor.fillter.Myinterceptor"/>
        </mvc:interceptor>
    </mvc:interceptors>

3.总结
拦截级别:方法级别的拦截
拦截方式:独立的AOP方式

四、JSON

json是一种轻量级的数据交换格式、使用文本格式来存储数据
作用:前后端分离:
后段部署、负责提供接口、提供数据;前段接收展示

Java对象装换为JSON字符串,发送至前端

第一种方式:新建对象转换

		//新建对象
        User user = new User();
        user.setName("张三");
        user.setAge(12);
        user.setSex("男");
        model.addAttribute("user_java",user);
        //JSON对象
        ObjectMapper om = new ObjectMapper();
        //转换
        String s = om.writeValueAsString(user);
        model.addAttribute("user_json",s);

第二种方式:封装类方法调用

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.10.0</version>
</dependency>
 //新建日期
        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String format = sf.format(new Date());
        model.addAttribute("user_java",new Date());
        String s = JSON.toJSONString(format);
        model.addAttribute("user_json",s);

JSON过滤器: 在前后端交互中,传输JSON字符串,出现中文乱码问题:

<!--JSON乱码问题-->
<!--处理器映射器,处理器适配器合二为一,被整合为:-->
<mvc:annotation-driven>
    <mvc:message-converters register-defaults="true">
        <bean class="org.springframework.http.converter.StringHttpMessageConverter">
            <constructor-arg value="UTF-8"/>
        </bean>
        <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
            <property name="objectMapper">
                <bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean">
                    <property name="failOnEmptyBeans" value="false"/>
                </bean>
            </property>
        </bean>
    </mvc:message-converters>
</mvc:annotation-driven>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值