springMVC各个组件间工作路线图:
springmvc实现controller的三种方式:
①实现controller接口
②实现HttpRequestHandler接口
③使用@Controller注解
各个组件解析:
1.前端控制器(DispacterServlet):由spring提供,不需要程序员编写,配置在web.xml文件中,主要用于接受前台的请求、请求查找controller以及向前台作出响应,它是前台请求进入后台和后台响应前台的唯一通道。在web.xml中的配置案例如下:
<servlet>
<servlet-name>springMvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<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>
2.处理器映射器(HandelMapping):它是配置在springMVC-Servlet.xml中的,主要用于接受前端控制器的请求,并通过前端控制器发来的URL进行controller的适配,它的实现有两种,一种是通过xml配置的方式(xml配置方式又分不同种映射器,其映射风格有所不同),另一种是注解的方式,例如:
①xml配置方式:
<bean id="ItemsController1" name="/query.action" class="mfx.ssm.controller.ItemsController1"/>
<bean id="ItemsController2" class="mfx.ssm.controller.ItemsController2"/>
<bean id="loginController" name="/login.action" class="mfx.ssm.controller.loginController"/>
<!--处理器映射器 1 -->
<!--非注解的处理器映射器 -->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
<!--处理器映射器 2 -->
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/query1.action">ItemsController1</prop>
<prop key="/query2.action">ItemsController1</prop>
<prop key="/query3.action">ItemsController2</prop>
</props>
</property>
</bean>
②注解方式
@RequestMapping("/delete")
public String delete(Model model,HttpServletRequest request){
int id=Integer.parseInt(request.getParameter("id"));
DateFormat mediumDateFormat = DateFormat.getDateTimeInstance
(DateFormat.MEDIUM,DateFormat.MEDIUM);
Date date=new Date();
GiveBooks giveBooks =new GiveBooks();
Books book=new Books();
book=bookService.selectById(id);
giveBooks.setName(book.getName());
giveBooks.setPhoneNum(book.getPhoneNum());
giveBooks.setMoney(book.getMoney());
giveBooks.setGiveTime(mediumDateFormat.format(date));
giveBooks.setType(book.getType());
bookService.insertIntoGive(giveBooks);
bookService.delete(id);
return check(model);
}
3.处理器适配器(HandlerAdapter):配置在springMVC-Servlet.xml中,用于执行controller,处理器适配器大体分为两种,xml配置型(又可以分为多种类型)和注解型,通常不同的处理器适配器所要求的controller的实现方法是不同的,比如下边的处理器适配器要求相应的controller实现Controller接口,只有满足要求它才能正确执行,例如:
①xml配置型
<!-- 处理器适配器1
所有处理器适配器都实现Controller接口
-->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
controller:
public class loginController implements Controller{
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
String name=request.getParameter("name");
String password=request.getParameter("password");
AbstractApplicationContext context =new ClassPathXmlApplicationContext("application-servicel.xml");
loginService ps1=(loginService) context.getBean("loginService");
person pBeans=new person();
pBeans=ps1.loginPersons(name,password);
ModelAndView modelAndView =new ModelAndView();
//相当于setAttribute方法,在jsp中通过itemList进行获取
modelAndView .setViewName("/WEB-INF/jsp/welcom.jsp");
return modelAndView;
}
}
这个类型的适配器需要controller类实现Controller接口
②注解型:
@Controller
@RequestMapping("/books")
public class BooksController {
@Resource
BookService bookService;//没有用new创建对象,是因为是由spring容器管理的
/*@Autowired是默认按照类型装配的 @Resource默认是按照名称装配的*/
/*
* 产品列表与分页Action
*/
@RequestMapping("/insert")
public String list(Model model,@ModelAttribute("entity") @Valid Books entity,BindingResult bindingResult) throws IOException{
/*1.Valid注解用于校验
*2.@ModelAttribute运用在参数上,会将客户端传递过来的参数按名称注入到指定对象中,并且会将这个对象自动加入ModelMap中,便于View层使用*/
//System.out.println("++++++"+entity.getWeight());
if(entity.getWeight()==null||entity.getWeight().equals("")){
entity.setWeight("未填");
}
System.out.println("+++========");
DateFormat mediumDateFormat = DateFormat.getDateTimeInstance
(DateFormat.MEDIUM,DateFormat.MEDIUM);
Date date=new Date();
entity.setDate(mediumDateFormat.format(date));
bookService.insert(entity);
//response .getWriter().print("<script language='javascript'>记账成功</script>");
return check(model);//必须写成这样,不然访问不到
}
4.处理器(Controller):由程序员编写,用于请求的处理,处理器通常会调用Service层进行数据处理与获取。
5.视图解析器:由spring提供,配置在springMVC-Servlet.xml 中,用于视图解析,通常的作用是给URL拼接前缀和后缀,如:
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver"
id="internalResourceViewResolver">
<!--指定视图渲染类 -->
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView" />
<!--自动添加到路径中的前缀 -->
<property name="prefix" value="/WEB-INF/views/jstl/" />
<!--自动添加到路径中的后缀 -->
<property name="suffix" value=".jsp" />
<!--设置所有视图的内容类型,如果视图本身设置内容类型视图类可以忽略 -->
<property name="contentType" value="text/html;charset=UTF-8" />
<!-- 优先级,越小越前 -->
<property name="order" value="2" />
</bean>