SpringMVC
What is Spring MVC
MVC:
M-Model 业务逻辑,包含业务数据和业务处理逻辑,如实体类、DAO、Service;
V-View 负责显示界面和用户交互;
C-Controller 控制流程,Servlet中的单一控制器ActionServlet
The Core of Spring MVC
DispatcherServlet: 控制器请求入口
HandlerMapping: 控制器请求派发
Controller :控制器,请求处理流程
ModelAndView: 封装业务处理结果和视图
ViewResolver: 视图显示处理器
The Processing of SpringMVC
1、浏览器向Spring发出请求,请求交给前端控制器(DispatcherServlet)处理;
2、控制器通过HandlerMapping 找到相应的Controller组件处理请求;
3、执行Controller组件约定方法处理请求,在约定方法调用模型组件完成业务处理,约定方法可以返回一个ModelAndView 对象,封装了处理结果数据和视图名称信息
4、控制器接收ModelAndView之后,调用ViewResolver组件,定位View(JSP)并传递数据信息,生成响应界面结果
How to Build the Environment of SpringMVC
1、创建WebProject,导入Spring Web MVC 相关开发包
Spring API, web, webmvc等;
jar包真的很重要,报错80%的原因归结于jar包。
报错1:
java.lang.ClassNotFoundException: org.springframework.context.EnvironmentAware
原因分析:
1、spring-web相关的jar包没导进去,添加
2、jar包有冲突,把重复的jar包删除
3、Tomcat启动时默认的读取的是/WEB-INF下的配置文件,如果配置文件在src中要把路径改为类路径底下
4、由于工程是部署在服务器底下的,所以要把加入的jar包部署到工程里。
加载jar包后,记得要Refresh!
报错2:
java.lang.NoSuchMethodError: org.springframework.core.io.ResourceEditor.<init>(Lorg/springframework/core/io/ResourceLoader;)V
报错原因分析:如图:
报错3:
java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet
原因分析:需要加载spring-webmvc包,并且要找到相应的版本(检查web.xml文件的配置,jar包版本等)
2、 在src下添加Spring的xml配置文件
HandlerMapping
配置文件中对HandlerMapping组件进行配置,通过HandlerMapping组件,DispatcherServlet控制器可以将客户Http请求映射到Controller组件
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/hello.form">helloController</prop>
</props>
</property>
</bean>
<!-- Controller组件 -->
<bean id="helloController" class="org.com.Controller.HelloController"></bean>
3、 在web.xml中配置DispatcherServlet组件
Dispatcher Servlet
<!-- 配置DispatcherServlet -->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<!-- 指定XML配置文件,初始化时加载 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.form</url-pattern>
</servlet-mapping>
Controller
Controller组件负责执行具体的业务处理,可调用DAO等组件
public class HelloController implements Controller {
//Controller组件约定handleRequest方法执行后返回一个ModelAndView
//对象,该对象封装模型数据和视图名
public ModelAndView handleRequest(HttpServletRequest req, HttpServletResponse resp){
System.out.println("受理请求!");
return new ModelAndView("Hello!");
}
}
<!-- Controller组件配置到spring-mvc.xml中 -->
<bean id="helloController" class="org.com.Controller.HelloController"></bean>
ModelAndView
ModelAndView对象用于封装模型数据和视图响应信息
ViewResolver
视图解析器
<bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
项目部署到Tomcat服务器后,启动Tomcat得到:
@RequestMapping
@RequestMapping用在类定义和方法定义,用于标注该类或方法与哪个客户请求对应;
@Controller
@Controller用于声明Controller组件,这样可以使得Controller定义更加灵活,可以不用实现Controller接口,请求处理的方法也可以灵活定义。