美文网首页
SSM框架整合

SSM框架整合

作者: AAnna珠 | 来源:发表于2019-05-13 18:52 被阅读0次

空框架

配置文件

CustomValidationMessages.properties

item.name.length.illigel=商品在名称在1到30个字符之间
createtime.is.null=时间不能为空

db.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis?serverTimezone=Asia/Shanghai
jdbc.username=root
jdbc.password=root

log4j.properties

# Global logging configuration\uff0c\u5efa\u8bae\u5f00\u53d1\u73af\u5883\u4e2d\u8981\u7528debug
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

applicationContext-dao.xml

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-4.2.xsd 
        http://www.springframework.org/schema/mvc 
        http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd 
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context-4.2.xsd 
        http://www.springframework.org/schema/aop 
        http://www.springframework.org/schema/aop/spring-aop-4.2.xsd 
        http://www.springframework.org/schema/tx 
        http://www.springframework.org/schema/tx/spring-tx-4.2.xsd ">
    <!-- 加载配置文件 -->
    <context:property-placeholder location="classpath:db.properties" />
    <!-- 数据库连接池 -->
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
        destroy-method="close">
        <property name="driverClassName" value="${jdbc.driver}" />
        <property name="url" value="${jdbc.url}" />
        <property name="username" value="${jdbc.username}" />
        <property name="password" value="${jdbc.password}" />
        <property name="maxActive" value="30" />
        <property name="maxIdle" value="5" />
    </bean>

    <!-- 让spring管理sqlsessionfactory 使用mybatis和spring整合包中的 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- 数据库连接池 -->
        <property name="dataSource" ref="dataSource" />
        <!-- 加载mybatis的全局配置文件 -->
        <property name="configLocation" value="classpath:mybatis/SqlMapConfig.xml" />
    </bean>
    <!-- mapper扫描器 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.neuedu.ssm.mapper"></property>
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
    </bean>

</beans>

applicationContext-service.xml

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-4.2.xsd 
        http://www.springframework.org/schema/mvc 
        http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd 
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context-4.2.xsd 
        http://www.springframework.org/schema/aop 
        http://www.springframework.org/schema/aop/spring-aop-4.2.xsd 
        http://www.springframework.org/schema/tx 
        http://www.springframework.org/schema/tx/spring-tx-4.2.xsd ">
        
    <bean id="itemsService" class="com.neuedu.ssm.service.ItemsServiceImpl"></bean>
        
</beans>

applicationContext-transation.xml

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-4.2.xsd 
        http://www.springframework.org/schema/mvc 
        http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd 
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context-4.2.xsd 
        http://www.springframework.org/schema/aop 
        http://www.springframework.org/schema/aop/spring-aop-4.2.xsd 
        http://www.springframework.org/schema/tx 
        http://www.springframework.org/schema/tx/spring-tx-4.2.xsd ">

    <!-- 事务管理器 -->
    <bean id="transactionManager"
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <!-- 数据源 -->
        <property name="dataSource" ref="dataSource" />
    </bean>

    <!-- 通知 -->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <!-- 传播行为 -->
            <tx:method name="save*" propagation="REQUIRED" />
            <tx:method name="insert*" propagation="REQUIRED" />
            <tx:method name="delete*" propagation="REQUIRED" />
            <tx:method name="update*" propagation="REQUIRED" />
            <tx:method name="find*" propagation="SUPPORTS" read-only="true" />
            <tx:method name="get*" propagation="SUPPORTS" read-only="true" />
        </tx:attributes>
    </tx:advice>

    <!-- 切面 -->
    <aop:config>
        <aop:advisor advice-ref="txAdvice"
            pointcut="execution(* com.neuedu.ssm.service.*.*(..))" />
    </aop:config>
</beans>

Springmvc.xml

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-4.2.xsd 
        http://www.springframework.org/schema/mvc 
        http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd 
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context-4.2.xsd 
        http://www.springframework.org/schema/aop 
        http://www.springframework.org/schema/aop/spring-aop-4.2.xsd 
        http://www.springframework.org/schema/tx 
        http://www.springframework.org/schema/tx/spring-tx-4.2.xsd ">

    <!-- 扫描controller注解,多个包中间使用半角逗号分隔 -->
    <context:component-scan base-package="com.neuedu.ssm.action" />
    
    <mvc:resources location="/js/" mapping="/js/**"></mvc:resources>

    <!--注解映射器 -->
    <bean
        class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" />
        
    <!--注解适配器 -->
    <bean
        class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
        <property name="webBindingInitializer" ref="customBinder"></property>
        <property name="messageConverters">
            <list>
                <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"></bean>
            </list>
        </property>
    </bean>
    <!-- 自定义webBinder -->
    <bean id="customBinder"
        class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer">
        <!-- <property name="propertyEditorRegistrars">
            <list>
                <ref bean="customPropertyEditor"/>
            </list>
        </property> -->
        <property name="conversionService" ref="conversionService"></property>
        <property name="validator" ref="validator"></property>
    </bean>
    <!-- 注册属性编辑器 -->
    <!-- <bean id="customPropertyEditor" class="com.neuedu.ssm.action.propertyeditor.CustomPropertyEditor"></bean> -->
    <!-- 注册转换器 -->
    <bean id="conversionService"
        class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
        <!-- 转换器 -->
        <property name="converters">
            <list>
                <bean class="com.neuedu.ssm.action.converter.CustomDateConverter"/>
            </list>
        </property>
    </bean>
    
    <mvc:interceptors>
        <!-- <mvc:interceptor>
            <mvc:mapping path="/**"/>
            <bean class="com.neuedu.ssm.interceptor.HandlerInterceptor1"></bean>
        </mvc:interceptor>
        <mvc:interceptor>
            <mvc:mapping path="/**"/>
            <bean class="com.neuedu.ssm.interceptor.HandlerInterceptor2"></bean>
        </mvc:interceptor> -->
        <mvc:interceptor>
            <mvc:mapping path="/**"/>
            <bean class="com.neuedu.ssm.interceptor.LoginInterceptor"></bean>
        </mvc:interceptor>
    </mvc:interceptors>
    
    <!-- ViewResolver -->
    <bean
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass"
            value="org.springframework.web.servlet.view.JstlView" />
        <property name="prefix" value="/WEB-INF/jsp/" />
        <property name="suffix" value=".jsp" />
    </bean>

    <!-- 文件上传解析器 -->
    <bean id="multipartResolver"
        class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!-- 设置上传文件的最大尺寸为5MB -->
        <property name="maxUploadSize">
            <value>5242880</value>
        </property>
    </bean>
    
    <!-- 校验错误信息配置文件 -->
    <bean id="validator"
        class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
        <property name="providerClass" value="org.hibernate.validator.HibernateValidator" />
        <!-- 如果不指定则默认使用classpath下的ValidationMessages.properties -->
        <property name="validationMessageSource" ref="messageSource" />
    </bean>
    <bean id="messageSource"
        class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
        <property name="basenames">   
         <list>    
            <value>classpath:CustomValidationMessages</value>   
         </list>   
        </property>
        <!-- <property name="fileEncodings" value="utf-8" /> -->
        <property name="defaultEncoding" value="utf-8" />
        <property name="cacheSeconds" value="120" />
    </bean>
    
    <!-- 自定义异常处理器 -->
    <bean class="com.neuedu.ssm.exception.CustomExceptionResolver"></bean>

</beans>

SqlMapConfig.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <typeAliases>
        <package name="com.neuedu.ssm.po"/>
    </typeAliases>
    <!--使用自动扫描器时,mapper.xml文件如果和mapper.java接口在一个目录则此处不用定义mappers -->
    <!-- <mappers>
        <package name="cn.itcast.ssm.mapper" />
    </mappers> -->
</configuration>

src/com.neuedu.ssm


图一.png
src/com.neuedu.ssm/service

ItemsService.java

package com.neuedu.ssm.service;

import java.util.List;

import com.neuedu.ssm.po.Items;
import com.neuedu.ssm.po.QueryVo;

public interface ItemsService {

    //商品查询列表
    public List<Items> findItemsList(QueryVo queryVo)throws Exception;
    
    public Items findItemById(int id) throws Exception;
    
    public void saveItem(Items items)throws Exception;
}

ItemsServiceImpl.java

package com.neuedu.ssm.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;

import com.neuedu.ssm.mapper.ItemsMapper;
import com.neuedu.ssm.po.Items;
import com.neuedu.ssm.po.QueryVo;

public class ItemsServiceImpl implements ItemsService {
    
    @Autowired
//  @Qualifier("itemsMapper")
    private ItemsMapper itemsMapper;

    @Override
    public List<Items> findItemsList(QueryVo queryVo) throws Exception {
        return itemsMapper.findItemsList(queryVo);
    }

    @Override
    public Items findItemById(int id) throws Exception {
        return itemsMapper.findItemById(id);
    }

    @Override
    public void saveItem(Items items) throws Exception {
        itemsMapper.saveItem(items);
    }

}

src/com.neuedu.ssm/po

Item.java

package com.neuedu.ssm.po;

import java.util.Date;

import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

import com.neuedu.ssm.action.validator.ValidGroup1;
import com.neuedu.ssm.action.validator.ValidGroup2;

public class Items {
    private Integer id;

    @Size(min=1,max=30,message="{item.name.length.illigel}",groups={ValidGroup1.class})
    private String name;

    private Float price;

    private String pic;
    
    @NotNull(message="{createtime.is.null}",groups={ValidGroup2.class})
    private Date createtime;

    private String detail;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name == null ? null : name.trim();
    }

    public Float getPrice() {
        return price;
    }

    public void setPrice(Float price) {
        this.price = price;
    }

    public String getPic() {
        return pic;
    }

    public void setPic(String pic) {
        this.pic = pic == null ? null : pic.trim();
    }

    public Date getCreatetime() {
        return createtime;
    }

    public void setCreatetime(Date createtime) {
        this.createtime = createtime;
    }

    public String getDetail() {
        return detail;
    }

    public void setDetail(String detail) {
        this.detail = detail == null ? null : detail.trim();
    }

    @Override
    public String toString() {
        return "Items [id=" + id + ", name=" + name + ", price=" + price
                + ", pic=" + pic + ", createtime=" + createtime + ", detail="
                + detail + "]";
    }
    
}

ItemsCustom.java

package com.neuedu.ssm.po;


public class ItemsCustom extends Items {
    
    //
    
}

ItemsQueryVo.java

package com.neuedu.ssm.po;

import java.util.List;


public class ItemsQueryVo {
    
    //
    private Items items;
    
    //
    private ItemsCustom itemsCustom;
    
    //
    private List<ItemsCustom> itemsList;
    
    //
    //private UserCustom userCustom;

    public Items getItems() {
        return items;
    }

    public void setItems(Items items) {
        this.items = items;
    }

    public ItemsCustom getItemsCustom() {
        return itemsCustom;
    }

    public void setItemsCustom(ItemsCustom itemsCustom) {
        this.itemsCustom = itemsCustom;
    }

    public List<ItemsCustom> getItemsList() {
        return itemsList;
    }

    public void setItemsList(List<ItemsCustom> itemsList) {
        this.itemsList = itemsList;
    }
    
    

}

QueryVo.java

package com.neuedu.ssm.po;

import java.util.List;

public class QueryVo {
    
    private Items items;
    
    public Items getItems() {
        return items;
    }

    public void setItems(Items items) {
        this.items = items;
    }

    private User user;
    
    //
    private UserCustom userCustom;
    
    //
    private List<Integer> ids;
    
    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }

    public UserCustom getUserCustom() {
        return userCustom;
    }

    public void setUserCustom(UserCustom userCustom) {
        this.userCustom = userCustom;
    }

    public List<Integer> getIds() {
        return ids;
    }

    public void setIds(List<Integer> ids) {
        this.ids = ids;
    }



}

User.java

package com.neuedu.ssm.po;

import java.io.Serializable;
import java.util.Date;

public class User implements Serializable {
    private int id;
    private String username;// 用户姓名
    private String sex;// 性别
    private Date birthday;// 生日
    private String address;// 地址

    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public Date getBirthday() {
        return birthday;
    }
    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
    @Override
    public String toString() {
        return "User [id=" + id + ", username=" + username + ", sex=" + sex
                + ", birthday=" + birthday + ", address=" + address + "]";
    }

    
    

}

UserCustom.java

package com.neuedu.ssm.po;

import java.util.Date;

public class UserCustom extends User {
    
    //这里添加扩展字段
    private Date birthday_start;//起始日期
    private Date birthday_end;//截止日期
    
    
}

src/com.neuedu.ssm/Mapper

ItemsMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.neuedu.ssm.mapper.ItemsMapper">

    <!-- sql片段 -->
    <!-- 商品查询条件 -->
    <sql id="query_items_where">
        <if test="items!=null">
            <if test="items.name!=null and items.name!=''">
                and items.name like '%${items.name}%'
            </if>
        </if>
    </sql>

    <!-- 查询商品信息 -->
    <select id="findItemsList" parameterType="queryVo" resultType="items">
        select * from items
        <where>
            <include refid="query_items_where" />
        </where>
    </select>

    <select id="findItemById" parameterType="int" resultType="items">
        select
        * from items where id = #{id}
    </select>

    <update id="saveItem" parameterType="items">
        update items
        set name = #{name},
            price = #{price},
            createtime = #{createtime},
            pic = #{pic},
            detail = #{detail}
        where id = #{id}
    </update>

</mapper>

ItemsMapper.java

package com.neuedu.ssm.mapper;

import java.util.List;

import com.neuedu.ssm.po.Items;
import com.neuedu.ssm.po.QueryVo;

public interface ItemsMapper {

    //商品列表
    public List<Items> findItemsList(QueryVo queryVo) throws Exception;
    
    //根据id查询商品信息
    public Items findItemById(int id) throws Exception;
    
    //修改商品信息
    public void saveItem(Items items)throws Exception;
}

src/com.neuedu.ssm/Interceptor

HandlerInterceptor1.java

package com.neuedu.ssm.interceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

//定义拦截器
public class HandlerInterceptor1 implements HandlerInterceptor {

    
    //进入handler方法之前执行
    //用于身份认证,身份授权
    //比如身份认证,如果认证不通过表示当前用户没有登录,需要此方法拦截,不再向下执行
    public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {
        System.out.println("HandlerInterceptor1...preHandle");
        
        return true;
    }
    
    //进入handler方法之后,返回modelandview之前执行
    //应用场景,将公共的模型数据(比如菜单导航、天气预报。。)在这里传到视图,也可以在这里统一指定视图
    public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
            throws Exception {
        
        System.out.println("HandlerInterceptor1...postHandle");
    }

    //执行handler完成之后,执行此方法
    //应用场景:统一异常处理,统一日志处理
    public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
            throws Exception {
        System.out.println("HandlerInterceptor1...afterCompletion");
    }

}

HandlerInterceptor2.java

package com.neuedu.ssm.interceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

//定义拦截器
public class HandlerInterceptor2 implements HandlerInterceptor {

    
    //进入handler方法之前执行
    //用于身份认证,身份授权
    //比如身份认证,如果认证不通过表示当前用户没有登录,需要此方法拦截,不再向下执行
    public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {
        System.out.println("HandlerInterceptor2...preHandle");
        
        return true;
    }
    
    //进入handler方法之后,返回modelandview之前执行
    //应用场景,将公共的模型数据(比如菜单导航、天气预报。。)在这里传到视图,也可以在这里统一指定视图
    public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
            throws Exception {
        
        System.out.println("HandlerInterceptor2...postHandle");
    }

    //执行handler完成之后,执行此方法
    //应用场景:统一异常处理,统一日志处理
    public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
            throws Exception {
        System.out.println("HandlerInterceptor2...afterCompletion");
    }

}

LoginInterceptor.java

package com.neuedu.ssm.interceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

public class LoginInterceptor implements HandlerInterceptor {


    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse reponse, Object arg2) throws Exception {
        
        //如果登录页面,则放行
        if(request.getRequestURI().indexOf("login.action") >= 0){
            return true;
        }
        //如果用户已经登陆,则放行
        HttpSession session = request.getSession();
        if(session.getAttribute("username") != null){
            return true;
        }
        
        request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request, reponse);
        
        return false;
    }
    
    @Override
    public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
            throws Exception {
        // TODO Auto-generated method stub
        
    }

    @Override
    public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
            throws Exception {
        // TODO Auto-generated method stub
        
    }

}

src/com.neuedu.ssm/Exception

CustomException.java

package com.neuedu.ssm.exception;

//自定义异常类
public class CustomException extends Exception {

    public CustomException(String message){
        super(message);
        this.message = message;
    }
    
    private String message;

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
    
}

CustomExceptionResolver.java

package com.neuedu.ssm.exception;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;

//自定义异常处理器
public class CustomExceptionResolver implements HandlerExceptionResolver {

    @Override
    public ModelAndView resolveException(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2,
            Exception ex) {
        
        //打印异常信息
        ex.printStackTrace();
        
        CustomException customException = null;
        
        //如果抛出的是系统自定义异常则直接转换
        if(ex instanceof CustomException){
            customException = (CustomException)ex;
        }else{
            //如果抛出的不是系统自定义异常,则重新构造一个未知异常
            customException = new CustomException("未知错误,请与系统管理员联系!");
        }
        
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("message", customException.getMessage());
        modelAndView.setViewName("error");
        
        return modelAndView;
    }

}

src/com.neuedu.ssm/converter

CustomDateConverter.java

package com.neuedu.ssm.converter;

import java.text.SimpleDateFormat;
import java.util.Date;

import org.springframework.core.convert.converter.Converter;

public class CustomDateConverter implements Converter<String, Date> {

    public Date convert(String source) {
        try {
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            return simpleDateFormat.parse(source);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

}

src/com.neuedu.ssm/action

../converter/CustomDateConverter.java

package com.neuedu.ssm.action.converter;

import java.text.SimpleDateFormat;
import java.util.Date;

import org.springframework.core.convert.converter.Converter;

public class CustomDateConverter implements Converter<String, Date> {

    @Override
    public Date convert(String source) {
        try {
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            return simpleDateFormat.parse(source);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

}

../propertyeditor/CustomPropertyEditor.java

package com.neuedu.ssm.action.propertyeditor;

import java.text.SimpleDateFormat;
import java.util.Date;

import org.springframework.beans.PropertyEditorRegistrar;
import org.springframework.beans.PropertyEditorRegistry;
import org.springframework.beans.propertyeditors.CustomDateEditor;

public class CustomPropertyEditor implements PropertyEditorRegistrar {

    @Override
    public void registerCustomEditors(PropertyEditorRegistry binder) {

        binder.registerCustomEditor(Date.class,
                new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"), true));
    }

}

../validator

  • ValidGroup1.java
package com.neuedu.ssm.action.validator;

public interface ValidGroup1 {

}

  • ValidGroup2.java
package com.neuedu.ssm.action.validator;

public interface ValidGroup2 {

}

../converter

  • ItemsController.java
package com.neuedu.ssm.action;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.validation.ObjectError;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;

import com.neuedu.ssm.action.validator.ValidGroup1;
import com.neuedu.ssm.action.validator.ValidGroup2;
import com.neuedu.ssm.exception.CustomException;
import com.neuedu.ssm.po.Items;
import com.neuedu.ssm.po.ItemsQueryVo;
import com.neuedu.ssm.po.QueryVo;
import com.neuedu.ssm.service.ItemsService;

@Controller
@RequestMapping("/item")
public class ItemsController {

    @Autowired
    private ItemsService itemsService;
    
    //商品分类
    @ModelAttribute("itemtypes")
    public Map<String, String> getItemTypes(){
        
        Map<String, String> itemTypes = new HashMap<String,String>();
        itemTypes.put("101", "数码");
        itemTypes.put("102", "母婴");
        
        return itemTypes;
    }

    @RequestMapping("/queryItem.action")
    public ModelAndView queryItem() throws Exception {
        // 商品列表
        List<Items> itemsList = itemsService.findItemsList(null);

        // 创建modelAndView准备填充数据、设置视图
        ModelAndView modelAndView = new ModelAndView();

        // 填充数据
        modelAndView.addObject("itemsList", itemsList);
        // 视图
        modelAndView.setViewName("itemsList");

        return modelAndView;
    }
    
    @RequestMapping("/queryItemsList.action")
    public ModelAndView queryItemsList() throws Exception {
        // 商品列表
        List<Items> itemsList = itemsService.findItemsList(null);

        // 创建modelAndView准备填充数据、设置视图
        ModelAndView modelAndView = new ModelAndView();

        // 填充数据
        modelAndView.addObject("itemsList", itemsList);
        // 视图
        modelAndView.setViewName("editItemsQuery");

        return modelAndView;
    }
    
    @RequestMapping("/itemsView/{id}")
    public @ResponseBody Items itemsView(@PathVariable("id") Integer item_id) throws Exception{
        
        Items items = itemsService.findItemById(item_id);
        
        return items;
    }
    
    @RequestMapping("/queryItemsListTest.action")
    public String queryItemsListTest(HttpServletRequest request,Model model) throws Exception {
        
        //1.填充数据
        request.setAttribute("data", 123);
        //2
        model.addAttribute("data", 123);
        
        return "itemList";
    }
    
    //跳转到修改页面
//  @RequestMapping("/editItem.action")
//  public ModelAndView editItem(HttpServletRequest request,HttpServletResponse response) throws Exception {
//      
//      String id = request.getParameter("id");
//      
//      Items items =itemsService.findItemById(Integer.parseInt(id));
//
//      // 创建modelAndView准备填充数据、设置视图
//      ModelAndView modelAndView = new ModelAndView();
//      modelAndView.addObject("items", items);
//      modelAndView.setViewName("editItems");
//
//      return modelAndView;
//  }
    
    @RequestMapping("/editItem.action")
    public ModelAndView editItem(@RequestParam(value="id",required=false,defaultValue="123") int id_num) throws Exception {
        
        Items items =itemsService.findItemById(id_num);
//      int a = 1/0;
        /*if(items==null){
            throw new CustomException("商品信息不存在!");
        }*/

        // 创建modelAndView准备填充数据、设置视图
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("items", items);
        modelAndView.setViewName("editItems");

        return modelAndView;
    }
    
    //点击“提交”按钮,真正修改
//  @RequestMapping(value="/editItemsSubmit.action",method={RequestMethod.GET,RequestMethod.POST})
//  public String editItemsSubmit(HttpServletRequest request,Items items,Model model) throws Exception {
//      
//      itemsService.saveItem(items);
//      
//      return "success";
//  }
    
    @RequestMapping(value="/editItemsSubmit.action")
    public String editItemsSubmit(@Validated(value={ValidGroup2.class,ValidGroup1.class}) Items items,BindingResult bindingResult, MultipartFile items_pic,Model model) throws Exception {
        
        if(bindingResult.hasErrors()){
            List<ObjectError> errors = bindingResult.getAllErrors();
            for(ObjectError objectError:errors){
                System.out.println(objectError.getCode());
                System.out.println(objectError.getDefaultMessage());
            }
            model.addAttribute("allErrors", errors);
            
            return "editItems";
        }
        
        
        //获取原始图片名称
        String originalFilename = items_pic.getOriginalFilename();
        if(items_pic!=null && originalFilename!=null && originalFilename.length()>0){
            //存储图片的物理路径
            String pic_path = "E:\\develop\\upload\\temp\\";
            //新的图片名称
            String newFileName = UUID.randomUUID() + originalFilename.substring(originalFilename.lastIndexOf("."));
            //创建新图片
            File newFile = new File(pic_path+newFileName);
            //将内存中的数据写入磁盘
            items_pic.transferTo(newFile);
            //将新图片名称写到items中
            items.setPic(newFileName);
        }
//      itemsService.saveItem(items);
        
        return "success";
    }
    
//  @RequestMapping(value="/editItemsSubmit.action")
//  public String editItemsSubmit(QueryVo queryVo) throws Exception {
//      
//      return "success";
//  }
    
    @RequestMapping("/deleteItems.action")
    public String deleteItems(String[] items_id)
            throws Exception {

        return "success";
    }
    
    @RequestMapping(value="/editItemsAllSubmit.action")
    public String editItemsAllSubmit(ItemsQueryVo itemsQueryVo) throws Exception {
        
        return "success";
    }
    
    // 批量修改商品提交
    // 通过ItemsQueryVo接收批量提交的商品信息,将商品信息存储到itemsQueryVo中itemsList属性中。
//  @RequestMapping("/editItemsAllSubmit.action")
//  public String editItemsAllSubmit(ItemsQueryVo itemsQueryVo)
//          throws Exception {
//
//      return "success";
//  }
    
    /**
     * 注册属性编辑器(字符串转换为日期)
     */
//  @InitBinder
//  public void initBinder(WebDataBinder binder) throws Exception {
//      binder.registerCustomEditor(Date.class,
//              new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"), true));
//  }
}

  • JsonController.java
package com.neuedu.ssm.action;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.neuedu.ssm.po.Items;

@Controller
public class JsonController {

    @RequestMapping("/requestJson.action")
    public @ResponseBody Items requestJson(@RequestBody Items items){
        
        return items;
    }
    
    @RequestMapping("/requestKeyValue.action")
    public @ResponseBody Items requestKeyValue(Items items){
        
        return items;
    }
}


  • LoginController.java
package com.neuedu.ssm.action;

import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class LoginController {

    //登录
    @RequestMapping("/login.action")
    public String login(HttpSession session,String username,String password) throws Exception{
        
        //调用service中的方法,进行用户名密码校验
        //.....
        //在session中保存用户信息
        session.setAttribute("username", username);
        
        return "redirect:/item/queryItem.action";
    }
    
    //退出
    @RequestMapping("/logout.action")
    public String logout(HttpSession session) throws Exception{

        //清除session
        session.invalidate();
        return "redirect:/item/queryItem.action";
    }
    
}


相关文章

网友评论

      本文标题:SSM框架整合

      本文链接:https://www.haomeiwen.com/subject/fiwraqtx.html