Spring MVC 响应视图(六)
程序员文章站
2022-08-05 20:30:39
完整的项目案例: springmvc.zip 目录 实例 除了依赖spring-webmvc还需要依赖jackson-databind(用于转换json数据格式) 项目结构: 配置web.xml
view code
view code
view code
view code
view code
完整的项目案例:
目录
实例
除了依赖spring-webmvc还需要依赖jackson-databind(用于转换json数据格式)
<dependency>
<groupid>com.fasterxml.jackson.core</groupid>
<artifactid>jackson-databind</artifactid>
<version>2.9.6</version>
</dependency>
项目结构:
配置web.xml
<?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>
配置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)
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"; } }
(responsebodycontroller)
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; } }
(requestbodycontroller)
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"; } }
(usercontroller)
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"; } }