其实很简单,根本不需要像网上那么麻烦
- 步骤1:将你的jsp依赖加载进来
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<artifactId>spring-boot-starter-tomcat</artifactId>
<groupId>org.springframework.boot</groupId>
</exclusion>
</exclusions>
</dependency>
<!-- spring boot 内置tomcat jsp支持 -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<scope>provided</scope>
</dependency>
<!-- spring boot 内置tomcat jsp支持 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
大致意思就是把Spring自带的tomcat排除,然后添加上Tomcat的支持,顺带加上一个自己的tomcat依赖,原因是这样你就可以打war包了(tomcat为provided)
- 步骤2:
- 你可以直接把jsp页面放到webapp下面,然后直接访问即可,哦对了,你首先得保证你的启动配置是对的,为了保证正确性,参考这个去做:
设置了以后呢,你的内嵌tomcat启动也会以你项目的webapp目录为base目录了,否则你目录都访问不到,你还想访问jsp? - 你也可以把他放到WEB-INF里面,由于Tomcat安全策略,该目录是不允许访问的,怎么办呢?按照网上的那些方法直接建立个Controller,然后转发?
- 你可以直接把jsp页面放到webapp下面,然后直接访问即可,哦对了,你首先得保证你的启动配置是对的,为了保证正确性,参考这个去做:
@Controller
@RequestMapping("/jsptest")
public class testJspController {
@RequestMapping
public void openTestJsp(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
return "farward:WEB-INF/reportFiles/test.jsp";
}
}
你可以试试,绝对行不通。。。因为你没在DispatchServlet中配置Jsp视图解析器(还真有这个解析器).
解释一下就是正常的jsp解析其实是由JspServlet控制的,而它和DispatchServlet是同级的.
当你直接访问服务器jsp文件的时候,如xxx.jsp(没放在WEB-INF里面),这个请求会直接被JspServlet给拦截到,因为它匹配(*.jsp)
所以你只要步骤二的 1 完成了,你现在就可以直接访问jsp了,当然你的其他模板的页面也照常访问即可,除非你作死的将其他模板的请求Url设置为.jsp结尾。
那怎么办呢?我想要既经过Controller层(想做权限控制,或数据处理啥的),又想访问Jsp,还不想把我原来的视图解析器给禁用。那就只能这样了,先经过Controller,再数据处理,再把真正的jsp路径作为一个新请求转发出去,当然不是return "xxx/xxx.jsp";这样子你仍然是无法访问的。正解是:
@Controller
@RequestMapping("/jsptest")
public class testJspController {
@RequestMapping
public void openTestJsp(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.getRequestDispatcher("WEB-INF/reportFiles/test.jsp").forward(request,response);
}
}
将这个请求丢到DispatcherServlet之外,让JspServlet拦截到xxx.jsp的请求,就可正常访问到Jsp文件了,同时相应的数据也已经在Controller层处理过了。
大概就是上图的样子了。
End.