SSM開發步驟

SSM:Spring+SpringMVC+Mybatis

使用註解開發步驟

1.配置web.xml

創建spring-mybatis.xml和spring-mvc.xml,在web.xml配置spring-mybatis.xml,spring-mvc.xml的加載

<!--在web.xml配置這個監聽器,啓動容器時,就會默認執行它實現的方法
在ContextLoaderListener中關聯了ContextLoader這個類,所以整個加
載配置過程由ContextLoader來完成。
配置監聽器爲了加載spring-mybatis.xml配置文件-->
 <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:spring-mybatis.xml</param-value>
  </context-param>
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  
  
  <!-- 配置DispatcherServlet  -->
  <servlet>
  	<servlet-name>DispatcherServlet</servlet-name>
  	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
 	<!-- 配置SpringMVC初始化參數,加載spring-mvc.xml配置文件 -->
 	<init-param>
 		<param-name>contextConfigLocation</param-name>
 		<param-value>classpath:spring-mvc.xml</param-value>
 	</init-param>
 	<!-- web容器啓動時就實例化DispatcherServlet:
 		初始化SpringMVC -->
 	<load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
  	<servlet-name>DispatcherServlet</servlet-name>
  	<!-- /:不攔截jsp
  		/*:會攔截jsp  -->
  	<url-pattern>/</url-pattern>
  </servlet-mapping>
  
// 使用Rest風格的URI將頁面普通的post請求轉爲指定的delete或者put請求
<filter>
  	<filter-name>HiddenHttpMethodFilter</filter-name>
  	<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
  
<filter-mapping>
  	<filter-name>HiddenHttpMethodFilter</filter-name>
  	<!--對所有請求攔截-->
  	<url-pattern>/*</url-pattern>
</filter-mapping>

瀏覽器form表單只支持GET與POST請求,而DELETE、PUT等method並不
支持,spring3.0添加了一個過濾器,可以將這些請求轉換爲標準的http方法使得支持GET、POST、PUT與DELETE請求,該過濾器爲HiddenHttpMethodFilter

@RequestMapping映射請求中的method參數實現四種請求方式的調用

在Controller中配置:
@RequestMapping(value="/stu",method=RequestMethod.GET)
@RequestMapping(value="/stu",method=RequestMethod.POST)
@RequestMapping(value="/stu",method=RequestMethod.PUT)
@RequestMapping(value="/stu",method=RequestMethod.DELETE)

將POST請求轉化爲put請求和delele請求的兩種方法

一種是通過表單,通過添加一個隱藏域更改類型

<!-- 發送put請求 -->
<form action="/blogs/1" method="post">
<input type="hidden" name="_method" value="put" >
<input type="submit" value="更新">
</form>

另一種方法是ajax傳值

$.ajax({
       url:"${APP_PATH}/RecordController/record",
       type:"POST",
       data:{id :id ,
           _method:"PUT/DELETE"
       },
       success:function(result){
           alert("update success");
       }
});

指定要使用的字符集,一般我們使用UTF-8

<filter>
    <filter-name>EncodingFileter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>utf8</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>EncodingFileter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

如何你的DispatcherServlet攔截".do"這樣的有後綴的URL,就不存在訪問不到靜態資源的問題。
如果DispatcherServlet攔截"/",爲了實現REST風格,攔截了所有的請求,那麼同時對
.js, *.jpg等靜態文件的訪問也就被攔截了。

 <servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.js</url-pattern>
    <url-pattern>*.jpg</url-pattern>
    <url-pattern>*.gif</url-pattern>
  </servlet-mapping>

2.配置spring-mybatis.xml

<!--將Service包下類的創建權交給Spring控制,在類加上spring組
件註解,只需再配置下spring的掃描器就可以實現bean的自動載入
base-package指明一個包:表明service包及其子包中,如果某個類的頭上帶有特定的註解
@Component,@Repository,@Service,@Controller,就會將這個對象作爲Bean注入進spring容器。-->
<context:component-scan base-package="service"></context:component-scan>
在spring的配置文件加載(db.properties)數據庫連接參數

<context:property-placeholder location=“classpath:db.properties”/>
這裏location值爲參數配置文件的位置,參數配置文件通常放在src目錄下,而參數配置文件的格式跟java通用的參數配置文件相同,即鍵
值對的形式,例如:
#jdbc配置
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test
jdbc.username=root
jdbc.password=1234

    <context:property-placeholder location="classpath:db.properties"/>
配置數據源

Spring在第三方依賴包中包含了兩個數據源的實現類包,其一是Apache的DBCP,其二是 C3P0。可以在Spring配置文件中利用這兩者中任何一個配置數據源。

    <!--DBCP數據源配置:-->
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
    	<property name="driverClassName" value="${jdbc.driverClassName}"></property>
    	<property name="url" value="${jdbc.url}"></property>
    	<property name="username" value="${jdbc.user}"></property>
    	<property name="password" value="${jdbc.password}"></property>
    </bean>
    <!--C3P0數據源配置-->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">       
    <property name="driverClass" value=" ${jdbc.driverClassName} "/>       
    <property name="jdbcUrl" value=" ${jdbc.url} "/>       
    <property name="user" value="${jdbc.user}"/> 
    <property name="password" value="${jdbc.password}"></property>
bean>   
SqlSessionFactoryBean用來生成SqlSession

Mybatis的所有操作都是基於一個SqlSession的,而SqlSession是由SqlSessionFactory來產生的,SqlSessionFactory又是由SqlSessionFactoryBuilder來生成的。但是Mybatis-Spring是基於SqlSessionFactoryBean的。
SqlSessionFactoryBean,在這個bean裏面還是通過SqlSessionFactoryBuilder來建立對應的SqlSessionFactory,進而獲取到對應的SqlSession。

    <bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!--SqlSessionFactoryBean的時候,dataSource屬性是必須指定的,
        它表示用於連接數據庫的數據源。-->
    	<property name="dataSource" ref="dataSource"></property>
    	 <!--typeAliasesPackage:它一般對應我們的實體類所在
    	 的包,這個時候會自動對包中的類起別名。如 User--->user
    	 多個package之間可以用逗號或者分號等來進行分隔。-->
    	<property name="typeAliasesPackage" value="entity"></property>
    </bean>
mapperScanner:配置接口映射。

MapperScannerConfigurer是spring和mybatis整合的mybatis-spring jar包中提供的一個類。
如果數據映射接口很多的話,需要在Spring的配置文件中對數據映射接口做配置,相應的配置項會很多了。爲了簡化配置,在MyBatis-Spring中提供了一個轉換器MapperScannerConfig它可以將接口轉換爲Spring容器中的Bean,在Service中@Autowired的方法直接注入接口實例。在Spring的配置文件中可以採用以下所示的配置將接口轉化爲Bean。

     <bean id="mapperScanner" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!--映射mapper包下的所有接口-->
     	<property name="basePackage" value="mapper"></property>
     </bean>
配置事務管理組件

Spring在jdbc中提供了一個事務管理組件:org.springframework.jdbc.datasource.DataSourceTransactionManager

    <bean id="transactionManager"
		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<!-- 注入DataSource -->
		<property name="dataSource" ref="dataSource"></property>
	</bean>

3.配置spring-mvc.xml

    <!--<mvc:annotation-driven>會自動註冊RequestMappingHandlerMapping
    與RequestMappingHandlerAdapter兩個Bean,這是SpringMVC爲@Controller
    分發請求所必需的,並且提供了數據綁定支持,-->
    <mvc:annotation-driven />
    
    <!--在開發RESTful架構的URI時,我們都會在web.xml中將前端
    控制器的映射請求設置爲"/"。關於配置成"/",在 Spring的官方文檔中這樣描述:
    大概意思是默認Servlet的RequestDispatcher 必須通過名稱而不是路徑來檢索。
    換句話說就是SpringMVC 將接收到的所有請求都看作是一個普通的請求,包括對
    於靜態資源的請求。這樣以來,所有對於靜態資源的請求都會被看作是一個普通
    的後臺控制器請求,導致請求找不到而報404 異常錯誤。
    在SpringMVC中如果攔截了靜態資源的請求,那麼這個請求交給Servlet處理-->
    <mvc:default-servlet-handler />
    
    <context:component-scan base-package="mycontroller"></context:component-scan>
        
    <!-- 配置視圖解析器:InternalResourceViewResolver
        prefix:前綴;suffix:後綴-->
	<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/WEB-INF/myjsp/"></property>
		<property name="suffix" value=".jsp"></property>
	</bean>
	
	
	<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
		<!-- 設置上傳最大字節數 -->
		<property name="maxUploadSize" value="10241024"></property>
		<!-- 上傳文本文件需要指定編碼 -->
		<property name="defaultEncoding" value="utf8"></property>
	</bean>
常用註解:
@RequestMapping:處理請求地址映射的註解
RequestMapping是一個用來處理請求地址映射的註解,可用於類或方法上。用於類上,
表示類中的所有響應請求的方法都是以該地址作爲父路徑。

RequestMapping註解有六個屬性,下面我們把她分成三類進行說明(下面有相應示例)。

1、 value, method;
value:     指定請求的實際地址,指定的地址可以是URI 
method:  指定請求的method類型, GET、POST、PUT、DELETE等;

2、consumes,produces
consumes:指定處理請求的提交內容類型(Content-Type)
例如application/json, text/html;
produces:指定返回的內容類型,僅當request請求頭中的(Accept)類型中包含該指定類型才返回;
如:produces="html/text;charset=utf8"
@RequestParam:用於獲取傳入參數的值
value:參數的名稱
required:定義該傳入參數是否必須,默認爲true
如果數據是Map必須要加此註解

public String requestParams(@RequestParam(value = "name",required = false) String names){
     System.out.println("name = "+names);
     return "index";
 }
@PathViriable:用於定義路徑參數值
value:參數的名稱
required:定義傳入參數是否爲必須值
@RequestMapping(value="/{id}" ,method=RequestMethod.GET)

public String toUpdate(@PathVariable("id")Integer avId,Model model){
	AV av = avService.findAVById(avId);
	model.addAttribute("av", av);
	return "updateAV";
}
@ResponseBody:作用於方法上,可以將整個返回結果以某種格式返回,如json或xml格式。
後端如何接收前端的json數據
@RequestBody
public void receiveJSON(@RequestBody AV av,HttpServletResponse response){
    //代碼
}
注意:
前端向後端發送JSON數據
一定要指定contentType:"application/json;charset=utf8"
後端如何發送json數據到前端
    @ResponseBody:
    1.把Java對象序列化爲JSON
   	2.response.getWriter().print(data);
   	@ResponseBody 
	public AV sendJSON(AV av){
		return av;
	}
@ModelAttribute:用於把參數保存到model中

可以註解方法或參數,註解在方法上的時候,該方法將在處理器方法執行之前執行,然後把返回的對象存放在 session。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章