关于spring mvc 的初学HelloWorld中的成功运行后的梳理
来源:互联网 发布:傲剑境界数据 编辑:程序博客网 时间:2024/06/06 05:21
welcome-file 的设置:若DispatcherServlet的url-patter的mapping为*.html,则不可以将welcome-file设定为(file-name).html,后缀名不可以再是html了,因为在Spring MVC的配置就是要针对*.html为后缀的页面请求进行处理,说白了,其实就是访问页面的跳转有了一个中间的名称的转换,为了安全(在/WEB-INF/底下的文件平常用户访问不到)和前后端设计的分开。
记住一点:
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
这个配置里面的url-pattern其实就是访问的网页地址,你若在程序中做了一个跳转到*.html的链接
(如<a href="hello.html">This is my JSP page. </a>)
那么spring mvc中的DispatcherServlet就会捕捉它并对该访问地址进行处理,表面上看访问的是*.html,实际上访问的却是另外一个文件路径,类似web.xml中的path和docBase
(2)各控制器和页面的关联参数是什么:
如(1)中所示,表面访问*.html,实际的访问路径是隐藏的,中间的转换需要被处理,怎么才能知道被处理的是这个跳转呢?假设我们跳转到haha.html,那么我们在处理怎么转换路径的过程中通过haha这个前缀名来关联中间的各个处理流程。
(3)在知道了真实的文件访问路径后,处理的流程究竟是什么?
WEB-INF/jsp/hello.jsp
<html>
<head>
<title>Spring 3.0 MVC Series: Hello World - ViralPatel.net</title>
</head>
<body>
${message}
</body>
</html>
这个是访问的真实路径和访问文件的代码。我们看到了${message}的代码,我们返回的是名为"message"的一个消息字符串ModelAndView对象。
那样我们整个过程中的真实流程是怎样的,首先,我先把各个文件的配置目录和文件的代码贴上:
<span style="color:#ff0000;">1、<!--文件位置/WEB-INF/spring-servlet.xml--></span><?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <context:component-scan base-package="net.viralpatel.spring3.controller" /> <bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /> <property name="prefix" value="/WEB-INF/jsp/" /> <property name="suffix" value=".jsp" /> </bean></beans>
<span style="color:#ff0000;"><!--文件位置2、/WEB-INF/web.xml--></span><?xml version="1.0" encoding="UTF-8"?><web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"><display-name>SpringMVC</display-name> <servlet> <servlet-name>spring</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet </servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>spring</servlet-name> <url-pattern>*.html</url-pattern> </servlet-mapping></web-app>
<span style="color:#ff0000;"><!--3、/WEB-INF/jsp/hello.jsp--></span><html><head> <title>Spring 3.0 MVC Series: Hello World - ViralPatel.net</title></head><body> ${message}</body></html>
<span style="color:#ff0000;">/*4、src/package....*/</span>package net.viralpatel.spring3.controller;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.servlet.ModelAndView; @Controllerpublic class HelloWorldController { @RequestMapping("/hello") public ModelAndView helloWorld() { String message = "Hello World, Spring 3.0!"; return new ModelAndView("hello", "message", message); }}
<span style="color:#ff0000;"><!--5、/WEB-INF/index.htm--></span><html> <head> <title>My starting page</title> </head> <body> <a href="hello.html">This is my JSP page. </a> </body></html>
spring jar包的导入这里就不说了,毕竟下载了jar包,手工复制到工程的/WEB-INF/lib文件夹下并在MyEclipse中配置好就可以了。
我们从使用者的观察路径来看整个过程:
首先我们会在tomcat的welcome-file的设定下进入index.htm页面,(记得该文章的第一个问题,因为会对后面是否能访问成功页面有影响)
------->
在index.htm的页面中我们可以看到一个<a>的链接,点击这个链接,是让我们进入hello.html的页面下,此时
------->
请看web.xml文件中的DispatcherServelet设置,这是对访问地址请求的一个分发处理的设定,只要tomcat容器在进行页面跳转请求时,会先看一下请求的链接地址是否包含.html,若包含,则进入spring mvc模式进行处理,传递一个参数<file-name>,记得,这个name里面是不含.html的,我们这个项目的传值是hello;若不包含,那就无所谓了,该干嘛干嘛去。
-------->
接下来我们就需要一个很high的决定了,那就是,怎么处理这个请求的链接呢?
先解释一下一个情况
这里有一点要注意<servlet-name>标签在web.xml中的servlet的名称。DispatcherServlet的初始化后,它会查找一个文件名[servlet-name]-servlet.xmlWeb应用程序的WEB - INF文件夹中。 在这个例子中,该框架将称为文件spring-servlet.xml寻找。
所以处理链接的流程就会再看spring-servlet.xml的配置了,来,诸位客官,我们看一下。
------->
系统在这一步先<context:component-scan....>根据这个扫描控制器(说白了就是一个class),在控制器中(HelloWorldController.java)我们看到了什么呢,首先我们看到了控制器@Controller的设定,表明这个是spring的控制器,然后我们看到了@RequestMapping(/hello)的设定,这个就是我们到底处理哪个页面请求的关联了,根据括号里面的内容,我们就知道应该处理哪个,像这个里面的hello,就是DispatcherServlet接收到请求后分发出来的参数,根据这个我们就知道要用这个控制器里的mapping的这个方法来处理并返回一个MAV(ModelAndView);
-------->
返回了一个MAV后呢?简单,你没有看到在spring-servlet.xml中的后面的配置吗?那个就是下面的工作了。那个设定就是要解析一下传回来的MAV,MAV中有三个参数,依次是(Viewname,要传递的属性名,要传递的属性值),在那个bean中org.springframework.web.servlet.view.UrlBasedViewResolver这个class是干什么的,它就是可以处理Viewname,根据<property>的设定,我们将Viewname加上前缀和后缀,在Controler里面我们返回的Viewname是hello,所以,把前缀后缀加上就是/WEB-INF/jsp/hello.jsp了。哈哈,这就是我们实际的访问路径了
------>
就这样,我们完成了从index.htm到/WEB-INF/jsp/hello.jsp的地址的转换。如果你没有忘记,我们的MAV中是有属性名和属性值的,呵呵了,在hello.jsp中的${message}就是可以提取这个属性值的表达式。
------->
如果你看完了这个,恭喜你,你的spring mvc的第一步已经成功迈出了,大步向前走吧。我来用成功后的图来表示一下祝贺。
看,显示的地址是hello.html,可实际访问的却是/WEB-INF/jsp/hello.jsp。注意,这两个hello的意思是不一样的,前一个hello是首页传的页面链接名称,后一个hello是根据控制器处理后,我们自己命名的一个Viewname,它是返回值的一个参数。
为了让自己好理解,我决定改一下后一个hello的名称,来,我们来看一下改动的文件和文件名。
/*4、src/package....*/package net.viralpatel.spring3.controller;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.servlet.ModelAndView; @Controllerpublic class HelloWorldController { @RequestMapping("/hello") public ModelAndView helloWorld() { String message = "Hello World, Spring 3.0!"; return new ModelAndView("hellox", "message", message); }}
<!--2、hello.jsp改名为hellox.jsp--><html><head> <title>Spring 3.0 MVC Series: Hello World - ViralPatel.net</title></head><body> ${message}</body></html>
注意,此时的首页文件跳转还是hello.htm
这回好理解了吧。显示的地址是hello.html,可实际访问的却是/WEB-INF/jsp/hellox.jsp。
- 关于spring mvc 的初学HelloWorld中的成功运行后的梳理
- Spring MVC版本的helloworld
- 初学Grand Central Dispatch后的初步梳理
- 基于Spring MVC的简单HelloWorld实例
- maven构建spring mvc的helloworld
- 基于Spring MVC的简单HelloWorld实例
- 基于xml配置的Spring MVC HelloWorld
- Spring MVC学习笔记(一)---Spring MVC 的HelloWorld
- spring mvc 初学碰到404的问题
- 对Spring MVC初学的认识
- 初学Spring MVC所遇到的错误
- 对Spring MVC初学的认识 编辑
- 初学spring mvc的几点心得
- Spring MVC的运行流程
- Spring MVC 的运行原理
- 关于Spring MVC中的表单标签库的使用
- 关于Spring MVC中的表单标签库的使用
- 关于Spring MVC中的表单标签库的使用
- java 关键字Volatile
- CocoaPods进阶
- 监听器的启动顺序
- IntelliJ Idea 常用快捷键列表
- CocoaPods制作
- 关于spring mvc 的初学HelloWorld中的成功运行后的梳理
- Hi3518学习:第一课 开发步骤
- 思考程序之外的事情
- 外挂辅助技术研究-分析怪物列表
- 多线程读写 shared_ptr的加锁
- FLASH中如何使一个物体沿着自己画的路径运动?
- Objective-C中的@property
- 调用rest地址时异常:Invalid use of BasicClientConnManager: connection still allocated.
- unity基础开发--鼠标移动物体并判断是否移动