1.启用springMVC的注解配置和引入DispatcherServlet
2 <mvc:annotation-driven/> <!-- 启用控制层的注解配置模式 ,写入这一个,idea会自动弹出几个sping-mvc的命名空间供我们选择,我们选择以mvc结尾的命名空间即可--><!--启用注解配置,启用不启用都可以--> 3 <mvc:default-servlet-handler/> <!-- 使用之前配置的DispatcherServlet类处理请求 --> 4
2.引入ModelAndView类,并配置扫描前缀和扫描后缀
1 <!--定义此类即引入了Spring中的ModelAndView类, 定义一个页面资源解析的处理类,该类的主要功能是匹配路径的前缀与后缀 --> 2 <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 3 <property name="prefix" value="/WEB-INF/pages" /> 4 <property name="suffix" value=".jsp" /> 5 </bean>
3.引入aop相关的命名空间
1 xmlns:aop="http://www.springframework.org/schema/aop" 2 http://www.springframework.org/schema/aop 3 https://www.springframework.org/schema/aop/spring-aop.xsd">
4.为保存在WEB-INF下所有的静态资源设置映射访问路径
1 <!-- 为保存在WEB-INF下所有的静态资源设置映射访问路径 --> 2 <mvc:resources mapping="/mvcjs/**" location="/WEB-INF/js/"/> 3 <mvc:resources mapping="/mvccss/**" location="/WEB-INF/css/"/> 4 <mvc:resources mapping="/mvcimages/**" location="/WEB-INF/images/"/>
<!--举个例子,如果/WEB-INF/js/photo.jpg,需要引用此图片的时候直接用<img src="mvcjs/photo.jpg"即可>-->
5.加载资源文件的配置
1 假设文件目录为src/main/resources/com.ytinf.message包下有两个资源文件message.properties和pages.properties,配置方法如下
<!-- 进行所有要加载的“*.properties”配置文件的路径定义,直接通过CLASSPATH加载 --> 2 <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"> 3 <property name="basenames"> 4 <array> <!-- basename是只包含有包名称和文件名称的组成,不包含有后缀 --> 5 <value>com.ytinf.message.message</value> 6 <value>com.ytinf.message.pages</value> 7 </array> 8 </property> 9 </bean>
6.进行上传文件的设置
1 <!-- 进行上传文件组件的相关配置,配置的是上传文件的解析处理类 --> 2 <bean id="multipartResolver" 3 class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> 4 <!-- 设置整体上传文件的最大数据量,本次允许上传最大文件量为5M,下面的单位都是字节(b) ,所以需要将其他单位的都转换成字节--> 5 <property name="maxUploadSize" value="5242880"/> 6 <!-- 设置单个上传文件的最大数据量,本次允许上传最大文件量为2M --> 7 <property name="maxUploadSizePerFile" value="253952"/> 8 <!-- 允许占用的最大内存量,本次设置为10M --> 9 <property name="maxInMemorySize" value="10485760"/> 10 <!-- 设置上传文件的临时保存目录,该目录的内容在每一次请求之后都需要清空 --> 11 <property name="uploadTempDir" value="/tmp"/> 12 </bean>
注1:对上传组件设置完成之后应该在设置一个上传失败跳转页面,举个例子设置上传文件最大5M,结果用户传了一个6M的文件,这时就需要跳转,下面是设置错误页
<!-- 定义一个全局的跳转路径配置 -->
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings"> <!-- 进行异常映射的处理配置 -->
<props>
<prop key="org.springframework.web.multipart.MaxUploadSizeExceededException">
plugins/errors<!--再加上前面配置的WEB-INF/pages/前缀和.jsp后缀,这时会自动匹配到WEB-INF/pages/plugins/errors.jsp路径上-->
</prop>
</props>
</property>
</bean>
注2:设置完成异常跳转路径之后,需要设置一个文件保存目录,直接继承老师上课讲的那个类,然后调用其中的upload方法即可上传。如果页面需要展示此图片,则在action方法中就需要将文件名称传递过去,然后在jsp页面中接收(img src=上传目录/文件名称)。
注3:设置完成上传目录之后,这时如果上传文件过大会直接搞垮掉,此时的上传控制实际上并没有生效,这时Tomcat自身的设置问题,如果要想解决这个限制就必须修改tomcat的server.xml配置文件,在<Connector>标签中加入maxSwallowSize="-1"即可。
强调:如果某个页面需要上传,则需要提供有输入表单,则此表单一定要封装 enctype="multipart/form-data"
7.(1)进行aop切入点的配置及相关处理类的配置*(这种配置方式有点麻烦)
1 <context:component-scan base-package="com.ytinf"/> 2 <bean id="serviceAdvice" class="com.ytinf.aop.ServiceAdvice"/> <!-- 辅助处理类,用户自定义的类,这个类中有五个方法分别为beforeHandle(),afterHandle(),returnHandle(),throwHandle()和aroundHandle()-->
<aop:config> <!-- 进行AOP的具体配置 前置通知,后置通知,返回通知,异常通知,环绕通知-->
<aop:pointcut id="commonPointcut" expression="execution(public * com.ytinf.service..*.*(..))"/>
<aop:aspect ref="serviceAdvice"> <!-- 进行代码的织入处理 -->
<aop:before method="beforeHandle" arg-names="vo" pointcut="execution(public * com.ytinf.service..*.*(..)) and args(vo)"/>
<aop:after method="afterHandle" pointcut-ref="commonPointcut"/>
<aop:after-returning method="returnHandle" pointcut-ref="commonPointcut" returning="resval" arg-names="resval"/>
<aop:after-throwing method="throwHandle" pointcut-ref="commonPointcut" throwing="e" arg-names="e"/>
<aop:around method="aroundHandle" pointcut-ref="commonPointcut"/>
</aop:aspect>
</aop:config>
8.(2)基于Annotation实现AOP配置,要想使用Annotation配置,首先需要启用注解支持(然后在ServiceAdvice类上面用@Aspect注解,在前置方法上用@Before(value="AspectJ表达式",argNames="参数名称")注解,在后置上用@After注解,@AfterThrowing(value="AspectJ表达式",throwing="e",argNames="e),@AfterReturning(value="AspectJ表达式",returning="res",argNames="res"),@Around(value="AspectJ表达式"))
<!-- 进行扫描包的设置,如果要设置多个包,则可以使用“,”拆分 -->
<context:component-scan base-package="com.ytinf"/>
<aop:aspectj-autoproxy/> <!-- 启用Annotation注解支持 -->
9.配置扫描包时,千万不能重复扫描(配置扫描包一共三种,在spring-mvc.xml文件中只配置控制层的扫描包,spring-base.xml文件中只配置业务层和数据层的扫描包)
1 <context:component-scan base-package="com.ytinf.action"/><!--设置控制层的扫描包-->