为什么有的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>
回答:
关键在于下面的设置,注意/
与/*
的区别 ,
映射路径写成了/*
那样会拦截所有的访问,JSP页面就不能直接访问了
<servlet-mapping> <!-- 映射路径,写成了/*那样会拦截所有的访问,JSP页面就不能直接访问了 -->
<servlet-name>springMVC</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
EDITED
如果还不是很清楚的话,可以看看tomcatN/conf/web.xml
有关jsp设置一段
默认情况下,/
路径由default
servlet来映射,主要用来处理静态文件如html, js, css ,jpg等, 而jsp的映射方式是*.jsp
, 显然这里*.jsp
的优先级是大于/
的,否则什么jsp
都无法访问了。
springMVC相当于是重载了default,所以行为也与default的映射关系是一致的。
回答:
大部分的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>
回答:
先回答你的第二个问题吧,这里用到了视图解析器,根据请求路径解析参数,再去找相应的视图
@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};
}
}
这里是你所要请求的映射路径路径,
@Controllerpublic 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会根据其类型推断得出。
希望能帮助你,需要自己思考
回答:
<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...
回答:
一个指向的是后台地址,一个跳向的是指定的页面。跳向后台你可以看看web.xml,有拦截器拦截
以上是 为什么有的jsp页面能跳转到另外的jsp页面,有的jsp却进入后台controller呢? 的全部内容, 来源链接: utcz.com/p/181217.html