1 配置前端控制器
在web.xml中配置前端控制器:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
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_2_5.xsd">
<!-- springmvc前端控制器 -->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- contextConfigLocation配置springmvc加载的配置文件,(配置处理器映射器,处理器适配器等等)
如果没有配置contextConfigLocation,默认加载的是/WEB-INF/servlert名称-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>
<!--
第一种:*.action,访问.action结尾 由DispatcherServlet进行解析
第二种:/,所有访问的地址都由DispatcherServlet进行解析,对于静态文件的解析需要配置不让DispatcherServlet进行解析
使用此种方式可以实现RESTful风格的 url
第三种:/*,这样配置不对,使用这配置,最终要转发到一个jsp页面时,仍然会由DispatcherServlet进行解析jsp,
不能根据页面找到Handler,会报错。
-->
<url-pattern>*.action</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
2 配置处理器适配器
在classpath下的springmvc.xml文件中配置处理器适配器
<!-- 处理器适配器 所有处理器适配器都实现HandlerAdapter接口-->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
关联springmvc源代码, 查看源代码可知:
public class SimpleControllerHandlerAdapter implements HandlerAdapter {
public boolean supports(Object handler) {
return (handler instanceof Controller);
}
SImpleControllerHandlerAdapter此适配器执行实现Controller接口的Handler。
Controller接口:
public interface Controller {
/**
* Process the request and return a ModelAndView object which the DispatcherServlet
* will render. A <code>null</code> return value is not an error: It indicates that
* this object completed request processing itself, thus there is no ModelAndView
* to render.
* @param request current HTTP request
* @param response current HTTP response
* @return a ModelAndView to render, or <code>null</code> if handled directly
* @throws Exception in case of errors
*/
ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception;
}
3 开发Handler
需要实现Controller接口,才能由org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter适配器执行。
package cn.minyan.controller;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import cn.minyan.bean.Items;
public class ItemsController1 implements Controller{
@Override
public ModelAndView handleRequest(HttpServletRequest request,
HttpServletResponse response) throws Exception {
//调用service查找数据库,查询商品列表,这里使用静态数据模拟
List<Items> itemList = new ArrayList<Items>();
Items item1 = new Items();
item1.setName("联想笔记本");
item1.setPrice(3000f);
item1.setDetail("ThinkPad T430联想笔记本");
Items item2 = new Items();
item2.setName("苹果手机");
item2.setPrice(5200f);
item2.setDetail("Iphone6S");
itemList.add(item1);
itemList.add(item2);
//返回ModelAndView
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("itemList", itemList);
//指定视图
modelAndView.setViewName("/WEB-INF/jsp/items/items.jsp");
return modelAndView;
}
}
4 视图编写
5 配置Handler
<!-- 配置Handler -->
<bean id="ItemsController1" name="/queryItem.action" class="cn.minyan.controller.ItemsController1"/>
6 配置处理器映射器
在classpath下的springmvc中配置处理器映射器
<!-- 处理器映射器
将Bean的Name作为url进行查找,需要在配置Handler时指定beanname(就是url)
-->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
7 配置视图解析器
需要配置解析jsp的视图解析器
<!-- 视图解析器
解析jsp,默认使用jstl标签,classpath下需要有jstl的jar包
-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"/>