在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Java/ 為什么有的jsp頁面能跳轉到另外的jsp頁面,有的jsp卻進入后臺control

為什么有的jsp頁面能跳轉到另外的jsp頁面,有的jsp卻進入后臺controller呢?

什么時候會進入controller呢,是否跟web.xml的配置有關?
如何的超鏈接是直接進入對應的jsp頁面的,為啥不進入controller?
圖片描述

<div class="float_right">
                您的位置:<a href="/ehouse/jsp/index.jsp">首頁</a> ><a href="#">城市運營</a>
            </div>
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath*:config/spring-*.xml</param-value>
  </context-param>
  <servlet>
    <servlet-name>springMVC</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath*:config/spring-mvc.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>springMVC</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
  <listener>
    <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
  </listener>
  <filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
      <param-name>forceEncoding</param-name>
      <param-value>true</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>
回答
編輯回答
冷咖啡

<url-pattern>/</url-pattern>:
會匹配到/springmvc這樣的路徑型url,不會匹配到模式為*.jsp這樣的后綴型url。

<url-pattern>/*</url-pattern>:
會匹配所有的url:路徑型的和后綴型的url(包括/springmvc,.jsp,.js和*.html等)。

It will accept http://host:port/context/hello, but reject http://host:port/context/hello.jsp

下面是關于這個問題在stack overflow上的解釋:
原文鏈接:http://stackoverflow.com/ques...

2017年9月12日 07:44
編輯回答
枕邊人

一個指向的是后臺地址,一個跳向的是指定的頁面。跳向后臺你可以看看web.xml,有攔截器攔截

2018年7月9日 23:47
編輯回答
耍太極

先回答你的第二個問題吧,這里用到了視圖解析器,根據請求路徑解析參數,再去找相應的視圖

    @Bean
    public ViewResolver viewResolver () {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        //配置JSP視圖解析器
        resolver.setPrefix("/WEB-INF/views/");
        resolver.setSuffix(".jsp");
        resolver.setExposeContextBeansAsAttributes(true);
        return resolver;
    }

還有一點,你映射了所有的請求路徑,只要訪問“/”它就會被攔截

public class SpitterWebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
    @Override
    protected String[] getServletMappings() {             //將DispatcherServlet映射到“/”
        return new String[]{"/"};
    }

    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class<?> [] {RootConfig.class};
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class<?> [] { WebConfig.class};
    }
}

這里是你所要請求的映射路徑路徑,

@Controller
public class HomeController {
    @RequestMapping(value = "/",method = RequestMethod.GET)           //處理對“/”的Get請求
    public String home() {
        return "home";                                                //視圖名為home
    }
}

根據返回值進行選擇,

還有一種沒有返回值,

@RequestMapping(method = RequestMethod.GET)
public List<String> spittles() {
  return spittleRepository.findSpittles(Long.MAX_VALUE,20));
}

當處理器方法像這樣返回對象或集合時,這個值會放到模型中,模型的key會根據其類型推斷得出。
希望能幫助你,需要自己思考

2018年1月14日 23:43
編輯回答
兔寶寶

關鍵在于下面的設置,注意//*的區(qū)別 ,
映射路徑寫成了/*那樣會攔截所有的訪問,JSP頁面就不能直接訪問了

<servlet-mapping>
        <!-- 映射路徑,寫成了/*那樣會攔截所有的訪問,JSP頁面就不能直接訪問了 -->
        <servlet-name>springMVC</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

EDITED

如果還不是很清楚的話,可以看看tomcatN/conf/web.xml有關jsp設置一段

圖片描述

默認情況下,/路徑由default servlet來映射,主要用來處理靜態(tài)文件如html, js, css ,jpg等, 而jsp的映射方式是*.jsp, 顯然這里*.jsp的優(yōu)先級是大于/的,否則什么jsp都無法訪問了。

springMVC相當于是重載了default,所以行為也與default的映射關系是一致的。

2017年7月19日 16:11
編輯回答
笨尐豬

大部分的JSP為了安全起見都是放在WEB-INF文件目錄下,從而避免外部直接通過URL進行訪問。
所以通過Controller來實現JSP之間的跳轉可以說是一個比較好的實踐。

在配置文件中,跟URL跳轉有點關系的是這一部分代碼:

 <servlet-mapping>
    <servlet-name>springMVC</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

這里你使用SpringMVC作為控制器框架,并且將該域名下所有的路徑都指向該控制器。所以按理說你的所有跳轉都會從控制器走而不會去訪問專門的jsp文件。

這里你需要更改是你的HTML中href屬性,將其指向某個控制器匹配的路徑。這里給一個示范:

假設你有一個SpringMVC的控制器,代碼如下:

@Controller
@RequestMapping("/ehouse")
public class DemoController{

    //該控制器匹配得路徑為/ehouse/index
    @RequestMapping("/index")
    public String index(){
        //這里可以配置一下SpringMVC的prefix和suffix
        //返回的是對應的jsp頁面的路徑
        return "/jsp/index.jsp";
    }
}

然后將HTML改成這樣:

<div class="float_right">
   您的位置:
    <a href="/ehouse/index">首頁</a> ><a href="#">城市運營</a>
</div>
2018年3月18日 10:19