WEB-INF下jsp之间的跳转

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项目下的一种跳转方式:

  1. 添加跳转的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第一的访问路径
Java Web开发中,通常我们会把jsp文件放在WEB-INF目录下,以保证jsp文件的安全性。但是,这样也会导致jsp文件无法直接通过URL访问。如果我们需要在servlet中跳转WEB-INF目录下的jsp文件,可以采用以下两种方式: 方式一:使用RequestDispatcher 在servlet中,我们可以使用RequestDispatcher对象来跳转WEB-INF目录下的jsp文件,示例代码如下: ```java RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/views/example.jsp"); dispatcher.forward(request, response); ``` 其中,"/WEB-INF/views/example.jsp"是要跳转jsp文件路径。 方式二:使用重定向 在servlet中,我们也可以使用重定向来跳转WEB-INF目录下的jsp文件,示例代码如下: ```java response.sendRedirect(request.getContextPath() + "/WEB-INF/views/example.jsp"); ``` 其中,request.getContextPath()获取的是当前Web应用程序的上下文路径,如"/myapp"。需要注意的是,使用重定向需要在web.xml文件中配置jsp文件的映射路径,示例代码如下: ```xml <servlet> <servlet-name>example</servlet-name> <servlet-class>com.example.ExampleServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>example</servlet-name> <url-pattern>/example</url-pattern> </servlet-mapping> <jsp-config> <jsp-property-group> <url-pattern>/WEB-INF/views/example.jsp</url-pattern> </jsp-property-group> </jsp-config> ``` 其中,url-pattern标签中的路径"/example"是servlet的访问路径,可以根据实际情况修改。需要注意的是,这种方式会暴露WEB-INF目录下的jsp文件路径,不太安全。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值