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"/><!--設置控制層的掃描包-->