在Spring MVC中,配置视图解析器可以帮助将Controller返回的字符串转换为实际的页面地址。以下是配置视图解析器的步骤:
- 选择视图解析器 :根据使用的模板技术,选择合适的视图解析器。常见的视图解析器有
InternalResourceViewResolver
、ThymeleafViewResolver
等。 - 配置前缀和后缀:在视图解析器的配置中,通常需要设置前缀(prefix)和后缀(suffix)。前缀指的是存放页面文件的目录,后缀则是页面文件的扩展名。例如,如果设置前缀为"/WEB-INF/views/",后缀为".jsp",那么当Controller返回逻辑视图名"home"时,视图解析器会将其解析为"/WEB-INF/views/home.jsp"。
- 配置视图解析器 :可以在XML配置文件中使用
<bean>
标签来定义视图解析器,或者通过Java Config的方式进行配置。 - 理解工作原理:当DispatcherServlet接收到一个HTTP请求时,它会调用HandlerMapping来查找处理该请求的Controller。Controller处理完请求后,会返回一个逻辑视图名。然后DispatcherServlet会使用配置的视图解析器将逻辑视图名解析成实际的页面地址,并将该地址的内容返回给客户端。
XML
#yml配置
spring:
mvc:
# 视图解析器
view:
prefix: /imf/
suffix: .html
# 静态资源访问前缀(区分动态资源和静态资源)
static-path-pattern: /imf/**
# 静态资源的加载路径
resources:
static-locations: classpath:/templates/
将Controller返回的字符串填写到地址栏中,通常涉及到前端页面的跳转和后端Controller的返回值处理。以下是一些可能的方法:
- 使用重定向:在Controller中,可以通过返回"redirect:目标URL"的方式来实现页面的重定向。这样,浏览器会自动将"目标URL"加载到地址栏中。
- 视图解析器:如果Controller返回的是一个字符串,这个字符串可以被视作逻辑视图名。通过配置视图解析器(ViewResolver),可以将逻辑视图名解析成实际的页面地址,并显示在地址栏中。
- 直接返回地址:在某些情况下,Controller可以直接返回一个代表URL的字符串,前端页面可以通过JavaScript等技术将这个URL设置到地址栏中。
- 前端页面操作 :在前端页面中,可以使用JavaScript的
window.location.href
或者history.pushState()
等方法来改变地址栏中的URL。 - 表单提交 :如果是通过表单提交的方式,可以在表单的
action
属性中填写Controller返回的字符串作为处理的URL,提交后浏览器会自动更新地址栏。 - Ajax请求:在使用Ajax进行页面局部刷新时,虽然可以获取到Controller返回的数据,但不会改变地址栏中的URL。如果需要改变地址栏,可以在Ajax请求成功后,使用JavaScript进行操作。
当使用Springboot配置视图解析器时,
一定不能使用@RestController注解,需要替换成@Controller
@RestController 是一个组合注解 ,@Controller和@ResponseBody的结合。当使用@RestController 注解的类时,其中的方法默认返回的数据会直接以JSON或XMl格式写入HTTP响应体,而不是作为视图解析。这意味着@RestController 适用于构建Restful风格的API,主要用于前后端分离的机构中。
@Controller 这是一个传统的控制器注解,用于处理客户端发起的请求。当使用@Controller注解的类时,其中的方法通常返回视图名称(如JSP界面),由视图解析器处理。这适用于传统的MVC架构,其中控制器负责返回视图,而不是直接数据。
小结:@RestController 适合用于构建返回数据(如Json或XMl) 的Restful API,而@Controller 更适合于需要渲染视图(如Html界面)的传统MVC应用。