1.下载以及安装maven。配置maven环境变量。具体去百度。http://baidu.com
2.在eclipse中集成maven。
Eclipse(java ee版)集成maven
-
一般而言,新的eclipse都已经集成了maven,如果没有那么就安装,点击eclipse菜单栏Help->Eclipse Marketplace搜索关键字maven到插件Maven Integration for Eclipse 并点击安装即可,接下来将eclipse集成的maven换成我们自己的,而不用eclipse自带的,重新定位,点击Window -> Preference -> Maven -> Installation -> Add进行设置,如下图
3.创建maven web项目
选择建立Maven Project 选择File -> New -> Other,在New窗口中选择 Maven -> Maven Project;
选择项目类型 选择Artifact Id为maven-archetype-webapp那一项
输入Group ID和 Artifact ID,以及Package,具体Group ID和 Artifact ID代表什么,可以去阅读《Maven 实战》,Group ID相当于一个组织,而Artifact ID相当于这个组织下的一个具体项目,Packege的话会根据你的Group ID和Artifact ID生成一个默认的名称,就用默认的就可以
-
结构图
把项目变成Dynamic Web项目右键项目,properties --》Project Facets,点击Convert to faceted fro,勾上Dynamic Web Module,并将Version为2.3。(3.0为Java7的)。
设置部署程序集(Web Deployment Assembly)
上面步骤设置完成后,点击OK,再右键项目,选择properties --》Deployment Assembly
4.配置文件
-
pom.xml中是一些所需要的jre包。不够的自己去添加
<properties><!-- Spring版本号 --> <spring.version>4.3.8.RELEASE</spring.version> </properties> <dependencies> <!-- Spring相关包 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>${spring.version}</version> </dependency> <!-- AOP相关包 --> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjrt</artifactId> <version>1.8.0</version> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.8.0</version> </dependency> <!-- MyBatis相关包 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.3.0</version> </dependency> <!-- MySQL相关包 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.26</version> </dependency> <!-- 数据库连接池 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.20</version> </dependency> <!-- Spring集成MyBatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.2.3</version> </dependency> <!-- JSP标准标签库 --> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <!-- 日志相关包 --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.21</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>${jackson.version}</version> </dependency> <!-- 单元测试相关包 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> <build> <finalName>ssm</finalName> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build> </project>
-
请求进入后,先去web.xml中。配置web.xml
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" > <web-app> <!-- 上下文参数 --> <!-- 发送请求到前端控制器,前端控制器请求处理器映射器去查找请求,找到请求后向前端控制器返回执行链,前端控制器 调用处理器适配器 去执行处理器。 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param> <!-- 处理post请求时传递参数的中文乱码问题 --> <filter> <filter-name>characterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>characterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- 声明监听器,在tomcat启动时创建spring容器 --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- 把所有的请求都交给springmvc容器 --> <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> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>*.html</url-pattern> </servlet-mapping> 欢迎界面 <welcome-file-list> <welcome-file>/WEB-INF/jsp/index.jsp</welcome-file> </welcome-file-list> <!-- tomcat自带的异常页面处理 --> <error-page> <!-- 错误码 --> <error-code>404</error-code> <location>/WEB-INF/jsp/404.jsp</location> </error-page> </web-app>
-
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"> <!-- 扫描Spring除Controller之外的注解 --> <context:component-scan base-package="com.ajiatech"> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" /> </context:component-scan> <!-- 配置数据源 --> <bean id="jdbcDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"></property> <property name="url" value="jdbc:mysql://localhost:3306/ajia_store?useSSL=true&characterEncoding=UTF8"></property> <property name="username" value="root"></property> <property name="password" value="root"></property> </bean> <!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="jdbcDataSource" /> <property name="mapperLocations" value="classpath:*com/ajiatech/mapper/*.xml*"></property> </bean> <!-- 加载mapper接口 代理对象 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="*com.ajiatech.mapper*"></property> </bean> </beans>
-
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:context="http://www.springframework.org/schema/context" 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/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"> <!-- 配置扫描的包 --> <context:component-scan base-package="com.ajiatech.controller" /> <!-- 注册HandlerMapper、HandlerAdapter两个映射类 --> <mvc:annotation-driven /> <!-- 访问静态资源 --> <mvc:default-servlet-handler /> <!-- 消息转换器 当springmvc的controller返回对象时,执行消息转换器, 把返回的java对象转成json字符串,输出贵客户端。 --> <mvc:annotation-driven> <mvc:message-converters register-defaults="true"> <bean id="mappingJacksonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> <property name="supportedMediaTypes" value="text/html;charset=UTF-8" /> </bean> </mvc:message-converters> </mvc:annotation-driven> <!-- 视图解析器 Controller处理完毕后将会转发到相应位置 prefix前缀 suffix后缀 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/"></property> <property name="suffix" value=".jsp"></property> </bean> <!-- springmvc提供的异常处理 --> <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> <!-- 定义默认的异常处理页面,当该异常类型的注册时使用 --> <property name="defaultErrorView" value="500"></property> <!-- 定义异常处理页面用来获取异常信息的变量名,默认名为exception --> <property name="exceptionAttribute" value="ex"></property> </bean> </beans>
配置文件已经完成。里面有需要自己修改的地方。
SpringMVC工作原理及其组件
一、首先,我们先来认识一下SpringMVC的主要组件
- 前端控制器(DisatcherServlet):接收请求,响应结果,返回可以是json,String等数据类型,也可以是页面(Model)。
- 处理器映射器(HandlerMapping):根据URL去查找处理器,一般通过xml配置或者注解进行查找。
- 处理器(Handler):就是我们常说的controller控制器啦,由程序员编写。
- 处理器适配器(HandlerAdapter):可以将处理器包装成适配器,这样就可以支持多种类型的处理器。
- 视图解析器(ViewResovler):进行视图解析,返回view对象(常见的有JSP,FreeMark等)。
二、SpingMVC的工作原理
见图表- 用户发送请求到前端控制器(DispatcherServlet)。
- 前端控制器请求处理器映射器(HandlerMapping)去查找处理器(Handler)。[具体是去DispatcherServlet中的doDispath方法中查找,找到真正的地址
用@RequestMapping(" ")标注,映射成功后,由Springmvc生成一个handler对象,该对象中有一个方法,即映射成功的该方法] - 找到以后处理器映射器(HandlerMappering)向前端控制器返回执行链(HandlerExecutionChain)。【去DispatcherServlet中调用方法getHandle。返回值为HandlerExecutionChain】
- 前端控制器(DispatcherServlet)调用处理器适配器(HandlerAdapter)去执行处理器(Handler)。【因为处理器(Handler)有很多种,DispatcherServlet没办法统一管理,所以出现了适配器。
让适配器统一处理Handler,而DispatcherServlet统一处理适配器。
根据请求去找对应的handler】 - 处理器适配器去执行Handler。
- 处理器执行完给处理器适配器返回ModelAndView。
- 处理器适配器向前端控制器返回ModelAndView。
- 前端控制器请求视图解析器(ViewResolver)去进行视图解析。
- 视图解析器向前端控制器返回View。
- 前端控制器对视图进行渲染。
- 前端控制器向用户响应结果。