1.简要说明:
Spring为展现层提供的基于MVC设计理念的优秀web框架,目前主流的框架
Spring3.0以后全面超越Struts2,成为最优秀的MVC框架
Spring MVC通过一套MVC注解,让pojo成为处理请求控制器,无需实现任何接口
支持REST风格URL请求
是Spring框架的一个模块,无需通过中间层进行整合
2.在b/s系统下的
3.springmvc的流程:
前端控制器DispacherServlet
作用:接受请求,响应结果,相当于转发器,中央处理器
处理器映射器HandlerMapping
作用:根据请求的url查找Handler
处理器适配器HandlerAdapter
作用:按照特定的规则(HandlerAdapter)的要求去执行handler
注意:编写handler时按照HandlerAdpter的要求去做
视图解析器View resource
作用:进行视图解析,根据逻辑视图名解析成真的视图
视图View
View是一个接口,实现支持不同的View类型(jsp,pdf...)
4.简单的小代码实例:
新建一个web工程!
4.1 首先是web.xml文件中
<!-- 前端控制器 --> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- contextConfigLocation配置springmvc加载的配置文件(配置处理器映射器,设配器等...) 如果不配置contextConfigLocation,默认加载的是/web-INF/servletName-servlet.xml
此时实例--->(springmvc-servlet.xml) --> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>*.action</url-pattern> </servlet-mapping>
注意: <url-pattern>*.action</url-pattern>中的类型
one: *.action 访问以 .action 结尾由 DispatcherServlet进行解析
two: / 所以访问的地址由DispatcherServlet进行解析,,对于静态文件的解析需要配置不让DispatcherServlet进行解析
three: /* 这压根配置不对,使用这种配置,最终需要转发到一个jsp页面时,仍然由DispatcherServlet
解析jsp地址,不能根据jsp页面找到hander会报错
第三种不能使用
4.2配置处理器适配器
在在springmvc.xml文件中
<!-- 处理器适配器 --> <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean>
所有的处理器适配器都实现了HandlerAdapter接口
观察源代码发现:
public interface HandlerAdapter { boolean supports(Object handler); ... }
supports:支持哪一种handler
SimpleControllerHandlerAdapter.java
实现Controller接口的handler
观察Controller.java代码
所以此时需要实现Contoller接口
public class ItemsController implements Controller { @Override public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { List<Items> itemsList = new ArrayList<Items>(); //向list中填充静态数据 Items items_1 = new Items(); items_1.setName("手机"); items_1.setPrice(3000f); items_1.setDetail("一个新款的手机"); itemsList.add(items_1); ModelAndView modelAndView = new ModelAndView(); //相当于request的setAttribute modelAndView.addObject("itemsList", itemsList); //指定视图 modelAndView.setViewName("/WEB-INF/jsp/items/itemsList.jsp"); return modelAndView; } }
modelAndView.setViewName("/WEB-INF/jsp/items/itemsList.jsp");
这句话的意思即是我们需要新建的jsp文件以及相关的路径问题
即视图:
itemsList.jsp
商品列表: <table width="100%" border=1> <tr> <td>商品名称</td> <td>商品价格</td> <td>生产日期</td> <td>商品描述</td> <td>操作</td> </tr> <c:forEach items="${itemsList }" var="item"> <tr> <td>${item.name }</td> <td>${item.price }</td> <td><fmt:formatDate value="${item.createtime}" pattern="yyyy-MM-dd HH:mm:ss"/></td> <td>${item.detail }</td> <td><a href="${pageContext.request.contextPath }/item/editItem.action?id=${item.id}">修改</a></td> </tr> </c:forEach> </table> </form>
4.3配置....
springmvc.xml文件中
配置handler
<!-- 配置Handler --> <bean name="/queryItems.action" class="com.MrChengs.controller.ItemsController"></bean>
class是全类名
name是请求的url
配置处理器映射器
<!-- 处理器映射器 --> <!-- 将bean的name作为url进行查找,需要配置Handler时指定beanName --> <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>
配置视图解析器
<!-- 视图显示器 --> <!-- 解析jsp视图 --> <!-- 默认使用jstl的包 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"></bean>
然后运行Tomcat:访问即可看到结果