首页 > 技术文章 > Spring MVC中controller拦截问题

mswangblog 2017-03-12 16:27 原文

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之后的“/"匹配处理的,多个“/”不行与单个不匹配

推荐阅读