##Spring配置补充和Spring MVC的初识
一、了解Spring的一些额外配置
1.1引用外部的属性文件
··xml
<context:property-placeholder location""/>
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<array>
<value>classpath:db.properties</value>
</array>
</property>
</bean>
```xml
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="${mysql.driver}"/>
<property name="url" value="${mysql.url}"/>
<property name="username" value="${mysql.username}"/>
<property name="password" value="${mysql.password}"/>
</bean>
1.2使用JNDI数据源
JavaWeb:数据源和分层开发
为了采用连接池,连接池也是Tomcat内置的(DBCP),我们想公用Tomcat中的一些资源,通过JNDI来进行引用
JNDI:它是能够在一个容器中。多个项目可以共享的资源
-先在服务器中配置context.xml(配置上数据源信息)
-在spring中利用特定的类,去查找此信息。(Context lookup(JNDI的名字))
-JNDIObjectFactoryBean
```xml
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/mysql/resource"/>
</bean>
1.3了解Spring的Bean的作用域(官人会问)
spring默认的bean是单利的,(singleton),所以如果在类中有属性的话,因为获取的都是同一个对象,那么属性也是一致的。这样就容易导致属性值错误的问题,所以我们一般在
UserController UserService中会依赖一些下一级的代码
1.4了解spring的自动装配
1.5掌握spring配置文件的拆分
applicationContext.xml
下面的这种拆分的方法尤其是适用于配置文件是纯xml的
拆分有俩种模式、
第一种就是按照模块进行拆分
-applicationContext-base.xml公共的内容
-applicatioinContext-user.xml用户模块
-applicationContext-provider.xml供应商模块
-applicationContext-bill.xml订单模块
第二种就是按照架构分层进行拆分
-applicationContext-base.xml公共的内容
-applicationContext-controller.xml表现层的内容
-applicationContext-service.xml业务逻辑层的内容
-applicationContext-dao.xml数据访问层的内容
1.6Spring的注解装配
// 就是用来替代XML进行Spring容器配置
@Configuration
public class TestConfiguration {
/*
* <bean id="testService" class="cn.kgc.demo1.test.TestService">
* <property name="username" value="测试"></property>
* </bean>
*/
@Bean
public TestService testService() {
TestService testService = new TestService();
testService.setUsername("韩一群");
return testService;
}
}
2.Spring MVC初识
2.1SpringMvc介绍
表现层拆分
SSM:SpringMVC(表现层框架)+Spring+MyBatis(数据访问层框架)
Spring MVC和Spring都是一家的,或者Spring MVC就是Spring的一个组件而已
mvc设计模式:(Model数据模型 View视图 Controller控制器)
-Model1: View JSP Controller:JSP Model:JavaBean
-Model2:View JSP视图技术 Controller:servlet Model: JavaBean
这种设计模式非常的优秀,很多的框架都采用了此种设计模式,Spring MVC,Struts2
*三层架构
-表现层:(迎宾)
-用于接受客户得请求,接受请求的数据
-指定要调用的业务类
-对业务类处理的结果进行响应
-业务逻辑层(后端的重心就在于业务逻辑,以及高性能)
-对业务进行合理的业务逻辑处理
-增删改:它接受到的表现层数据要持久化到数据库中
-查询:它是去调用指定的数据访问类来进行数据的查询
-尽量保持业务性
-数据访问层
-专门用于操作数据库的代码,尽量保证复用性
*Servlet的问题
-编写一个Servlet每次都要进行doGet/doPost方法的重写(BaseServlet进行优化)
-如果单纯的一个Servlet它只能处理一个请求,(用BaseServlet+opr进行优化)
-接受请求数据的时候,每次都要进行对应的类型的转换(客户端传输的都是String类型)
-每次响应的时候,请求转发的代码非常的多(使用BaesServlet进行优化)
// 未来的子类只需要继承它 就可以自动拥有它的所有方法实现 所以未来不同的子类不需要每次重写doGet和doPost了
public class BaseServlet extends HttpServlet{
public void doGet(HttpServletRequest request,HttpServletResponse response){
// 接收客户端的opr
String opr = request.getParamepter("opr");
// 假设为opr就是对应的请求方法名
Class clazz = this.getClass();
// 从它中获取对应的方法
Method me = clazz.getMethod(opr,HttpServletRequest.class,HttpServletResponse.class);
// 执行
Object result = me.invoke(this,request,response);
// 优化请求转发
if(result != null){
if(result instanceof String){
String path = (String)result;
request.getRequestDispatcher(path).forward(request,response);
}
}
// ....
}
public void doPost(HttpServletRequest request,HttpServletResponse response){
doGet(request,response);
}
}
2.2
Spring MVC环境的搭建
-1.导包(Spring相关的包+Spring web+Spring webmvc)
-2.配置web.xml(表现层框架要接受客户端请求,并做出响应 所以它必须结合服务器来使用)
-3. - 配置核心控制器DispatcherServlet
```xml
<!-- 配置核心控制器DispatcherServlet -->
<!-- Servlet是当第一次请求过来的时候 才会进行实例化和初始化 -->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 通过初始化参数 可以配置核心控制器对应的核心配置文件位置 -->
<!-- 如果你不配置 它默认去/WEB-INF/目录下寻找对应的[servlet-name]-servlet.xml -->
<init-param>
<!-- contextConfigLocation 它是Spring容器加载配置的入口 -->
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc-servlet.xml</param-value>
</init-param>
<!-- 配置随着服务器的加载而启动 -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<!-- 核心控制器(司令) 它应该接收所有的请求 然后帮你做很多默认处理 然后再交给你去处理业务逻辑 -->
<url-pattern>/</url-pattern>
</servlet-mapping>
```
-4.编写核心配置文件,名字随便,必须保证核心控制器能够加载核心配置文件
-5.创建控制器Controller,在核心配置文件中进行相关的配置
为了让对应的请求能够找到处理的控制器
了解最初的BeanNameUrlHandlerMapping映射方式
学会掌握注解形式的开发