配置文件
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/spring-bean.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!--springmvc过滤器 及 springmvc.xml的路径控制器-->
<servlet>
<servlet-name>DispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<!--在servlet容器加载时就初始化,并且优先级为1-->
<!--<load-on-startup>1</load-on-startup>-->
</servlet>
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!--编码格式 放在所有过滤器之前-->
<filter>
<filter-name>Encoding</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>forceRequestEncoding</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>forceResponseEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--rest风格 处理隐藏域-->
<filter>
<filter-name>Hidden</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>Hidden</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
使ajax可以发送 PUT,delete形式
<filter>
<filter-name>HttpPutFormContentFilter</filter-name>
<filter-class>org.springframework.web.filter.HttpPutFormContentFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HttpPutFormContentFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
springmvc
<!--扫描包-->
<context:component-scan base-package="ssm" use-default-filters="false">
<!--只扫描控制器-->
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" ></context:include-filter>
</context:component-scan>
<!--将springmvc不能处理的交给 tomcat-->
<mvc:default-servlet-handler></mvc:default-servlet-handler>
<mvc:resources mapping="/jquery/**" location="/static/js/"></mvc:resources>
<mvc:resources mapping="/css/**" location="/static/bootstrap-3.3.7-dist/css/"></mvc:resources>
<mvc:resources mapping="/bootstrap/**" location="/static/bootstrap-3.3.7-dist/js/"></mvc:resources>
<mvc:resources mapping="/fonts/**" location="/static/bootstrap-3.3.7-dist/fonts/"></mvc:resources>
<!--前端解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--前缀和后缀-->
<property name="prefix" value="/WEB-INF/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
<!--<context:annotation-config></context:annotation-config>-->
<mvc:annotation-driven></mvc:annotation-driven>
<!--自定义拦截器-->
<!--<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/Employee/save_employee"/>
<bean class="ssm.utils.MyIncepter"></bean>
</mvc:interceptor>
</mvc:interceptors>-->
上面配置了<mvc:servlet-default-handle>就不用配置json的映射器(下面这两个)了
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<!-- json视图拦截器,读取到@ResponseBody的时候去配置它-->
<ref bean="mappingJacksonHttpMessageConverter"/>
</list>
</property>
</bean>
<bean id="mappingJacksonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>application/json;charset=UTF-8</value>
</list>
</property>
</bean>
spring的配置文件
<context:component-scan base-package="ssm">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"></context:exclude-filter>
</context:component-scan>
<!--数据源 及事务控制-->
<context:property-placeholder location="classpath:c3p0.properties"></context:property-placeholder>
<bean id="pooledDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
<property name="driverClass" value="${jdbc.driverClass}"></property>
<property name="user" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
</bean>
<!--和mybaties的整合-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!--mybaties的全局配置文件-->
<property name="configLocation" value="classpath:mybaties.xml"></property>
<property name="dataSource" ref="pooledDataSource"></property>
<property name="mapperLocations" value="classpath:mapper/*.xml"></property>
</bean>
<!--配置批量处理的sqlsession-->
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<!--有参构造-->
<constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"/>
<constructor-arg name="executorType" value="BATCH"></constructor-arg>
</bean>
<!--配置扫面器 扫描mybaties接口 将mapper接口注入到 Ioc容器中-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="ssm.dao.mymapper"></property>
</bean>
<!--事务控制-->
<bean id="TransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!--控制事务源-->
<property name="dataSource" ref="pooledDataSource"></property>
</bean>
<!--基于注解的事务配置-->
<aop:config>
<aop:pointcut id="aoppoint" expression="execution(* ssm.service..*(..))"></aop:pointcut>
<aop:advisor advice-ref="txmanager" pointcut-ref="aoppoint"></aop:advisor>
</aop:config>
<tx:advice id="txmanager" transaction-manager="TransactionManager">
<tx:attributes>
<tx:method name="*"/>
</tx:attributes>
</tx:advice>
index页面:
表单:略
//保存
$('#emp_save_btn').click(function () {
if(!form_validate){
return false;
}
//判断 服务器判断
if($('#emp_save_btn').attr('ajax-va') == 'error'){
return false;
}
$.ajax({
// 报了415错误 jquery-1.12.4.min.js:4 POST http://localhost:8080/Employee/save_employee 415 (Unsupported Media Type)
url:"${pageContext.request.contextPath}/Employee/save_employee",
//解决: 添加dataType
dataType:"json",
type:"POST",
data:$('#empAddModal form').serialize(),
// data:$('#empAddModal form').serialize(),
// ContentType:"application/x-www-form-urlencoded",
function 为回调函数,result为 从服务器传回的结果
success: function(result){
//员工保存成功,关闭模态框
if(result.code == 100){
console.log('收到成功信息');
$('#empAddModal').modal('hide');
to_page(totalRecord);
}else{
console.log('收到失败信息')
console.log(result);
// $('#empAddModal form').addClass("has-error");
var fe=result.extend.errorsfiled;
if (fe.ename) {
show_validate_msg('#empName_add_input','error',fe.ename);
}
if (fe.email){
show_validate_msg('#email_add_input','error',fe.email);
}
if(fe.Enumber){
show_validate_msg('#email_add_input','error',fe.Enumber);
}
}
},
error:function (result) {
alert(result);
console.log(result)
}
});
});
控制器:
@Controller
@RequestMapping("Employee")
public class EmployeeController {
@Autowired
private EmployeeService employeeService;
```...
//添加员工 @RequestBody只能接收 json?
@ResponseBody
@RequestMapping(value="/save_employee",method = RequestMethod.POST)
public Msg save_employee(@Valid Employee employee, BindingResult result){
System.out.println(“信息”+employee);
if (result.hasErrors()) {
//校验失败 在模态框中返回信息
Map<String, Object> map = new HashMap<>();
List<FieldError> errors = result.getFieldErrors();
for (FieldError er : errors) {
//错误字段 错误信息
System.out.println(er.getField() + " : " + er.getDefaultMessage());
map.put(er.getField(), er.getDefaultMessage());
}
return Msg.fail().add("errorsfiled",map);
}else {
this.employeeService.save_employee(employee);
return Msg.success().add("code", "成功");
}
}
整合中遇到的问题
标题