成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Struts 整合 SpringMVC

Scliang / 1192人閱讀

Struts 整合 SpringMVC 過程:這篇文章是我在整合過程中所做的記錄和筆記

web.xml :篩選器機(jī)制過濾

原機(jī)制是攔截了所有 url ,即 /*

新機(jī)制為了將 structs2 的 url 與 SpringMVC 的 url 區(qū)分開來,則修改了攔截屬性


   
        struts2
        /*
        REQUEST  
        FORWARD 
    
    
    

   
        struts2
        *.action
        REQUEST 
        FORWARD 
    
    
        struts2
        *.jsp
        REQUEST  
        FORWARD 
    
web.xml struts 整合 SpringMVC

     
    
        contextClass
        
            org.springframework.web.context.support.AnnotationConfigWebApplicationContext
        
    
    
    
        contextConfigLocation
        spring.config.AppConfig
    
    
    
        org.springframework.web.context.ContextLoaderListener
    
    
    
        dispatcher
        org.springframework.web.servlet.DispatcherServlet
        
        
            contextClass
            
                org.springframework.web.context.support.AnnotationConfigWebApplicationContext
            
        
        
        
            contextConfigLocation
            spring.config.MvcConfig
        
    
    
    
        dispatcher
        /km/*
    
    

基于web.xml配置文件的配置屬性,需要配置兩個(gè)Config類:【兩個(gè)配置的區(qū)別】

AppConfig.java

@Configuration
@Import({KmAppConfig.class})
public class AppConfig {

}

MvcConfig.java

@Configuration
@Import({KmMvcConfig.class})
public class MvcConfig {

}

基于Config類,配置具體的應(yīng)用Config

KmAppConfig.java

@Configuration
@ComponentScan(basePackages = "com.teemlink.km.") //掃描包體
public class KmAppConfig implements TransactionManagementConfigurer,ApplicationContextAware {
private static ApplicationContext applicationContext;

@Autowired
private DataSource dataSource;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
    KmAppConfig.applicationContext = applicationContext;
}
public static ApplicationContext getApplicationContext() {
    return applicationContext;
}

@Bean
public DataSource dataSource() {
    //如何讀取配置資源的數(shù)據(jù)?
    String url = "jdbc:jtds:sqlserver://192.168.80.47:1433/nj_km_dev";
    String username = "sa";
    String password = "teemlink";
    DriverManagerDataSource ds = new DriverManagerDataSource(url, username, password);
    ds.setDriverClassName("net.sourceforge.jtds.jdbc.Driver");
    return ds;
}

@Bean
public JdbcTemplate jdbcTemplate(DataSource dataSource){
    return new JdbcTemplate(dataSource);
    
}
@Override
public PlatformTransactionManager annotationDrivenTransactionManager() {
    return new DataSourceTransactionManager(dataSource);
}
}

KmMvcConfig.java

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.teemlink.km.**.controller")
public class KmMvcConfig extends WebMvcConfigurerAdapter {
    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }
}

基于SpringMVC 的 Controller - Service - Dao 框架

AbstractBaseController

/**
 * 抽象的RESTful控制器基類
 * @author Happy
 *
 */
@RestController
public abstract class AbstractBaseController {
    
    @Autowired  
    protected HttpServletRequest request;
    
    @Autowired
    protected HttpSession session;
    
    protected Resource success(String errmsg, Object data) {
        return new Resource(0, errmsg, data, null);
    }
    
    protected Resource error(int errcode, String errmsg, Collection errors) {
        return new Resource(errcode, errmsg, null, errors);
    }
    private Resource resourceValue;
    public Resource getResourceValue() {
        return resourceValue;
    }
    public void setResourceValue(Resource resourceValue) {
        this.resourceValue = resourceValue;
    }
    
    /**
     * 資源未找到的異常,返回404的狀態(tài),且返回錯(cuò)誤信息。
     * @param e
     * @return
     */
    @ExceptionHandler(RuntimeException.class)
    @ResponseStatus(HttpStatus.NOT_FOUND)
    public Resource resourceNotFound(RuntimeException e) {
        return error(404, "Not Found", null);
    }
    /**
     * 運(yùn)行時(shí)異常,服務(wù)器錯(cuò)誤,返回500狀態(tài),返回服務(wù)器錯(cuò)誤信息。
     * @param e
     * @return
     */
    @ExceptionHandler(RuntimeException.class)
    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
    public Resource error(RuntimeException e) {
        return error(500, "Server Error", null);
    }
    
    /**
     * Restful 接口返回的資源對(duì)象
     * 
     */
    @JsonInclude(Include.NON_EMPTY)
    public class Resource implements Serializable {
        private static final long serialVersionUID = 2315158311944949185L;
        private int errcode;
        private String errmsg;
        private Object data;
        private Collection errors;
        public Resource() {}
        
        public Resource(int errcode, String errmsg, Object data, Collection errors) {
            this.errcode = errcode;
            this.errmsg = errmsg;
            this.data = data;
            this.errors = errors;
        }
        public int getErrcode() {
            return errcode;
        }
        public void setErrcode(int errcode) {
            this.errcode = errcode;
        }
        public String getErrmsg() {
            return errmsg;
        }
        public void setErrmsg(String errmsg) {
            this.errmsg = errmsg;
        }
        public Object getData() {
            return data;
        }
        public void setData(Object data) {
            this.data = data;
        }
        public Collection getErrors() {
            return errors;
        }
        public void setErrors(Collection errors) {
            this.errors = errors;
        }
    }
}

IService

/**
 *
 * @param 
 */
public interface IService {
    
    /**
     * 創(chuàng)建實(shí)例
     * @param entity
     * @return
     * @throws Exception
     */
    public IEntity create(IEntity entity) throws Exception;
    
    /**
     * 更新實(shí)例
     * @param entity
     * @return
     * @throws Exception
     */
    public IEntity update(IEntity entity) throws Exception;
    
    /**
     * 根據(jù)主鍵獲取實(shí)例
     * @param pk
     * @return
     * @throws Exception
     */
    public IEntity find(String pk) throws Exception;
    
    /**
     * 刪除實(shí)例
     * @param pk
     * @throws Exception
     */
    public void delete(String pk) throws Exception;
    
    /**
     * 批量刪除實(shí)例
     * @param pk
     * @throws Exception
     */
    public void delete(String[] pk) throws Exception;
    
}

AbstractBaseService

/**
 * 抽象的業(yè)務(wù)基類
 *
 */
public abstract class AbstractBaseService {
    
    /**
     * @return the dao
     */
    public abstract IDAO getDao();  

    @Transactional
    public IEntity create(IEntity entity) throws Exception {
        if(StringUtils.isBlank(entity.getId())){
            entity.setId(UUID.randomUUID().toString());
        }
        return getDao().create(entity);
    }
    @Transactional
    public IEntity update(IEntity entity) throws Exception {
        return getDao().update(entity);
    }
    public IEntity find(String pk) throws Exception {
        return getDao().find(pk);
    }
    @Transactional
    public void delete(String pk) throws Exception {
        getDao().remove(pk);
    }
    @Transactional
    public void delete(String[] pks) throws Exception {
        for (int i = 0; i < pks.length; i++) {
            getDao().remove(pks[i]);
        }
    }
}

IDAO

/**
 *
 */
public interface IDAO {
    
    public IEntity create(IEntity entity) throws Exception;
    public void remove(String pk) throws Exception;
    public IEntity update(IEntity entity) throws Exception;
    public IEntity find(String id) throws Exception;
    
}

AbstractJdbcBaseDAO

/**
 * 基于JDBC方式的DAO抽象實(shí)現(xiàn),依賴Spring的JdbcTemplate和事務(wù)管理支持
 *
 */
public abstract class AbstractJdbcBaseDAO {
    
    
    @Autowired
    public JdbcTemplate jdbcTemplate;
    
    protected String tableName;
    
    public JdbcTemplate getJdbcTemplate() {
        return jdbcTemplate;
    }
    public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }
    /**
     * 構(gòu)建分頁sql
     * @param sql
     * @param page
     * @param lines
     * @param orderbyFile
     * @param orderbyMode
     * @return
     * @throws SQLException
     */
    protected abstract String buildLimitString(String sql, int page, int lines,
            String orderbyFile, String orderbyMode) throws SQLException ;
    
    
    /**
     * 獲取數(shù)據(jù)庫Schema
     * @return
     */
//    protected abstract String getSchema();
    
    /**
     * 獲取表名
     * @return
     */
    protected String getTableName(){
        return this.tableName;
    }
    
    /**
     * 獲取完整表名
     * @return
     */
    public String getFullTableName() {
        return getTableName().toUpperCase();
    }
    
    
}

測(cè)試框架

基本測(cè)試框架

 /**
 * 單元測(cè)試基類,基于Spring提供bean組件的自動(dòng)掃描裝配和事務(wù)支持
 *
 */
@RunWith(SpringRunner.class)
@ContextConfiguration(classes = KmAppConfig.class)
@Transactional
public class BaseJunit4SpringRunnerTest {

}  

具體實(shí)現(xiàn):(以Disk為例)

public class DiskServiceTest extends BaseJunit4SpringRunnerTest {
    
    @Autowired
    DiskService service;
    
    @Before
    public void setUp() throws Exception {
        
    }
    @After
    public void tearDown() throws Exception {
    }
    
    @Test
    public void testFind() throws Exception{
        Disk disk = (Disk) service.find("1");
        Assert.assertNotNull(disk);
    }
    
    @Test
    @Commit
    public void testCreate() throws Exception{
        Disk disk = new Disk();
        disk.setName("abc");
        disk.setType(1);
        disk.setOrderNo(0);
        disk.setOwnerId("123123");
        service.create(disk);
        Assert.assertNotNull(disk.getId());
    }
}

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/67437.html

相關(guān)文章

  • Java3y文章目錄導(dǎo)航

    摘要:前言由于寫的文章已經(jīng)是有點(diǎn)多了,為了自己和大家的檢索方便,于是我就做了這么一個(gè)博客導(dǎo)航。 前言 由于寫的文章已經(jīng)是有點(diǎn)多了,為了自己和大家的檢索方便,于是我就做了這么一個(gè)博客導(dǎo)航。 由于更新比較頻繁,因此隔一段時(shí)間才會(huì)更新目錄導(dǎo)航哦~想要獲取最新原創(chuàng)的技術(shù)文章歡迎關(guān)注我的公眾號(hào):Java3y Java3y文章目錄導(dǎo)航 Java基礎(chǔ) 泛型就這么簡單 注解就這么簡單 Druid數(shù)據(jù)庫連接池...

    KevinYan 評(píng)論0 收藏0
  • SpringMVCSpringMVC啟動(dòng)初始化過程

    摘要:當(dāng)容器啟動(dòng)或終止應(yīng)用時(shí),會(huì)觸發(fā)事件,該事件由來處理。監(jiān)聽器的作用就是啟動(dòng)容器時(shí),自動(dòng)裝配的配置信息。初始化在架構(gòu)中,負(fù)責(zé)請(qǐng)求分發(fā),起到控制器的作用。 ??公司項(xiàng)目使用 struts2 作為控制層框架,為了實(shí)現(xiàn)前后端分離,計(jì)劃將 struts2 切換為 SpringMVC ,因此,這段時(shí)間都在學(xué)習(xí)新的框架,《Spring實(shí)戰(zhàn)》是一本好書,里面對(duì) Spring 的原理實(shí)現(xiàn)以及應(yīng)用都說得很透...

    Bowman_han 評(píng)論0 收藏0
  • 面試題:SpringMVCStruts2的區(qū)別

    摘要:的入口是,而是這里要指出,和是不同的。以前認(rèn)為是的一種特殊,這就導(dǎo)致了二者的機(jī)制不同,這里就牽涉到和的區(qū)別了。開發(fā)效率和性能高于。的實(shí)現(xiàn)機(jī)制有以自己的機(jī)制,用的是獨(dú)立的方式。 1、Struts2是類級(jí)別的攔截, 一個(gè)類對(duì)應(yīng)一個(gè)request上下文,SpringMVC是方法級(jí)別的攔截,一個(gè)方法對(duì)應(yīng)一個(gè)request上下文,而方法同時(shí)又跟一個(gè)url對(duì)應(yīng),所以說從架構(gòu)本身上SpringMVC...

    isaced 評(píng)論0 收藏0
  • SpringMVC入門就這么簡單

    摘要:也就是說映射器就是用于處理什么樣的請(qǐng)求提交給處理。這和是一樣的提交參數(shù)的用戶名編號(hào)提交配置處理請(qǐng)求注冊(cè)映射器包框架接收參數(shù)設(shè)置無參構(gòu)造器,里邊調(diào)用方法,傳入要封裝的對(duì)象這里的對(duì)象就表示已經(jīng)封裝好的了對(duì)象了。 什么是SpringMVC? SpringMVC是Spring家族的一員,Spring是將現(xiàn)在開發(fā)中流行的組件進(jìn)行組合而成的一個(gè)框架!它用在基于MVC的表現(xiàn)層開發(fā),類似于struts...

    SKYZACK 評(píng)論0 收藏0
  • Java后端

    摘要:,面向切面編程,中最主要的是用于事務(wù)方面的使用。目標(biāo)達(dá)成后還會(huì)有去構(gòu)建微服務(wù),希望大家多多支持。原文地址手把手教程優(yōu)雅的應(yīng)用四手把手實(shí)現(xiàn)后端搭建第四期 SpringMVC 干貨系列:從零搭建 SpringMVC+mybatis(四):Spring 兩大核心之 AOP 學(xué)習(xí) | 掘金技術(shù)征文 原本地址:SpringMVC 干貨系列:從零搭建 SpringMVC+mybatis(四):Sp...

    joyvw 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<