SpringMvc学习(八)

响应数据和结果视图

1.返回值分类

搭建开发环境

<!--版本锁定-->
<properties>
  <spring.version>5.0.2.RELEASE</spring.version>
</properties>
<dependencies>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>${spring.version}</version>
  </dependency>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>${spring.version}</version>
  </dependency>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>${spring.version}</version>
  </dependency>
  <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>servlet-api</artifactId>
    <version>2.5</version>
    <scope>provided</scope>
  </dependency>
  <dependency>
    <groupId>javax.servlet.jsp</groupId>
    <artifactId>jsp-api</artifactId>
    <version>2.0</version>
    <scope>provided</scope>
  </dependency>
</dependencies>

前端控制器和过滤器

<!‐‐配置解决中文乱码问题的过滤器‐‐>
<filter>
<filter‐name>characterEncodingFilter</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>characterEncodingFilter</filter‐name>
<url‐pattern>/*</url‐pattern>
</filter‐mapping>
<!‐‐配置前端控制器‐‐>
<servlet>
<servlet‐name>dispatcherServlet</servlet‐name>
<servlet‐class>org.springframework.web.servlet.DispatcherServlet</servlet‐class>
<!‐‐加载springmvc.xml配置文件,配置的是Spring配置‐‐>
<init‐param>
<param‐name>contextConfigLocation</param‐name>
<param‐value>classpath:springmvc.xml</param‐value>
</init‐param>
<!‐‐配置启动加载‐‐>
<load‐on‐startup>1</load‐on‐startup>
</servlet>
<!‐‐‐‐>
<servlet‐mapping>
<servlet‐name>dispatcherServlet</servlet‐name>
<url‐pattern>*.do</url‐pattern>
</servlet‐mapping>

springmvc.xml配置文件

<?xml version="1.0" encoding="UTF‐8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema‐instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring‐beans.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring‐mvc.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring‐context.xsd"><!‐‐配置了内容,启动Tomcat服务器的时候,就会被加载‐‐>
<!‐‐配置注解扫描‐‐>
<context:component‐scan base‐package="com.qcby" />
<!‐‐配置视图解析器,进行页面的跳转‐‐>
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!‐‐跳转的页面的路径‐‐>
<property name="prefix" value="/pages/" />
<!‐‐跳转页面的后缀名称‐‐>
<property name="suffix" value=".jsp" />
</bean>
<!‐‐让映射器、适配器和处理器生效(默认不配置也是可以的)‐‐>
<mvc:annotation‐driven/>
</beans>

①、返回String
1. Controller方法返回字符串可以指定逻辑视图的名称,根据视图解析器转为物理视图的地址。

package com.qcby.demo1;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@Controller
@RequestMapping("/user")
public class UserController {
/**
* 返回String
* @return
*/
@RequestMapping("/save1.do")
public String save1(){
System.out.println("执行了...");
return "suc";
}}

②、返回值是void

  1. 如果控制器的方法返回值编写成void,执行程序报404的异常,默认查找JSP页面没有找到。
    1. 默认会跳转到@RequestMapping(value="/save2.do")/save2.do的页面。
  2. 可以使用请求转发或者重定向跳转到指定的页面
package com.qcby.demo1;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@Controller
@RequestMapping("/user")
public class UserController {
/**
* 返回void
* 默认查询 /pages/sav2.do.jsp的页面
* @return
*/
@RequestMapping("/save2.do")
public void save2(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
System.out.println("执行了...");
// request.getRequestDispatcher("/pages/suc.jsp").forward(request,response);
// 做出相应的操作
response.getWriter().print("hello");
return;
}
}

③、返回值是ModelAndView对象

  1. ModelAndView对象是Spring提供的一个对象,可以用来调整具体的JSP视图
  2. 具体的代码如下
/**
* 返回ModelAndView对象的方式
* @return
*/
@RequestMapping("/save3.do")
public ModelAndView save3(){
System.out.println("执行了...");
// 创建mv对象
ModelAndView mv = new ModelAndView();
// 把一些数据,存储到mv对象中
mv.addObject("msg","用户名或者密码已经存在");
// 设置逻辑视图的名称
mv.setViewName("suc");
return mv;
}

2. SpringMVC框架提供的转发和重定向

forward请求转发

  1. controller方法返回String类型,想进行请求转发也可以编写成
/**
* 返回String
* 请求转发(可以传值,一般用的多)
* @return
*/
@RequestMapping("/save4.do")
public String save4(){
System.out.println("执行了...");
return "forward:/pages/suc.jsp";
}

redirect重定向

  1. controller方法返回String类型,想进行重定向也可以编写成
/**
* 返回String
* 重定向(不能传值,直跳,一般用的少)
* @return
*/
@RequestMapping("/save5.do")
public String save5(){
System.out.println("执行了...");
return "redirect:/pages/suc.jsp";
}

3. ResponseBody响应json数据

json和JavaBean对象互相转换的过程中,需要使用jackson的jar包

<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>

DispatcherServlet会拦截到所有的资源,导致一个问题就是静态资源(img、css、js)也会被拦截到,从而不能被使用。解决问题就是需要配置静态资源不进行拦截,在springmvc.xml配置文件添加如下配置
标签配置不过滤

  1. location元素表示webapp目录下的包下的所有文件
  2. mapping元素表示以/static开头的所有请求路径,如/static/a 或者/static/a/b
<!‐‐ 设置静态资源不过滤 ‐‐>
<mvc:resources mapping="/css/**" location="/css/"/> <!‐‐ 样式 ‐‐>
<mvc:resources mapping="/images/**" location="/images/"/> <!‐‐ 图片 ‐‐>
<mvc:resources mapping="/js/**" location="/js/"/> <!‐‐ javascript ‐‐>

jsp代码编写

<%@ page contentType="text/html;charset=UTF‐8" language="java" %>
<html>
<head>
<title>Controller方法的返回值</title>
<%‐‐引入jq‐‐%>
<script src="/js/jquery.min.js" type="text/javascript"></script>
<script>
// 页面加载
$(function(){
// 单击事件
$("#btn").click(function(){
// 发送ajax的请求
$.ajax({
type: "post",
url: "/dept/save6.do",
contentType:"application/json;charset=UTF‐8",
data:'{"username":"haha","age":"20"}',
dataType: "json",
success:function(d){
// 编写很多代码
alert(d.username+" ‐ "+d.age);
}
});
});
});
</script>
</head>
<body>

<h3>异步的数据交互</h3>
<input type="button" value="ajax交互" id="btn">
</body>
</html>

后台代码编写

/**
* 异步的数据交互
* 重定向
* @return
*/
@RequestMapping("/save6.do")
public @ResponseBody User save6(@RequestBody User user){
System.out.println(user);
// 模拟,调用业务层代码
user.setUsername("hello");
user.setAge(100);
// 把user对象转换成json,字符串,再响应。使用@ResposeBody注解 response.getWriter().print()
return user;
}

实体类代码

package com.qcby.demo1;
import java.io.Serializable;

public class User implements Serializable{
private String username;
private Integer age;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "User{" +
"username='" + username + '\'' +
", age=" + age +
'}';
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值