1.springmvc是什么?
springmvc是spring框架的一个模块,此模块提供web层基于mvc的解决方案
对于mvc框架可以通过图形形象的表示出来:
5大组件的作用:
1.前端控制器:
作用:相当于中央处理器(中央调度)
接受请求,相应处理结果
根据请求的url调用处理器映射器找到handler处理器执行用户请求
调用处理器适配器去执行handler
2. 处理器映射器:
作用:负责根据url查找handler(可以根据xml配置,注解去查找)
好处:针对不同的映射方式去扩展处理器映射器文件
3.处理器适配器:
作用:对handler进行包装,适配,执行
好处:通过扩展处理器适配器支持不同的handler开发
4. handler处理器:
作用:根据不同的url去执行不同的需求,需要根据业务需求去开发不同的handler
执行完成给适配器返回一个ModleAndview(springmvc 一个封装对象,将modle和view进行封装,
5.ViewResolve视图解析器:
作用:根据需要来生成最终要的view(view是springmvc的一个接口)
好处:通过扩展视图解析器支持不同的view解析
搭建一个简单springmvc的步骤:
1.导入开发所需要的jar包:
2.在web.xml中去配置前端控制器
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>springmvc</display-name>
<!-- 前端控制器-->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--指定springmvc的配置文件
不配置init-param
配置文件地址默认为classpath下的servlet的名称-servlet.xml
-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
<!-- <param-value>classpath*:/config/springmvc1.xml</param-value> -->
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<!--
*.action由.action结尾的url路径由DispatcherServlet解析
/所有的url都有DispatcherServlet解析
/*在注解方式下存在问题,不适应
-->
<url-pattern>*.action</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>
3.在springmvc.xml中去配置三大组件:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
">
<!-- 处理器
由于通过SimpleControllerHandlerAdapter,需要实现Controller
-->
<bean name="/query.action" id="itemsController" class="com.macrosan.spring.controller.ItemsController"></bean>
<!-- <bean id="itemsController1" class="com.macrosan.spring.controller.ItemsController1"></bean>-->
<!-- <bean class="com.macrosan.spring.controller.ItemsController3"></bean> -->
<!--使用组件扫描 -->
<context:component-scan base-package="com.macrosan.spring.controller"/>
<!--处理器,映射器
BeanNameUrlHandlerMapping:根据容器配置的bean的name进行映射,要将hangdler的url配置在bean的 name上
-->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>
<!--简单url映射 可以配置多个 -->
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/item1.action">itemsController</prop>
<!-- <prop key="/item2.action">itemsController1</prop> -->
</props>
</property>
</bean>
<!--注解的处理器,映射器 -->
<!-- <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"></bean> -->
<!-- -->
<!--处理器,适配器
SimpleControllerHandlerAdapter:支持实现controller接口,对实现controller接口的类进行包装执行
-->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean>
<bean class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter"></bean>
<!-- 注解的适配器 -->
<!-- <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"></bean> -->
<mvc:annotation-driven/>
<!--mvc:annotation-driven
可以代替注解映射器和注解适配器
-->
<!--视图解析器 解析jsp视图 解析jstl标签-->
<!-- <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"></bean> -->
<!-- 视图解析器
解析jsp视图,解析jstl标签
-->
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 设置前缀 和后缀 -->
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>
4.编写controller
package com.macrosan.spring.controller;
import java.util.ArrayList;
import java.util.Date;
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 com.macrosan.pojo.Items;
public class ItemsController implements Controller{
@Override
public ModelAndView handleRequest(HttpServletRequest arg0,
HttpServletResponse arg1) throws Exception {
ModelAndView modelAndView = new ModelAndView();
List<Items> list = new ArrayList<Items>();
Items items = new Items();
items.setId(1);
items.setName("phone");
items.setCreatetime(new Date());
Items items1 = new Items();
items1.setId(2);
items1.setName("computer");
items1.setCreatetime(new Date());
list.add(items1);
list.add(items);
modelAndView.addObject("list",list);
modelAndView.setViewName("/query");
return modelAndView;
}
}
5.在spring容器中去配置controller
6.编写jsp页面
7.启动服务器去访问页面,这里配置的是ItemsController这个controller访问时就用我们设置的映射路径item1