SpringBoot如何返回页⾯
SpringBoot中使⽤Controller和页⾯的结合能够很好地实现⽤户的功能及页⾯数据的传递。但是在返回页⾯的时候竟然会出现404或者500的错误,我总结了⼀下如何实现页⾯的返回以及这⾥⾯所包含的坑。
SpringBoot中对Thymeleaf的集成已经基本完善,但在特殊情况下,并不需要或者不能使⽤Thymeleaf,所以分成两种情况对页⾯的返回进⾏阐述。
⾸先说⼀下这两种情况下都会发⽣的错误,也是新⼿们经常会出现的错误。
直接上代码:
@RestController
public class TestController {
@RequestMapping("/")
public String index() {
return "index";
}
}
这个代码的初衷是返回index.html页⾯,但是执⾏的结果是在页⾯中输出index。thymeleaf用法
原因分析:@RestController注解相当于@ResponseBody和@Controller合在⼀起的作⽤。在使⽤@RestController注解Controller
时,Controller中的⽅法⽆法返回jsp页⾯,或者html,配置的视图解析器 InternalResourceViewResolver不起作⽤,返回的内容就是Return ⾥的内容。
包括在Mapping注解使⽤的同时使⽤@ResponseBody时也会出现同样的问题。
解决办法:①去除@ResponseBody或将含有Rest的注解换成对应的原始注解;
②不通过String返回,通过ModelAndView对象返回,上述例⼦可将return语句换成下⾯的句⼦:
return new ModelAndView("index");
在使⽤ModelAndView对象返回的时候,不需要考虑有没有@ResponseBody类似的注解。
还有⼀个需要注意的点:@RequestMapping中的路径⼀定不要和返回的页⾯名称完全相同,这样会报500的错误!!!!
如下⾯这样是不⾏的:
@Controller
public class TestController {
@RequestMapping("/index")
public String idx() {
return "index";
}
}
--------------------------------------------------------分隔线-----------------------------------------------
1、在不使⽤模板引擎的情况下:
在不使⽤模板引擎的情况下,访问页⾯的⽅法有两种:
1)将所需要访问的页⾯放在resources/static/⽂件夹下,这样就可以直接访问这个页⾯。如:
在未配置任何东西的情况下可以直接访问:
⽽同样在resources,但是在templates⽂件夹下的login.html却⽆法访问:
2)使⽤redirect实现页⾯的跳转
⽰例代码(在页⾯路径和上⾯⼀致的情况下):
@Controller
public class TestController {
@RequestMapping("/map1")
public String index() {
return "redirect:index.html";
}
@RequestMapping("/map2")
public String map2() {
return "redirect:login.html";
}
}
执⾏结果:
这说明这种⽅法也需要将html⽂件放在static⽬录下才能实现页⾯的跳转。
当然还是有终极解决⽅案来解决这个存放路径问题的,那就是使⽤springmvc的配置:spring:
mvc:
view:
suffix: .html
static-path-pattern: /**
resources:
static-locations: classpath:/templates/,classpath:/static/
这样配置后,map1和map2都可以访问到页⾯了。
2、使⽤Thymeleaf模板引擎:
先将所需要的依赖添加⾄l
<!-- mvnrepository/artifact/org.springframework.boot/spring-boot-starter-thymeleaf -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
<version>2.1.6.RELEASE</version>
</dependency>
同样的页⾯路径下将controller代码修改成下⾯的代码:
@Controller
public class TestController {
@RequestMapping("/map1")
public String index() {
return "index";
}
/** 下⾯的代码可以实现和上⾯代码⼀样的功能 */
/*public ModelAndView index() {
return new ModelAndView("index");
}*/
@RequestMapping("map2")
public String map2() {
return "login";
}
}
执⾏结果:
这⼜说明⼀个问题,所需要的页⾯必须放在templates⽂件夹下。当然也可以修改,更改配置⽂件:
spring:
thymeleaf:
prefix: classpath:/static/
suffix: .html
cache: false #关闭缓存
更改prefix对应的值可以改变Thymeleaf所访问的⽬录。但好像只能有⼀个⽬录。
综上:模板引擎的使⽤与否都可以实现页⾯的访问。区别在于页⾯所存放的位置以及访问或返回的时候后缀名加不加的问题。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论