spring MVC项目中,欢迎页首页根路径
参考:http://iammr.7.blog.163.com/blog/static/49102699201222643458216
0. 问题: 如何改mvc中项目的欢迎页,或者叫做根路径
一个东西快弄完了,就剩下一个问题,应该是个小问题。就是mvc项目的欢迎页,怎么给改下呢。
这个项目是通过mvn建立的,整个项目的原型就是spring_mvc_jpa_deom_archetype。框架早早建成,即可看到效果。假如项目名称叫做mvn_mvc,其效果如下:
访问根路径 http://localhost:8080/mvn_mvc/自动跳转到如下路径 http://localhost:8080/mvn_mvc/spring/接下来的访问都是带着"spring"这个前缀的 http://localhost:8080/mvn_mvc/spring/person/list很显然不想带着这个“spring”前缀,改名或干掉,直接位于/ 下
问题就是怎么修改这个默认的路径!
1. 缺省的流程
先看看缺省的根路径流程:
web.xml 中什么没有配置任何有关欢迎页的信息!其实这时等效于如下配置:这个会由Web容器最先访问!
//-未指定欢迎页时,缺省等于如下配置。这个应该不同的Web服务器可以设置,但大多数都如此- <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> </welcome-file-list>
而项目目录下,有个index.html文件,进行了跳转:
<html> <head> <meta http-equiv="Refresh" content="0; URL=spring/"> </head> </html>
跳转到的url全路径就相当于 http://localhost:8080/mvn_mvc/spring/。这个路径就会由mvc 的DispatcherServlet来处理。为什么呢,是因为web.xml中进行了如下url配置:
<servlet> <servlet-name>appServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/spring/app/servlet-context.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet><servlet-mapping> <servlet-name>appServlet</servlet-name> <url-pattern>/spring/*</url-pattern> </servlet-mapping>
此时, http://localhost:8080/mvn_mvc/spring/,根据此规则,就会对应为MVC 路径路由中的 /。也就是HomeController。
@Controller public class HomeController { @RequestMapping(value = "/", method = RequestMethod.GET) public String home(Model model) { return "home"; } }
然后找到对应的home.jsp。
整个流程如此。其实缺省为什么设置这么一个spring路径。主要目的是为了提升spring对url的处理效率。spring/下的分支都交由spring来处理,其它的就可以交由web 服务器。
如果一切都交给spring处理,我们就要将 / 进行拦截。嗯,一定会由很多静态资源、或者其它动态jsp是另有用途,也会先被spring拦截,然后再当做另外来处理。可以是可以,但是效率上就会觉得多了一步。
但是,另一方面,我们在规划url时,可能会尽可能的减短,以方便用户的输入;同时,规划url时,才不会考虑spring的效率呢,也就是url设计先行。这个时候,通常不会有spring这个特定的路径;也就是spring要将就url的规划。也就是要对 / 进行拦截了。
2. 如何直接对根路径进行拦截
还是直接说流程吧:
必须在web.xml中加入如下:
<welcome-file-list> <welcome-file></welcome-file> </welcome-file-list>
此时,web服务器就知道,根路径不要web服务器来处理,而是由程序自身来处理。这时,index.html也就不起作用了。
然后,根路径就被 HomeCtroller拦截了;因为其中配置了对"/"的映射。
或者,没有controller,只有view,也可以简化,在servlet的配置文件中加入:
<mvc:view-controller path="/" view-name="index"/>
如果同时都有。反正只会有一个起作用。一般是先扫描的起作用。谁会先扫描到,就是看和<mvc:annotation-driven />比较,谁在前面。
3. 为什么要去他大爷的
终于明白事后诸葛亮真的很容易当,完全忘记了事前猪一样!
这个流程很简单,但是在弄清楚之前却浪费了一个周末去解决。还记得到处网上找,或者下源代码断点研究,或者参考例子对照配置。直到今天上午都没有头绪。始终找不到规律,没有把对根路径的拦截给实现。然后中午按时出去吃个饭,吃完饭回来又摆弄下电脑,发现正在运行的那个项目,一切都尽随心所欲,正常的太不正常。
难道是mvn tomcat:run 运行时,存在缓存!!!所以每次修改配置文件时,并没有立刻生效。记得之前用mvn tomcat:run或者mvn jetty:run 或者eclipse中的mavent调试,都试过,都不正常的!这次就直接发布到Tomcat6中,每次直接改配置文件,重启,查看。居然就全好了。
得出如此结论,第一句话,就是maven的大爷遭殃了。
不过其它一些东西也值得借鉴:
- maven jetty:run运行时,改web.xml 不知道是否会有缓存影响,不能立刻生效;多刷新浏览器。
- 可以看看项目启动日志,里面每个url映射到哪个controller,都有输出。
- <mvc:annotation-driven />最好不要多次调用,调用一次,全包扫描一次,会发现日志中出现一遍扫描映射纪录
- 对路径拦截,/ 和 /* 还是有什么区别。参考:http://bluxte.net/musings/2006/03/29/servletpath-and-pathinfo-servlet-api-weirdness。
爽了,原谅他大爷了!
spring MVC项目中,欢迎页首页根路径相关推荐
- spring mvc项目中利用freemarker生成自定义标签
2019独角兽企业重金招聘Python工程师标准>>> spring mvc项目中利用freemarker生成自定义标签 博客分类: java spring mvc +freemar ...
- 如何在Spring和Spring MVC项目中进行测试
Spring框架概述 Spring大约包含了20个模块,这些模块组成了核心容器(Core Container).数据访问/集成(Data Access/Integration).Web.AOP(面向切 ...
- 在spring MVC项目中集成Spring session redis (使用spring session框架,redis作为存储缓存)...
2019独角兽企业重金招聘Python工程师标准>>> 1.为项目增加以来 pom.xml中使用 <!-- spring session 单点登录 --> //本项目使 ...
- spring mvc项目中,在jsp页面中输入中文时,提交到student.jsp页面后,结果显示中文乱码
在jsp页面中输入中文时,提交到student.jsp页面后,结果显示中文乱码 下面是相关代码截图 表单代码: 控制器类代码: springmvc配置文件代码: 用于显示的jsp页面: 修改之前的we ...
- Spring MVC 项目中配置log4j 出现错误log4j:ERROR Failed to excute sql com.mysql.jdbc.exceptions.jdbc4.MySQLSynt
错误信息如下: 2016-09-08 17:11:45 [com.mchange.v2.c3p0.C3P0Registry]-[INFO] Initializing c3p0-0.9.1.2 [bui ...
- [spring]maven项目中获取resources资源目录路径
项目的资源目录路径如下: package com.zzj.spring.boot.util; import java.io.*; import java.util.Properties; public ...
- Spring MVC 项目 JSP 页面显示源码
问题描述:Spring MVC 项目的 JSP 页面跳转显示源码,而非页面 原因:Spring MVC 项目的前端拦截器 拦截了 JSP 页面 改正:去掉 * 插曲:如果仅仅改动 JSP 头文件为 H ...
- Spring MVC环境中的文件上传功能实现
在实际开发过程中,尤其是web项目开发,文件上传和下载的需求的功能非常场景,比如说用户头像.商品图片.邮件附件等等.其实文件上传下载的本质都是通过流的形式进行读写操作,而在开发中不同的框架都会对文件上 ...
- 第一个使用Spring Tool Suite(STS)和Maven建立的Spring mvc 项目
一.目标 在这篇文章中.我将要向您展示怎样使用Spring Frameworks 和 Maven build创建您的第一个J2ee 应用程序. 二.信息 Maven是一个java项目的构建工具(或者自 ...
最新文章
- Vue.js框架简单读取数据库信息并渲染完成news新闻文章列表以及detail详情页功能(小试牛刀)
- 去掉字符串两端的全角空格和半角空格(含源代码)
- 成千上万的在线课程时,如何保持理智和学习编码
- [THINKING IN JAVA]访问权限控制
- JimuReport积木报表——主子报表如何设计
- 从黑马学完IT,能进大厂吗?会不会遭歧视?答案来了…
- 在linux4.19内核下的UPD720201驱动里添加固件下载的代码
- (Java-11)简单的银行账户模拟
- grldr引导iso PE img 文件
- 技术到管理岗位的角色转换:从优秀骨干到优秀管理者
- 逻辑综合重点解析(Design Compiler篇)
- ICP算法概述以及使用SVD进行算法推导
- 计算机组成原理调研报告,[调研报告]计算机组成原理课程设计报告模板2011.doc...
- 利用imu估计roll、pitch的理解
- Windows Linux对应软件
- 说说部署网站的奇葩事
- 学习笔记:带你十天轻松完成 Go 微服务系列(二)- 服务拆分
- cesium动态绘制圆,矩形,自定义区域
- 当我写不出来的时候,我在干嘛
- 百度收录自己的博客网址
热门文章
- 内容激活码jsp发送email
- PV(page view)
- flutter字体不跟随系统_flutter和native共用字体
- [Usaco2009 Feb]Revamping Trails 道路升级
- redis主备同步(使用)
- 35个设计一流的美味的水果壁纸欣赏
- 艾伟:memcached全面剖析–3.memcached的删除机制和发展方向
- Testing AJAX Applications with VSTS 2008
- 5G NR - 总体架构与物理层
- java B2B2C 源码多租户电子商城系统-Spring Cloud组件详解