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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值