springMVC详解

目录

阿里云关于springMVC的配置

web.xml

编码格式的配置

database.properties

log4j.properties

spring-beans.xml

spring-mvc.xml



阿里云关于springMVC的配置

web.xml

编码格式的配置

他的编码过滤器是spring-web-3.2.13.RELEASE.jar下的org.springframework.web.filter自带有的,把这个过滤器配置在xml中,并设置编码格式,自动就能过滤一切的乱码问题

<!-- spring字符编码过滤器start-->
	<filter>
		<!--① Spring 编码过滤器 -->
	  <filter-name>encodingFilter</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>
	 <!-- ② 过滤器的匹配 URL -->
	   <filter-mapping> 
	       <filter-name>encodingFilter</filter-name>
	       <url-pattern>/*</url-pattern>
	   </filter-mapping>
	<!-- spring字符编码过滤器end-->

Spring记录之SpringMVCSpring的Web框架是围绕分发器(DispatcherServlet)设计的,DispatcherServlet用来将请求分发到不同的处理器,框架还包括了控制器映射(HandlerMapping),视图解析(ViewResolver)

 第一步:用户发起请求到前端控制器DispatcherServlet) 第二步:前端控制器请求处理器映射器(HandlerMappering)去查找处理器(Handle):通过xml配置或者注解进行查找 第三步:找到以。。。

图解析器(ViewResolver)返回给核心控制器DispatcherServlet)一个具体的视图(View) 6,  核心控制器DispatcherServlet)对拿到的视图(View)进行渲染,将Model的数据填充到View中

contextConfigLocation:监听器位置

load-on-startup:

1)load-on-startup元素标记容器是否在启动的时候就加载这个servlet(实例化并调用其init()方法)。

2)它的值必须是一个整数,表示servlet应该被载入的顺序

2)当值为0或者大于0时,表示容器在应用启动时就加载并初始化这个servlet;

3)当值小于0或者没有指定时,则表示容器在该servlet被选择时才会去加载。

4)正数的值越小,该servlet的优先级越高,应用启动时就越先加载。

5)当值相同时,容器就会自己选择顺序来加载。

所以,<load-on-startup>x</load-on-startup>,中x的取值1,2,3,4,5代表的是优先级,而非启动延迟时间

<!-- Spring MVC配置 -->
	<servlet>
		<servlet-name>spring</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<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>spring</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>

日志文件配置:

<!-- log4j配置start -->
	<context-param>
		<param-name>log4jConfigLocation</param-name>
		<param-value>classpath:log4j.properties</param-value>
	</context-param>
	<context-param>
	<!-- 指定系统根目录路径 -->
	    <param-name>webAppRootKey</param-name>
	    <param-value>SMBMMVC.root</param-value>
	   </context-param>
	<!-- Spring 加载 Log4j 的监听 -->
	<listener>
		<listener-class>
			org.springframework.web.util.Log4jConfigListener
		</listener-class>
	</listener>
	<!-- log4j配置end -->

全部加在一起web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
  <display-name></display-name>	
  <welcome-file-list>
    <welcome-file>/login</welcome-file>
  </welcome-file-list>
  <!-- 指定Spring Bean的配置文件所在目录 
              在web.xml中通过contextConfigLocation配置spring,
       contextConfigLocation参数定义了要装入的 Spring 配置文件。 
  -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:spring-beans.xml</param-value>
	</context-param>
  
	 <!-- spring字符编码过滤器start-->
	<filter>
		<!--① Spring 编码过滤器 -->
	  <filter-name>encodingFilter</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>
	 <!-- ② 过滤器的匹配 URL -->
	   <filter-mapping> 
	       <filter-name>encodingFilter</filter-name>
	       <url-pattern>/*</url-pattern>
	   </filter-mapping>
	<!-- spring字符编码过滤器end-->
	
	<!-- Spring MVC配置 -->
	<servlet>
		<servlet-name>spring</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<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>spring</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>
	
	 <!-- Spring配置 -->
	<!-- 当系统启动的时候,spring需要进行一些资源加载或者配置,都需要使用此监听去做 -->
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
	
	<!-- log4j配置start -->
	<context-param>
		<param-name>log4jConfigLocation</param-name>
		<param-value>classpath:log4j.properties</param-value>
	</context-param>
	<context-param>
	<!-- 指定系统根目录路径 -->
	    <param-name>webAppRootKey</param-name>
	    <param-value>SMBMMVC.root</param-value>
	   </context-param>
	<!-- Spring 加载 Log4j 的监听 -->
	<listener>
		<listener-class>
			org.springframework.web.util.Log4jConfigListener
		</listener-class>
	</listener>
	<!-- log4j配置end -->
</web-app>

database.properties

前面四个就不解释了,jdbc链接数据库的配置文件;

后面的就是链接池的配置

maxActive=100                      最大活动链接数

maxIdle=30                             最小空闲链接数

maxIdle=50                                最大空闲链接数

initialSize=5                                初始链接数

maxWait=100                             超时等待时间以毫秒为单位 6000毫秒/1000等于60秒

removeAbandonedTimeout=180  一个被抛弃连接可以被移除的超时时间(以秒数为单位)

removeAbandoned=true               是否自动回收超时连接 

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/appinfodb?useUnicode=true&characterEncoding=utf-8
user=root
password=123
minIdle=45
maxIdle=50
initialSize=5
maxActive=100
maxWait=100
removeAbandonedTimeout=180
removeAbandoned=true

log4j.properties

log4j.rootLogger=debug,CONSOLE,file
#log4j.rootLogger=ERROR,ROLLING_FILE

log4j.logger.cn.smbms=debug
log4j.logger.org.apache.ibatis=debug
log4j.logger.org.mybatis.spring=debug
log4j.logger.java.sql.Connection=debug
log4j.logger.java.sql.Statement=debug
log4j.logger.java.sql.PreparedStatement=debug
log4j.logger.java.sql.ResultSet=debug

######################################################################################
# Console Appender  \u65e5\u5fd7\u5728\u63a7\u5236\u8f93\u51fa\u914d\u7f6e
######################################################################################
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.Threshold=debug
log4j.appender.CONSOLE.DatePattern=yyyy-MM-dd
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern= - (%r ms) - %d{yyyy-M-d HH:mm:ss}%x[%5p](%F:%L) %m%n



######################################################################################
# Rolling File  \u6587\u4ef6\u5927\u5c0f\u5230\u8fbe\u6307\u5b9a\u5c3a\u5bf8\u7684\u65f6\u5019\u4ea7\u751f\u4e00\u4e2a\u65b0\u7684\u6587\u4ef6
######################################################################################
#log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender
#log4j.appender.ROLLING_FILE.Threshold=INFO
#log4j.appender.ROLLING_FILE.File=${baojia.root}/logs/log.log
#log4j.appender.ROLLING_FILE.Append=true
#log4j.appender.ROLLING_FILE.MaxFileSize=5000KB
#log4j.appender.ROLLING_FILE.MaxBackupIndex=100
#log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout
#log4j.appender.ROLLING_FILE.layout.ConversionPattern=%d{yyyy-M-d HH:mm:ss}%x[%5p](%F:%L) %m%n

######################################################################################
# DailyRolling File  \u6bcf\u5929\u4ea7\u751f\u4e00\u4e2a\u65e5\u5fd7\u6587\u4ef6\uff0c\u6587\u4ef6\u540d\u683c\u5f0f:log2009-09-11
######################################################################################
log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.DatePattern=yyyy-MM-dd
log4j.appender.file.File=${AppInfoSystem.root}/logs/log.log
log4j.appender.file.Append=true
log4j.appender.file.Threshold=debug
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern= - (%r ms) - %d{yyyy-M-d HH:mm:ss}%x[%5p](%F:%L) %m%n

#DWR \u65e5\u5fd7
#log4j.logger.org.directwebremoting = ERROR

#\u663e\u793aHibernate\u5360\u4f4d\u7b26\u7ed1\u5b9a\u503c\u53ca\u8fd4\u56de\u503c
#log4j.logger.org.hibernate.type=DEBUG,CONSOLE 

#log4j.logger.org.springframework.transaction=DEBUG
#log4j.logger.org.hibernate=DEBUG
#log4j.logger.org.acegisecurity=DEBUG
#log4j.logger.org.apache.myfaces=TRACE
#log4j.logger.org.quartz=DEBUG

#log4j.logger.com.opensymphony=INFO  
#log4j.logger.org.apache.struts2=DEBUG  
log4j.logger.com.opensymphony.xwork2=debug

spring-beans.xml

首先配置文件头部暂时是自动生成的,所以我们需要配置的就是

第一步先导入之前的数据库链接池的配置文件,先告诉spring文件在哪里

第二步就是将参数的键名添加入配置中,到时候spring会自动去读取文件中的这些键的值,填入对应的空缺

<!-- 引入数据库配置文件 -->
     <context:property-placeholder location="classpath:database.properties"/>
     <!--配置数据源-->
     <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="${driver}"></property>
        <property name="url" value="${url}"></property>
        <property name="username" value="${user}"></property>
        <property name="password" value="${password}"></property>
     </bean>

接下来就是数据库链接工厂,用来生成数据库链接并分配个后面的dao类

该配置需配置三个参数:

数据源的位置,也就是我们之前的数据库链接池的数据bean的ID就可以,它需要时会自动找到该数据池

mapperLocations:MyBatis xml文件映射的位置

typeAliasesPackage:类型别名包的路径,对应的就是实体类存放包的路径

 <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
         <property name="dataSource" ref="dataSource"/>
         <property name="mapperLocations" value="classpath:cn/appsys/dao/**/*.xml"/>
         <property name="typeAliasesPackage" value="cn.appsys.pojo"></property>
       </bean> 

详情请点击

Mybatis MapperScannerConfigurer 自动扫描 将Mapper接口生成代理注入到Spring

<bean  class="org.mybatis.spring.mapper.MapperScannerConfigurer">
            <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/> 
            <property name="basePackage" value="cn.appsys.dao.**"/>
       </bean>

事物:暂时还没了解,等待中

<!--事务-->
       <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
           <property name="dataSource" ref="dataSource"></property>
       </bean>
       <tx:annotation-driven transaction-manager="transactionManager"/>

 扫描基础组件包

如果不想在xml文件中配置bean,我们可以给我们的类加上spring组件注解,只需再配置下spring的扫描器就可以实现bean的自动载入。

在base-package指明一个包:

<context:component-scan base-package="com.b505"/>
表明com.b505包及其子包中,如果某个类的头上带有特定的注解

@Component,@Repository,@Service,@Controller,就会将这个对象作为Bean注入进spring容器。

<context:component-scan base-package="cn.appsys.**"/>

总共整合起来

<?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:aop="http://www.springframework.org/schema/aop"
	xmlns:c="http://www.springframework.org/schema/c"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring"
	xsi:schemaLocation="http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring-1.2.xsd
		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-4.3.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">
     <!-- 引入数据库配置文件 -->
     <context:property-placeholder location="classpath:database.properties"/>
     <!--配置数据源-->
     <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="${driver}"></property>
        <property name="url" value="${url}"></property>
        <property name="username" value="${user}"></property>
        <property name="password" value="${password}"></property>
     </bean>
       <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
         <property name="dataSource" ref="dataSource"/>
         <property name="mapperLocations" value="classpath:cn/appsys/dao/**/*.xml"/>
         <property name="typeAliasesPackage" value="cn.appsys.pojo"></property>
       </bean> 
       <bean  class="org.mybatis.spring.mapper.MapperScannerConfigurer">
            <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/> 
            <property name="basePackage" value="cn.appsys.dao.**"/>
       </bean>
       <!--事务-->
       <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
           <property name="dataSource" ref="dataSource"></property>
       </bean>
       <tx:annotation-driven transaction-manager="transactionManager"/>
       
        <context:component-scan base-package="cn.appsys.**"/> 
         
       
         
</beans>

spring-mvc.xml

配置ajax和后端的交互返回时的乱码问题

<mvc:annotation-driven>:注解驱动

<mvc:message-converters>:消息转换器

StringHttpMessageConverter Read/write a string from request and response. 

StringHttpMessageConverter 从请求和响应读取/编写字符串。

Converter:转换器

supportedMediaTypes:支持介质类型

然后在下面出需要他支持的编码格式配置

<mvc:annotation-driven>
    	<mvc:message-converters>
			<!-- 处理请求返回json字符串的中文乱码问题 -->
			<bean class="org.springframework.http.converter.StringHttpMessageConverter">
				<property name="supportedMediaTypes">
					<list>
						<value>application/json;charset=UTF-8</value>
					</list>
				</property>
			</bean>
		</mvc:message-converters>
    </mvc:annotation-driven>

扫包配置: 

<context:component-scan base-package="cn.appsys.**"/>

该配置会拦截controller返回的string路径然后自动给他加上前缀和后缀,这意味着一般的人无法访问前端jsp的存放路径 

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
         <property name="prefix" value="/WEB-INF/jsp/"/>
         <property name="suffix" value=".jsp"/>
    </bean>

因为核心类会拦截所有的以/ 开头的路径,所以,我们并不能存储和访问任何在项目里面的文件,我们就特殊创建一个statics文件夹放在WebRoot底下,然后给它唯一的权限,可以不拦截访问该文件夹的路径请求,这样用户下载图片和访问前端页面的时候不会受到拦截,同时又保护了其他的文件的安全

<mvc:resources location="/statics/" mapping="/statics/**"/>

整合文件:

<?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:c="http://www.springframework.org/schema/c"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
		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-4.3.xsd">
    <mvc:annotation-driven>
    	<mvc:message-converters>
			<!-- 处理请求返回json字符串的中文乱码问题 -->
			<bean class="org.springframework.http.converter.StringHttpMessageConverter">
				<property name="supportedMediaTypes">
					<list>
						<value>application/json;charset=UTF-8</value>
					</list>
				</property>
			</bean>
		</mvc:message-converters>
    </mvc:annotation-driven>
    <context:component-scan base-package="cn.appsys.**"/>
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
         <property name="prefix" value="/WEB-INF/jsp/"/>
         <property name="suffix" value=".jsp"/>
    </bean>
    <mvc:resources location="/statics/" mapping="/statics/**"/>
</beans>

https://pan.baidu.com/s/1ghXEdcKwd_0z1s2XYfSpEQ

 密码:acge

Spring MVC 是 Spring 框架的一个模块,它是一种基于 MVC 设计模式的 Web 框架,用于开发具有灵活性和可扩展性的 Web 应用程序。Spring MVC 是目前最流行的 Java Web 框架之一,它可以与其他 Spring 框架和第三方框架集成使用,可以满足各种 Web 应用程序的需求。 Spring MVC 框架中的核心组件包括: 1. DispatcherServlet:前端控制器,用于接收客户端请求并将请求分发给相应的控制器。 2. HandlerMapping:用于将请求映射到相应的处理器(Controller)。 3. Controller:用于处理客户端请求并返回相应的视图。 4. ViewResolver:用于将逻辑视图名称解析为实际视图对象。 5. ModelAndView:用于封装处理器的返回值(数据模型和视图名称)。 6. Interceptor:用于在请求处理前或处理后执行一些公共的逻辑。 Spring MVC 框架的工作流程: 1. 客户端发送请求到 DispatcherServlet。 2. DispatcherServlet 根据请求 URL 调用 HandlerMapping 查找相应的处理器(Controller)。 3. Controller 处理请求并返回一个 ModelAndView 对象。 4. DispatcherServlet 调用 ViewResolver 根据逻辑视图名称查找相应的视图对象。 5. View 对象渲染模型数据,并将渲染后的结果返回给客户端。 6. 客户端接收响应并显示。 总的来说,Spring MVC 框架通过提供一种基于 MVC 设计模式的 Web 框架来简化 Web 应用程序的开发,提高应用程序的灵活性和可扩展性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值