SpringMvc访问页面显示源码(<url-pattern>)

4 篇文章 0 订阅
1 篇文章 0 订阅
<url-pattern>写成/和/*的区别
<url-pattern>/</url-pattern>
此会匹配到/springmvc这样的路径型url,不会匹配到模式为*.jsp这样的后缀型url。
<url-pattern>/*</url-pattern>:
此会匹配所有的url:路径型的和后缀型的url(包括/springmvc,.jsp,.js和*.html等)。 
<url-pattern>/*</url-pattern>

这种形式将会覆盖所有其它的servlet。不管你发出了什么样的请求,最终都会在这个servlet中结束。因此,对于servlet来说,这是一个很糟糕的URL模式。通常来讲,你只会想要在一个Filter中使用这种模式。它可以通过调用doFilter()方法来使请求继续。

<url-pattern>/</url-pattern>

这种形式不会覆盖任何其它的servlet。它仅仅替换了servlet容器中内建的默认servlet。这种形式通常只用来请求静态资源(CSS/JS/image等)和展示目录的列表。servlet容器内建的默认servlet同样可以处理HTTP cache请求、媒体(声音/视频)流以及文件的下载。通常来说,你不会想要覆盖这个默认的servlet,否则,你将不得不自己处理一些琐碎的任务。因此,对于sevlet来说,这同样是一个糟糕的URL模式。说到为什么JSP页面的请求并不会命中这个servlet,那是因为servlet容器内建的JSP servlet将会被调用,而这个容器内建的JSP servlet已经默认地映射在了*.jsp上。

<url-pattern></url-pattern> 

这种空串的形式。当上下文的根被请求的时候,它将被调用。这与的方式是不同的,因为这种形式在当任何子目录被请求的时候不会被调用。当你期望一个“首页servlet”的时候,这种URL模式就是适合你的。

原文链接:

http://stackoverflow.com/questions/4140448/difference-between-and-in-servlet-mapping-url-pattern

以上对<url-pattern> /* </url-pattern> 做出简单色叙述,那么在返回页面是为什么会显示源码呢?
因为<url-pattern> /* </url-pattern> 会匹配*.jsp,导致进入spring的DispatcherServlet 类,然后去寻找controller,接着找不到对应的controller所以报错。这样请求返回到浏览器,页面显示的是jsp源码。
原因如下:
首先参看一下springmvc.xml配置文件:

<!-- 配置自动扫描包 -->
    <context:component-scan base-package="wangsf.springmvc.crud"></context:component-scan>

    <!-- 添加注解驱动 --> 
    <mvc:annotation-driven></mvc:annotation-driven>
    <!-- 允许对静态资源文件的访问 -->   
    <mvc:default-servlet-handler/>

    <!-- 配置视图解析器 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/views/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>

其中 <mvc:default-servlet-handler />(允许对静态资源文件的访问)配置导致了一个的结果就是把.jsp,.sql,*.txt都当做txt处理。结果就是直接在浏览器加载了jsp源码。
但是有人会想不配置此项,不就不会出现这种显示源码情况,这种想法是不对的,因为如果不配置上述对静态资源处理的代码,那么结果是找不到对应的controller,所以会报错,页面显示404错误。所以静态资源的处理配置肯定是要加的。
还有一种就是不使用<url-pattern>/</url-pattern>,用某个固定的后缀,比如<url-pattern>*.do</url-pattern>,那么controller的@RequestMapping(value = “/xxx.do”)这样的,在浏览器地址栏直接方法:http://localhost:8080/xxx.do 即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值