Spring MVC中controller拦截问题
1、首先是位于WEB-INF下面的jsp是无法直接通过浏览器地址栏直接访问的。
如果把静态的资源(js、css等)放在其下面也是无法引用
2、可以在页面中采用转向方式(forward)访问web-inf下面的页面
但是你如果是采用了Spring MVC,可以采用控制器拦截的方式访问web-inf下面的jsp
例如:
控制器:此控制器处理"/"的请求
@Controller public class HomeController { @RequestMapping(value="/" ,method= RequestMethod.GET) //处理对"/"的请求 public String home(){ System.out.println("你好!!!"); return "home"; //视图为home } }
而位于web-inf下面的home.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Spittr</title> <link rel="stylesheet" type="text/css" href="<c:url value="/resources/style.css" />"> </head> <body> <h1>Welcome to Spittr</h1> <a href="<c:url value="spittles" />" >Spittes </a> <a href="<c:url value="/spittle/register" />">Register</a> </body> </html>
当在浏览器的地址栏输入:http://http://localhost:8080/SpringMVC/时,转到了
多样化探索:
@Controller
public class HomeController {
@RequestMapping(value="/" ,method= RequestMethod.GET) //处理对"/"的请求
public String home(){
System.out.println("你好!!!");
return "home"; //视图为home
}
@RequestMapping(value="/*" ,method= RequestMethod.GET) //处理对"/"的请求
public String hello(){
System.out.println("你好!!!");
return "hello"; //视图为home
}
@RequestMapping(value="/MyJsp" ,method= RequestMethod.GET) //处理对"/"的请求
public String MyJsp(){
System.out.println("你好!!!");
return "MyJsp"; //视图为home
}
}
输入:http://localhost:8080/SpringMVC/MyJsp,被 MyJsp()控制器处理
输入:http://localhost:8080/SpringMVC/,被home()控制器处理
输入:http://localhost:8080/SpringMVC/eee,被hello()控制器处理
输入:http://localhost:8080/SpringMVC/eee/12 ,报404
大致:项目名是必有的,而项目名之后的资源地址是要和value之后的“/"匹配处理的,多个“/”不行与单个不匹配