欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Spring MVC 响应视图(六)

程序员文章站 2022-08-05 20:30:39
完整的项目案例: springmvc.zip 目录 实例 除了依赖spring-webmvc还需要依赖jackson-databind(用于转换json数据格式) 项目结构: 配置web.xml

完整的项目案例: 

目录

Spring MVC 响应视图(六)

 

实例

除了依赖spring-webmvc还需要依赖jackson-databind(用于转换json数据格式)

<dependency>
<groupid>com.fasterxml.jackson.core</groupid>
<artifactid>jackson-databind</artifactid>
<version>2.9.6</version>
</dependency>

项目结构:

Spring MVC 响应视图(六)

配置web.xml

Spring MVC 响应视图(六)
<?xml version="1.0" encoding="utf-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/xmlschema-instance"
         xsi:schemalocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <!-- 请求总控器 -->
    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.dispatcherservlet</servlet-class>
        <init-param>
            <param-name>contextconfiglocation</param-name>
            <param-value>classpath:dispatcher-servlet.xml</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>
view code

配置dispatcher-servlet.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"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemalocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <context:component-scan base-package="edu.nf.ch06.controller"/>

    <mvc:annotation-driven/>

    <mvc:default-servlet-handler/>

    <!-- springmvc提供了很多种视图解析器来完成不同的视图解析工作,
     例如内部资源视图解析器、模板引擎的视图解析器、xml视图解析器等等
     ,而在配置文件中是可以同时配置多个视图解析器的,那么springmvc
     在做视图响应的时候,会根据配置文件中的配置的所有视图解析器按照顺序
     进行匹配,直到找到一个合适的视图解析器来完成解析。当有多个视图解析器存在时,
     可以通过order属性来指定解析器的优先级(<property name="order" value="0"/>)-->
    <bean class="org.springframework.web.servlet.view.internalresourceviewresolver">
        <property name="prefix" value="/web-inf/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

</beans>

请求控制器controller

(redirectattributescontroller)

Spring MVC 响应视图(六)
package edu.nf.ch06.controller;

import edu.nf.ch06.entity.users;
import org.springframework.stereotype.controller;
import org.springframework.web.bind.annotation.getmapping;
import org.springframework.web.bind.annotation.modelattribute;
import org.springframework.web.bind.annotation.postmapping;
import org.springframework.web.servlet.mvc.support.redirectattributes;

/**
 * @author wangl
 * @date 2018/10/31
 * 使用redirectattributes解决重定向传参的问题
 * 这个对象是在springmvc 3.1的版本加入的
 */
@controller
public class redirectattributescontroller {

    /**
     * 重定向一个jsp页面,使用addattribute的方式
     * 将参数绑定在重定向的url后面带回到页面
     * @param user
     * @param redirectattributes
     * @return
     */
    @postmapping("/redirect3")
    public string redirectpage(users user, redirectattributes redirectattributes){
        redirectattributes.addattribute("user", user.getusername());
        return "redirect:redirectattr.jsp";
    }

    /**
     * 重定向一个新的请求,使用flushattribute的方式,
     * 将数据存入一个flushmap中,它利用了session的机制保存,
     * 在重定向完成之后会自动清除这个对象
     *
     * @param user
     * @param redirectattributes
     * @return
     */
    @postmapping("/redirect4")
    public string redirectreq(@modelattribute("user") users user, redirectattributes redirectattributes){
        redirectattributes.addflashattribute("user", user);
        return "redirect:redirectaction";
    }

    /**
     * 从redirect4的请求重定向到这个方法
     * @param user
     * @return
     */
    @getmapping("/redirectaction")
    public string getredirectattr(@modelattribute("user") users user){
        system.out.println(user.getusername());
        return "index";
    }
}
view code

(responsebodycontroller)

Spring MVC 响应视图(六)
package edu.nf.ch06.controller;

import edu.nf.ch06.entity.users;
import org.springframework.stereotype.controller;
import org.springframework.web.bind.annotation.getmapping;
import org.springframework.web.bind.annotation.responsebody;
import org.springframework.web.bind.annotation.restcontroller;

/**
 * @author wangl
 * @date 2018/10/31
 */
//@controller

/**
 * @restcontroller是在spring4.0后新加入的一个注解,
 * 同样用于标注一个类为控制器组件,如果当前控制器中所有的
 * 请求处理方法都需要以responsebody的方式响应,那么
 * 就是用这个注解,而不需要再每一个方法上都标注@responsebody注解
  */
@restcontroller
public class responsebodycontroller {

    /**
     * 使用@responsebody标注,
     * 表示将方法的返回值以response输出流写回客户端,
     * 这时,springmvc就会将序列化的数据放入响应体中并写回
     * @return
     */
    @getmapping("/getuser")
    public users getuser(){
        users user = new users();
        user.setusername("user1");
        user.setage(21);
        return user;
    }
}
view code
(requestbodycontroller)
Spring MVC 响应视图(六)
package edu.nf.ch06.controller;

import edu.nf.ch06.entity.users;
import org.springframework.web.bind.annotation.postmapping;
import org.springframework.web.bind.annotation.requestbody;
import org.springframework.web.bind.annotation.restcontroller;

/**
 * @author wangl
 * @date 2018/10/31springmvc
 */
@restcontroller
public class requestbodycontroller {

    /**
     * 接收ajax提交的数据并做类型转换映射
     * @param user
     * @return
     */
    @postmapping("/adduser")
    public string adduser(users user){
        system.out.println(user.getusername());
        system.out.println(user.getage());
        return "success";
    }

    /**
     * 是用@requestbody标注参数,
     * 表示将接收的json文本数据进行格式转换后映射到实体中
     * @param user
     * @return
     */
    @postmapping("/adduser2")
    public string adduser2(@requestbody users user){
        system.out.println(user.getusername());
        system.out.println(user.getage());
        return "success";
    }
}
view code
(usercontroller)
Spring MVC 响应视图(六)
package edu.nf.ch06.controller;

import edu.nf.ch06.entity.users;
import org.springframework.stereotype.controller;
import org.springframework.ui.model;
import org.springframework.web.bind.annotation.getmapping;
import org.springframework.web.servlet.modelandview;
import org.springframework.web.servlet.view.redirectview;

import java.util.map;

/**
 * @author wangl
 * @date 2018/10/31
 */
@controller
public class usercontroller {

    /**
     * 转发视图
     */
    @getmapping("/forwrd1")
    public modelandview forward1(){
        //通过modelandview转发
        return new modelandview("index");
    }

    @getmapping("/forwrd2")
    public string forward2(){
        //通过modelandview转发
        return "index";
    }

    /**
     * 重定向视图
     * @return
     */
    @getmapping("/redirect1")
    public modelandview redirect1(){
        //在modelandview的构造方法传入一个redirectview的视图对象来完成重定向
        //return new modelandview(new redirectview("redirect.jsp"));
        //简化
        return new modelandview("redirect:redirect.jsp");
    }

    @getmapping("/redirect2")
    public string redirect2(users user){
        return "redirect:redirect.jsp";
    }
}
view code