WEB-INF下jsp之间的跳转
在做项目的过程中,发现自己在WEB-INF目录下jsp页面的相互跳转出现了问题,无论是用相对路径还是绝对路径都报错,后来发现这是JSP的安全性在作怪,WEB-INF目录下的东西是不能被用户访问的,提高了安全性,但有时候我们需要访问该页面时,要怎么做呢?
普通web项目:
- 方式一 : 使用request.getRequestDispatcher("/WEB-INF/views/a.jsp").forward(request,response);
注意 : 不能使用重定向
如WEB-INF/views目录下有a.jsp和b.jsp两个页面,你想由a跳转到b.
可在webapp目录下新建一个jsp页面c.jsp,先由a.jsp跳转到c.jsp,再由c.jsp跳转到b.jsp.
a.jsp
<a href="<%=basePath%>c.jsp">跳转</a>
c.jsp
<a href="<%request.getRequestDispatcher("/WEB-INF/views/b.jsp").forward(request,response);%>">跳转</a>
b.jsp
- 方式二 : <jsp:forward page ="/WEB-INF/views/b.jsp" />
在webapp下新建一个c.jsp,在jsp写上上面的代码.a.jsp–>c.jsp–>b.jsp
- 方式三 : 在web.xml里面配置servlet和servlet mapping
<servlet>
<servlet-name>goto</servlet-name>
<jsp-file>/WEB-INF/views/b.jsp</jsp-file>--要跳转到的页面
</servlet>
<servlet-mapping>
<servlet-name>goto</servlet-name>
<url-pattern>/test</url-pattern>
</servlet-mapping>
配置好了就可以在a.jsp页面中使用a标签跳转了<a href=<%=basePath%>test">测试页面跳转</a>
SSM项目下的一种跳转方式:
- 添加跳转的controller
@RequestMapping("/page")
@Controller
public class PageController {
@RequestMapping("{pageName}")
public ModelAndView toPage(@PathVariable("pageName") String pageName){
ModelAndView mv = new ModelAndView(pageName);
return mv ;
}
}
2.spring-mvc中
<!-- 配置jsp 显示ViewResolver -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp"/>
</bean>
3.在jsp中的使用
<a href="<%=basePath%>/views/b">登陆</a>
/<%=basePath%> 项目名 可以省略,采用相对路径访问,也可以使用jsp的内置对象
/viewse controller第一的访问路径