SpringMVC环境搭建
Spring MVC为展现层提供的基于MVC设计理念的优秀Web框架,是目前最主流的MVC框架之一。
Spring 3.0之后完全超越Struts2,称为最优秀的MVC框架。学完SpringMVC之后,瞬时间就能让你感到Struts2带给你的残酷。
Spring MVC通过一套MVC注解,让POJO称为处理请求的控制器,无需实现任何接口,耦合度低。
并且Spring MVC对rest风格很好的支持。。
利用了松散的耦合可拔插组件结构,比其他MVC框架更具扩展性和灵活性。
搭建Spring MVC环境
1)基于接口方式搭建MVC环境。实现Controller接口实现MVC
2)基于注解方式,在Spring3.0以后的版本中,使用注解极大的简化了传统的MVC配置,灵活性与可维护性得到了大大的提高哦。
实现SpringMVC步骤,第一个肯定是要到入对应jar包啦
然后就是和Struts2一样在Web.xml配置一个核心控制器。用于拦截请求。
<!-- 配置SpringMVC的请求的Servlet --> <servlet> <servlet-name>DispatcherServlet</servlet-name> <servlet-class> org.springframework.web.servlet.DispatcherServlet </servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>DispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
看到这里是不是感到很熟悉,只不过比Struts2多了几行而已。init-param是初始化要加载的spring文件,如果有多个可以使用逗号隔开
load-on-startup 在启动的时候立马加载。 <url-pattern>/</url-pattern>拦截所有的请求。(同时css,js也会被拦截);
然后我们写个Controller
package com.miya.spring.mvc.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @Controller @RequestMapping("/Miya") public class MiyaHelloController { @RequestMapping("/hello") public String hello(){ System.out.println("hello Miya"); return "/hello"; } }
@Controller这个注解不用多说吧,声明一个控制器。
@RequestMapping定义在类上面是声明一个空间。在方法上面是声明一个请求路径
返回一个字符串你要访问的路径这个路径在哪里呢?
<context:component-scan base-package="com.miya.spring.mvc"/> <!-- 视图解析器 --> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- 前缀 --> <property name="prefix" value="/WEB-INF/views"/> <!-- 后缀 --> <property name="suffix" value=".jsp"/> </bean>
在我们Spring XML的配置中,我们首先扫描所有的注解,然后配置了一个试图解析器。
当我们返回那个hello的时候,它是 prefix + result(hello) +suffix 去访问我们的视图。
现在我们在index.jsp直接跑一个试试。
<% response.sendRedirect(request.getContextPath() + "/Miya/hello"); %>
request.getContextPath()拿到的是你的web项目的根路径,就是webContent(MyEclipse中是webRoot)。然后现在可以看到我们的命名空间Miya后面跟里面定义的方法请求路径
hello。我们最终访问后的地址http://localhost:8080/SpringMvcDemo1/Miya/hello 访问到的是WEB-INF/views/hello.jsp这个文件。而且这个请求还是个rest风格请求。
到了这里会发现比Struts2方便的多,Struts2每次配置请求都要去Struts2中配置action啊什么什么的一大堆,并且有的时候sturts文件中几千行,老眼昏花找个请求都要找半个小时。
我们还有一个实现方式就是实现Spring提供的Controller接口重写接口里面的方法。
package com.miya.spring.mvc.controller; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.Controller; public class MiyaWordController implements Controller{ @Override public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("/hello"); return modelAndView; } }
ModelAndView中可以设置视图,我设置的还是hello这个,然后我们需要在spring XML中配置一个bean,name是请求路径,class是指定控制器类
<bean name="/Miya/word" class="com.miya.spring.mvc.controller.MiyaWordController"></bean>
注意:我们在项目中拦截了所有的请求,会导致图片,样式,JS都报404,我们可以在spring XML中引入外部资源文件,而且这种实现接口的方式造成耦合度太高,而且每一个功能都需要写上一个类,导致我们代码的臃肿,所以还是推荐使用注解方式,注解目前是非常流行,并且很多框架都支持注解方式,并且语法简单,方便使代码简洁。
<!-- 引入外部样式 --> <mvc:resources location="/css/" mapping="/css/**"></mvc:resources>