spring web mvc第一天
2015-07-15 15:59
281 查看
spring web mvc 感觉就是高大上啊!啥都是配置文件就可以了。所以第一步就是弄清楚配置文件使用和整体框架的流程! Spring web mvc最重要的当然是Controller,也就是首先要明白的就是Dispatch,它将用户的请求转化成Controller处理的对象。在在Spring的Web MVC中,担任前段控制器角色的是org.springframework.web.servlet.DispatcherServlet.DispatcherServlet负责将客户的请求分配给控制对象,所以使用Spring Web MVC的第一步就是在Web.xml中定义DispatcherServlet.
<span style="font-family:Courier New;font-size:14px;"><servlet> <servlet-name>dispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/mvc-config.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcherServlet</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping></span>DispatcherServlet 实例是 dispatcherServlet。从url-pattern可以知道它拦截.do的任意请求。“contextConfigLocation”初始参数用来设定Bean定义文件的位置与名称,如果不设置“contextConfigLocation”初始参数,则DispatcherServlet默认会使用Servlet的名称为前置,读取“Servlet名称-servlet.xml”作为其Bean定义文件,在上面的设定中则会读取mvc-config.xml当然你也可以定义多个Bean定义文件的来源.
<span style="font-family:Courier New;"><servlet> <servlet-name>dispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/mvc-config.xml,/WEB-INF/other-servlet.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcherServlet</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping></span>DispatcherServlet负责分配请求至控制对象(Controller),在Spring Web MVC中,控制对象要实现org.springframework.web.servlet.mvc.Controller接口,Controller接口有一个不许实现的handleRequest()
<span style="font-family:Courier New;font-size:14px;">public interface Controller { ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception; }</span>当Controller接收到DispatcherServlet分配的请求时,会执行handleRequest()方法来处理请求,处理完成后回传一个org.springframework.web.servlet.ModelAndView的实例.ModelAndView包括了要呈现在View层的Model数据,以及其他View层的相关信息。
<span style="font-family:Courier New;font-size:14px;">public class HellowController implements Controller { private String viewPage; public void setViewPage(String viewPage) { this.viewPage = viewPage; } public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { String user = request.getparameter("user"); retrun new ModelAndView(viewPage, "user", user); }}</span>在这个Controller中,取得来自使用者的user请求参数,并设定在ModelAndView的实例中,在这个例子中,高见ModelAndView的第一个自变量为要呈现的目标网页(或资源)路径,第二个自变量是设定用来取得Model对象的键(key),而第三个自变量是个View层呈现数据的Model对象我们可以在xml文件设定Controller请求处理完毕之后,所要呈现数据的网页路径,来看一下Bean定义文件的内容,依据web.xml中对dispatcherServlet的初始参数设定为mvc-config.xml,如果没有初始参数的话,默认会调用dispatcherServlet-servlet.xml文件
<span style="font-family:Microsoft YaHei;font-size:14px;"> </span><span style="font-family:Courier New;font-size:14px;"><bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/"/> <property name="suffix" value=".jsp"/> </bean> <bean name="/hello.do" class="包路径.HellowController"> <property name="viewPage"> <value>hello</vlaue> </property> </bean></span>实际上DispatcherServlet必须根据一个HandlerMapping对象,决定请求由哪一个Controller来处理,DispatcherServlet默认使用org.springframework.web.servlet.handler.BeanNameUrlHandlerMappin,也就是根据Bean在定义时的"name"属性及使用者请求的URL,决定使用哪一个Controller实例,例如上面的例子,请求/.../hello.do时,DispatcherServlet根据"hello.do",决定要使用"name"为"hello.do"的Bean实例,所以根据上面的设定,就会将请求交给HelloController的实例来处理。在Controller返回ModelAndView后,DispatcherServlet会交由ViewResolver对象来作View层的相关解析,因而你需要设置一个ViewResolver实例,在这个例子中将一jsp作为View层技术,所以使用org.springframework.web.servlet.view.InternalResourceViewResolve, InternalResourceViewResolver需要设置"viewClass",默认是org.springframework.web.servlet.InternalResourceView,这个类支持Servlet技术的相关资源。InternalResourceViewResolver的"prefix"和"suffix"属性会与ModelAndView返回的路径信息借个,例如路径信息返回为"hello"字符串,则与以上的例子设定结合,实际路径就是/WEB-INF/jsp/hello.jsp。
相关文章推荐
- 【j2ee spring】44、巴巴运动网前台产品显示
- Java中的equals()
- 关于Spring中的context:property-placeholder 导入多个独立的配置文件
- 【Java】利用正则表达式判断是否为网址
- Java基础--多线程--第一例
- MVC 实现的小实例
- Java-多态、方法重载
- How To create Netbeans Platform and add to netbeans IDE by netbean platform manager
- 关于eclipse的jar包问题
- Java_类和对象(完美总结)_转载_覆盖和隐藏的区别,覆盖就不能使用了,而隐藏提供全局方法名或者全局变量名还可以使用
- Java错误提示------println()错误
- 读配置文件可以保持顺序的 Java Properties 类
- 编写一个程序,将 d: \ java 目录下的所有.java 文件复制到d: \ jad 目录下,并 将原来文件的扩展名从.java 改为.jad
- 深入浅出 Java Concurrency (6): 锁机制 part 1
- java枚举类型enum的使用
- Java常见内存溢出异常分析(OutOfMemoryError)
- AOP Spring
- Springmvc JSON交互
- 【转】Java并发编程:Thread类的使用
- Java项目经验