<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 72  文章 - 28  trackbacks - 0
    <2025年7月>
    293012345
    6789101112
    13141516171819
    20212223242526
    272829303112
    3456789

    常用鏈接

    留言簿(4)

    隨筆分類(66)

    隨筆檔案(72)

    文章檔案(19)

    收藏夾

    搜索

    •  

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    1、確保導(dǎo)入了jackson-core-asl-1.9.13.jar和jackson-mapper-asl-1.9.13.jar包
    2、在spring的配置文件中加入<mvc:annotation-driven />這句,它提供了讀取jason的支持
    3、使用springMVC的@ResponseBody注解
    @responsebody表示該方法的返回結(jié)果直接寫(xiě)入HTTP response body中
    一般在異步獲取數(shù)據(jù)時(shí)使用,在使用@RequestMapping后,返回值通常解析為跳轉(zhuǎn)路徑,加上@responsebody后返回結(jié)果不會(huì)被解析為跳轉(zhuǎn)路徑,而是直接寫(xiě)入HTTP response body中。比如異步獲取json數(shù)據(jù),加上@responsebody后,會(huì)直接返回json數(shù)據(jù)。
    4、在以上配置都正確的情況下,我的項(xiàng)目還是不能返回json串。報(bào)錯(cuò):The resource identified by this request is only capable of generating responses with characteristics not acceptable according to the request "accept" headers ()。
    今天終于在一個(gè)外文網(wǎng)站找到答案,是由于spring版本的問(wèn)題引起的。我之前一直用的是3.0.0的版本。就是因?yàn)檫@個(gè)版本的問(wèn)題。于是果斷去官網(wǎng)下載3.2版本的,一切正常運(yùn)行,成功返回json數(shù)據(jù)。
    posted @ 2014-11-16 22:41 kelly 閱讀(14154) | 評(píng)論 (1)編輯 收藏

    struts和spring整合首先要在Web容器啟動(dòng)的時(shí)候自動(dòng)裝配ApplicationContext的配置信息,可想而知應(yīng)該在web.xml做相應(yīng)的配置:
    [html]
    <context-param> 
        <param-name>contextConfigLocation</param-name> 
        <param-value> 
            classpath:applicationContext.xml 
        </param-value> 
    </context-param> 
    <listener> 
           <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
       </listener> 
    配置了org.springframework.web.context.ContextLoaderListener后我們就不惜要編寫(xiě)代碼顯示地實(shí)例化ApplicationContext對(duì)象了。至于為什么要使用監(jiān)聽(tīng)是因?yàn)閣eb.xml 的加載順序是:context-param -> listener -> filter -> servlet 。如果你是在不想使用監(jiān)聽(tīng),或許你可以嘗試下繼承struts2的org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter重寫(xiě)這個(gè)它的init方法在StrutsPrepareAndExecuteFilter過(guò)濾器init中實(shí)例化ApplicationContext對(duì)象加載配置信息,雖然這種方法也可行,但是當(dāng)攔截每個(gè)action都會(huì)加載一次配置信息,重新實(shí)例化了一個(gè)新的web容器,不僅浪費(fèi)了資源也讓spring更加依賴了struts。

    1、使用xml方式:
    struts2配置
    <package name="user" extends="struts-default">
    <action name="login" class="userAction">
    <result name="success">/success.jsp</result>
    <result name="input" type="redirect">/index.jsp</result>
    </action>
    </package>
    spring配置
    <bean id="userDao" class="org.han.dao.impl.UserDaoImpl" />
    <bean id="biz" class="org.han.service.impl.LoginBizImpl">
    <property name="userdao" ref="userDao"/>
    </bean>

    <bean id="userAction" class="org.han.action.LoginAction" scope="prototype" >
    <property name="biz" ref="biz" />
    </bean>
    注意紅色部分,struts2的action class與對(duì)應(yīng)的action bean必須相同,這樣才能由spring管理action;

    2、struts2使用零配置方式:
    當(dāng)你導(dǎo)入了零配置插件包的時(shí)候千萬(wàn)要注意約定大于配置,還是上面的spring配置,只是不需要struts2配置了。
    第一種方式:只需要將Action的className對(duì)應(yīng)到spring配置中的bean id就行了
    @Action(value = "/login", results = { @Result(name = "success", location = "/success.jsp"),@Result(name="input",location="/index.jsp")},className="userAction")
    public String login() throws Exception {
    // TODO Auto-generated method stub
    User u=biz.login(this.getUser());
    if(u!=null){
    return SUCCESS;
    }
    return INPUT;
    }
    第二種方式:
    Action注解不需要className了,將spring配置稍作修改
    <bean id="org.han.action.LoginAction" class="org.han.action.LoginAction" scope="prototype" >
    <property name="biz" ref="biz" />
    </bean>
    這樣可以是因?yàn)楫?dāng)你使用零配置的時(shí)候,action的class默認(rèn)是當(dāng)前類的全類名,所以和spring整合的時(shí)候剛好使用全類名在spring配置中查找以全類名為id的bean。

    3、struts2、spring都使用注解方式:
    www.2cto.com
    <beans xmlns="http://www.springframework.org/schema/beans" 
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xmlns:context="http://www.springframework.org/schema/context" 
         xsi:schemaLocation="http://www.springframework.org/schema/beans 
             http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
             http://www.springframework.org/schema/context 
             http://www.springframework.org/schema/context/spring-context-3.0.xsd"> 
       <context:component-scan base-package="org.han.dao.impl,org.han.service.impl,org.han.action"/> 
    </beans> 

    <context:component-scan base-package=""/>用此種方式,不需要在配置文件中再配置bean,也不需要再導(dǎo)入上面對(duì)應(yīng)的處理bean。也就是說(shuō)可以不需要在配置文件中使用<context:annotation-config/>了,因?yàn)榇朔N方式會(huì)自動(dòng)導(dǎo)入

    [java]
    @Namespace("/") 
    @Component(value="userLogin") 
    @Scope(value="prototype") 
    public class LoginAction extends ActionSupport { 
     
        public LoginAction() { 
            super(); 
            // TODO Auto-generated constructor stub 
            System.out.println("action:"+this.hashCode()); 
        } 
         
        @Autowired 
        private ILoginBiz biz; 
        private User user; 
     
        public User getUser() { 
            return user; 
        } 
     
        public void setUser(User user) { 
            this.user = user; 
        } 
        @Autowired 
        public void setBiz(ILoginBiz biz) { 
            this.biz = biz; 
        } 
     
        @Override 
        @Action(value = "hello", results = { @Result(name = "success", location = "/success.jsp"),@Result(name="input",location="/index.jsp")}) 
        public String execute() throws Exception { 
            // TODO Auto-generated method stub 
            System.out.println("biz:"+this.biz.hashCode()); 
            User u=biz.login(this.getUser()); 
            if(u!=null){ 
                return SUCCESS; 
            } 
            return INPUT; 
        } 

    @Component 有一個(gè)可選的入?yún)ⅲ糜谥付?Bean 的名稱。一般情況下,Bean 都是 singleton 的,需要注入 Bean 的地方僅需要通過(guò) byType 策略就可以自動(dòng)注入了,所以大可不必指定 Bean 的名稱。除了提供 @Component 注釋外,還定義了幾個(gè)擁有特殊語(yǔ)義的注釋,它們分別是:@Repository、@Service 和 @Controller。在目前的 Spring 版本中,這 3 個(gè)注釋和 @Component 是等效的,但是從注釋類的命名上,很容易看出這 3 個(gè)注釋分別和持久層、業(yè)務(wù)層和控制層(Web 層)相對(duì)應(yīng)。雖然目前這 3 個(gè)注釋和 @Component 相比沒(méi)有什么新意,但 Spring 將在以后的版本中為它們添加特殊的功能。所以,如果 Web 應(yīng)用程序采用了經(jīng)典的三層分層結(jié)構(gòu)的話,最好在持久層、業(yè)務(wù)層和控制層分別采用 @Repository、@Service 和 @Controller 對(duì)分層中的類進(jìn)行注釋,而用 @Component 對(duì)那些比較中立的類進(jìn)行注釋。

    @Scope用于定義Bean的作用范圍。

    @Autowired 注釋,它可以對(duì)類成員變量、方法及構(gòu)造函數(shù)進(jìn)行標(biāo)注,完成自動(dòng)裝配的工作。當(dāng) Spring 容器啟動(dòng)時(shí),AutowiredAnnotationBeanPostProcessor 將掃描 Spring 容器中所有 Bean,當(dāng)發(fā)現(xiàn) Bean 中擁有 @Autowired 注釋時(shí)就找到和其匹配(默認(rèn)按類型匹配)的 Bean,并注入到對(duì)應(yīng)的地方中去。所以對(duì)成員變量使用 @Autowired 后,您大可將它們的 setter 方法刪除。

    @Qualifier(“name”) 中的 name是 Bean 的名稱,所以 @Autowired 和 @Qualifier 結(jié)合使用時(shí),自動(dòng)注入的策略就從 byType 轉(zhuǎn)變成 byName 了。@Autowired 可以對(duì)成員變量、方法以及構(gòu)造函數(shù)進(jìn)行注釋,而 @Qualifier 的標(biāo)注對(duì)象是成員變量、方法入?yún)ⅰ?gòu)造函數(shù)入?yún)ⅰ?/p>

    @PostConstruct 和 @PreDestroy:JSR-250 為初始化之后/銷毀之前方法的指定定義了兩個(gè)注釋類,這兩個(gè)注釋只能應(yīng)用于方法上。標(biāo)注了 @PostConstruct 注釋的方法將在類實(shí)例化后調(diào)用,而標(biāo)注了 @PreDestroy 的方法將在類銷毀之前調(diào)用。
    通過(guò) <bean> 元素的 init-method/destroy-method 屬性進(jìn)行配置,都只能為 Bean 指定一個(gè)初始化 / 銷毀的方法。但是使用 @PostConstruct 和 @PreDestroy 注釋卻可以指定多個(gè)初始化 / 銷毀方法,那些被標(biāo)注 @PostConstruct 或@PreDestroy 注釋的方法都會(huì)在初始化 / 銷毀時(shí)被執(zhí)行。
    更多的關(guān)于注解使用:請(qǐng)看官方文檔

    4、總結(jié):
    1、注釋配置不一定在先天上優(yōu)于 XML 配置。如果 Bean 的依賴關(guān)系是固定的,(如 Service 使用了哪幾個(gè) DAO 類),這種配置信息不會(huì)在部署時(shí)發(fā)生調(diào)整,那么注釋配置優(yōu)于 XML 配置;反之如果這種依賴關(guān)系會(huì)在部署時(shí)發(fā)生調(diào)整,XML 配置顯然又優(yōu)于注釋配置,因?yàn)樽⑨屖菍?duì) Java 源代碼的調(diào)整,您需要重新改寫(xiě)源代碼并重新編譯才可以實(shí)施調(diào)整。
    2、如果 Bean 不是自己編寫(xiě)的類(如 JdbcTemplate、SessionFactoryBean 等),注釋配置將無(wú)法實(shí)施,此時(shí) XML 配置是唯一可用的方式。
    3、注釋配置往往是類級(jí)別的,而 XML 配置則可以表現(xiàn)得更加靈活。比如相比于 @Transaction 事務(wù)注釋,使用 aop/tx 命名空間的事務(wù)配置更加靈活和簡(jiǎn)單。
    所以在實(shí)現(xiàn)應(yīng)用中,我們往往需要同時(shí)使用注釋配置和 XML 配置,對(duì)于類級(jí)別且不會(huì)發(fā)生變動(dòng)的配置可以優(yōu)先考慮注釋配置;而對(duì)于那些第三方類以及容易發(fā)生調(diào)整的配置則應(yīng)優(yōu)先考慮使用 XML 配置。Spring 會(huì)在具體實(shí)施 Bean 創(chuàng)建和 Bean 注入之前將這兩種配置方式的元信息融合在一起。

    posted @ 2014-01-17 21:51 kelly 閱讀(293) | 評(píng)論 (0)編輯 收藏

    來(lái)自:http://hanyexiaoxiao.iteye.com/blog/410123
    1. 使用Spring注解來(lái)注入屬性 
    1.1. 使用注解以前我們是怎樣注入屬性的 
    類的實(shí)現(xiàn):

    public class UserManagerImpl implements UserManager {
    	private UserDao userDao;
    	public void setUserDao(UserDao userDao) {
    		this.userDao = userDao;
    	}
    	...
    }
    


    配置文件:

    <bean id="userManagerImpl" class="com.kedacom.spring.annotation.service.UserManagerImpl">
    	<property name="userDao" ref="userDao" />
    </bean>
    <bean id="userDao" class="com.kedacom.spring.annotation.persistence.UserDaoImpl">
    	<property name="sessionFactory" ref="mySessionFactory" />
    </bean>
    



    1.2. 引入@Autowired注解(不推薦使用,建議使用@Resource) 
    類的實(shí)現(xiàn)(對(duì)成員變量進(jìn)行標(biāo)注)

    public class UserManagerImpl implements UserManager {
    	@Autowired
    	private UserDao userDao;
    	...
    }
    


    或者(對(duì)方法進(jìn)行標(biāo)注)

    public class UserManagerImpl implements UserManager {
    	private UserDao userDao;
    	@Autowired
    	public void setUserDao(UserDao userDao) {
    		this.userDao = userDao;
    	}
    	...
    }
    


    配置文件

    <bean id="userManagerImpl" class="com.kedacom.spring.annotation.service.UserManagerImpl" />
    <bean id="userDao" class="com.kedacom.spring.annotation.persistence.UserDaoImpl">
    	<property name="sessionFactory" ref="mySessionFactory" />
    </bean>
    


    @Autowired可以對(duì)成員變量、方法和構(gòu)造函數(shù)進(jìn)行標(biāo)注,來(lái)完成自動(dòng)裝配的工作。以上兩種不同實(shí)現(xiàn)方式中,@Autowired的標(biāo)注位置不同,它們都會(huì)在Spring在初始化userManagerImpl這個(gè)bean時(shí),自動(dòng)裝配userDao這個(gè)屬性,區(qū)別是:第一種實(shí)現(xiàn)中,Spring會(huì)直接將UserDao類型的唯一一個(gè)bean賦值給userDao這個(gè)成員變量;第二種實(shí)現(xiàn)中,Spring會(huì)調(diào)用setUserDao方法來(lái)將UserDao類型的唯一一個(gè)bean裝配到userDao這個(gè)屬性。 

    1.3. 讓@Autowired工作起來(lái) 
    要使@Autowired能夠工作,還需要在配置文件中加入以下代碼

    <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor" />
    



    1.4. @Qualifier 
    @Autowired是根據(jù)類型進(jìn)行自動(dòng)裝配的。在上面的例子中,如果當(dāng)Spring上下文中存在不止一個(gè)UserDao類型的bean時(shí),就會(huì)拋出BeanCreationException異常;如果Spring上下文中不存在UserDao類型的bean,也會(huì)拋出BeanCreationException異常。我們可以使用@Qualifier配合@Autowired來(lái)解決這些問(wèn)題。 
    1. 可能存在多個(gè)UserDao實(shí)例

    	@Autowired
    	public void setUserDao(@Qualifier("userDao") UserDao userDao) {
    		this.userDao = userDao;
    	}
    


    這樣,Spring會(huì)找到id為userDao的bean進(jìn)行裝配。 
    2. 可能不存在UserDao實(shí)例

    	@Autowired(required = false)
    	public void setUserDao(UserDao userDao) {
    		this.userDao = userDao;
    	}
    



    1.5. @Resource(JSR-250標(biāo)準(zhǔn)注解,推薦使用它來(lái)代替Spring專有的@Autowired注解) 
    Spring 不但支持自己定義的@Autowired注解,還支持幾個(gè)由JSR-250規(guī)范定義的注解,它們分別是@Resource、@PostConstruct以及@PreDestroy。 
    @Resource的作用相當(dāng)于@Autowired,只不過(guò)@Autowired按byType自動(dòng)注入,而@Resource默認(rèn)按byName自動(dòng)注入罷了。@Resource有兩個(gè)屬性是比較重要的,分別是name和type,Spring將@Resource注解的name屬性解析為bean的名字,而type屬性則解析為bean的類型。所以如果使用name屬性,則使用byName的自動(dòng)注入策略,而使用type屬性時(shí)則使用byType自動(dòng)注入策略。如果既不指定name也不指定type屬性,這時(shí)將通過(guò)反射機(jī)制使用byName自動(dòng)注入策略。 
    @Resource裝配順序

    1. 如果同時(shí)指定了name和type,則從Spring上下文中找到唯一匹配的bean進(jìn)行裝配,找不到則拋出異常
    2. 如果指定了name,則從上下文中查找名稱(id)匹配的bean進(jìn)行裝配,找不到則拋出異常
    3. 如果指定了type,則從上下文中找到類型匹配的唯一bean進(jìn)行裝配,找不到或者找到多個(gè),都會(huì)拋出異常
    4. 如果既沒(méi)有指定name,又沒(méi)有指定type,則自動(dòng)按照byName方式進(jìn)行裝配(見(jiàn)2);如果沒(méi)有匹配,則回退為一個(gè)原始類型(UserDao)進(jìn)行匹配,如果匹配則自動(dòng)裝配;



    1.6. @PostConstruct(JSR-250) 
    在方法上加上注解@PostConstruct,這個(gè)方法就會(huì)在Bean初始化之后被Spring容器執(zhí)行(注:Bean初始化包括,實(shí)例化Bean,并裝配Bean的屬性(依賴注入))。 
    它的一個(gè)典型的應(yīng)用場(chǎng)景是,當(dāng)你需要往Bean里注入一個(gè)其父類中定義的屬性,而你又無(wú)法復(fù)寫(xiě)父類的屬性或?qū)傩缘膕etter方法時(shí),如:

    public class UserDaoImpl extends HibernateDaoSupport implements UserDao {
    	private SessionFactory mySessionFacotry;
    	@Resource
    	public void setMySessionFacotry(SessionFactory sessionFacotry) {
    		this.mySessionFacotry = sessionFacotry;
    	}
    	@PostConstruct
    	public void injectSessionFactory() {
    		super.setSessionFactory(mySessionFacotry);
    	}
    	...
    }
    


    這里通過(guò)@PostConstruct,為UserDaoImpl的父類里定義的一個(gè)sessionFactory私有屬性,注入了我們自己定義的sessionFactory(父類的setSessionFactory方法為final,不可復(fù)寫(xiě)),之后我們就可以通過(guò)調(diào)用super.getSessionFactory()來(lái)訪問(wèn)該屬性了。 

    1.7. @PreDestroy(JSR-250) 
    在方法上加上注解@PreDestroy,這個(gè)方法就會(huì)在Bean初始化之后被Spring容器執(zhí)行。由于我們當(dāng)前還沒(méi)有需要用到它的場(chǎng)景,這里不不去演示。其用法同@PostConstruct。 

    1.8. 使用<context:annotation-config />簡(jiǎn)化配置 
    Spring2.1添加了一個(gè)新的context的Schema命名空間,該命名空間對(duì)注釋驅(qū)動(dòng)、屬性文件引入、加載期織入等功能提供了便捷的配置。我們知道注釋本身是不會(huì)做任何事情的,它僅提供元數(shù)據(jù)信息。要使元數(shù)據(jù)信息真正起作用,必須讓負(fù)責(zé)處理這些元數(shù)據(jù)的處理器工作起來(lái)。 
    AutowiredAnnotationBeanPostProcessor和CommonAnnotationBeanPostProcessor就是處理這些注釋元數(shù)據(jù)的處理器。但是直接在Spring配置文件中定義這些Bean顯得比較笨拙。Spring為我們提供了一種方便的注冊(cè)這些BeanPostProcessor的方式,這就是<context:annotation-config />:

    <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    	xsi:schemaLocation="http://www.springframework.org/schema/beans
    	http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
    	http://www.springframework.org/schema/context
    	http://www.springframework.org/schema/context/spring-context-2.5.xsd">
    	<context:annotation-config />
    </beans>
    


    <context:annotationconfig />將隱式地向Spring容器注冊(cè)AutowiredAnnotationBeanPostProcessor、CommonAnnotationBeanPostProcessor、 PersistenceAnnotationBeanPostProcessor以及RequiredAnnotationBeanPostProcessor這4個(gè)BeanPostProcessor。 

    2. 使用Spring注解完成Bean的定義 
    以上我們介紹了通過(guò)@Autowired或@Resource來(lái)實(shí)現(xiàn)在Bean中自動(dòng)注入的功能,下面我們將介紹如何注解Bean,從而從XML配置文件中完全移除Bean定義的配置。 

    2.1. @Component(不推薦使用)、@Repository、@Service、@Controller 
    只需要在對(duì)應(yīng)的類上加上一個(gè)@Component注解,就將該類定義為一個(gè)Bean了:

    @Component
    public class UserDaoImpl extends HibernateDaoSupport implements UserDao {
    	...
    }
    


    使用@Component注解定義的Bean,默認(rèn)的名稱(id)是小寫(xiě)開(kāi)頭的非限定類名。如這里定義的Bean名稱就是userDaoImpl。你也可以指定Bean的名稱: 
    @Component("userDao") 
    @Component是所有受Spring管理組件的通用形式,Spring還提供了更加細(xì)化的注解形式:@Repository、@Service、@Controller,它們分別對(duì)應(yīng)存儲(chǔ)層Bean,業(yè)務(wù)層Bean,和展示層Bean。目前版本(2.5)中,這些注解與@Component的語(yǔ)義是一樣的,完全通用,在Spring以后的版本中可能會(huì)給它們追加更多的語(yǔ)義。所以,我們推薦使用@Repository、@Service、@Controller來(lái)替代@Component。 

    2.2. 使用<context:component-scan />讓Bean定義注解工作起來(lái)

    <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    	xsi:schemaLocation="http://www.springframework.org/schema/beans
    	http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
    	http://www.springframework.org/schema/context
    	http://www.springframework.org/schema/context/spring-context-2.5.xsd">
    	<context:component-scan base-package="com.kedacom.ksoa" />
    </beans>
    


    這里,所有通過(guò)<bean>元素定義Bean的配置內(nèi)容已經(jīng)被移除,僅需要添加一行<context:component-scan />配置就解決所有問(wèn)題了——Spring XML配置文件得到了極致的簡(jiǎn)化(當(dāng)然配置元數(shù)據(jù)還是需要的,只不過(guò)以注釋形式存在罷了)。<context:component-scan />的base-package屬性指定了需要掃描的類包,類包及其遞歸子包中所有的類都會(huì)被處理。 
    <context:component-scan />還允許定義過(guò)濾器將基包下的某些類納入或排除。Spring支持以下4種類型的過(guò)濾方式:

    • 過(guò)濾器類型 表達(dá)式范例 說(shuō)明
    • 注解 org.example.SomeAnnotation 將所有使用SomeAnnotation注解的類過(guò)濾出來(lái)
    • 類名指定 org.example.SomeClass 過(guò)濾指定的類
    • 正則表達(dá)式 com\.kedacom\.spring\.annotation\.web\..* 通過(guò)正則表達(dá)式過(guò)濾一些類
    • AspectJ表達(dá)式 org.example..*Service+ 通過(guò)AspectJ表達(dá)式過(guò)濾一些類


    以正則表達(dá)式為例,我列舉一個(gè)應(yīng)用實(shí)例:

    	<context:component-scan base-package="com.casheen.spring.annotation">
    		<context:exclude-filter type="regex" expression="com\.casheen\.spring\.annotation\.web\..*" />
    	</context:component-scan>
    


    值得注意的是<context:component-scan />配置項(xiàng)不但啟用了對(duì)類包進(jìn)行掃描以實(shí)施注釋驅(qū)動(dòng)Bean定義的功能,同時(shí)還啟用了注釋驅(qū)動(dòng)自動(dòng)注入的功能(即還隱式地在內(nèi)部注冊(cè)了AutowiredAnnotationBeanPostProcessor和CommonAnnotationBeanPostProcessor),因此當(dāng)使用<context:component-scan />后,就可以將<context:annotation-config />移除了。 

    2.3. 使用@Scope來(lái)定義Bean的作用范圍 
    在使用XML定義Bean時(shí),我們可能還需要通過(guò)bean的scope屬性來(lái)定義一個(gè)Bean的作用范圍,我們同樣可以通過(guò)@Scope注解來(lái)完成這項(xiàng)工作:

    @Scope("session")
    @Component()
    public class UserSessionBean implements Serializable {
    	...
    }
    



    3. 參考 
    http://kingtai168.iteye.com/blog/244002 
    http://www.iteye.com/topic/244153 
    http://static.springframework.org/spring/docs/2.5.x/reference/beans.html#beans-annotation-config 
    http://static.springframework.org/spring/docs/2.5.x/reference/beans.html#beans-classpath-scanning

    posted @ 2014-01-17 12:00 kelly 閱讀(261) | 評(píng)論 (0)編輯 收藏
         摘要: Struts2.3+Spring3.2的整合        這兩天都是一直在鼓搗Struts2.3如何整合Spring3.2以及dao層到底選用什么以及如何整合。下面就把自己這兩天的一些小成果分享出來(lái)也以便自己以后在實(shí)際項(xiàng)目中快速搭建。 首先是Struts2.3整合Spring3.2 1、新建一個(gè)web工程(這個(gè)就不說(shuō)了) 2、添...  閱讀全文
    posted @ 2014-01-16 10:32 kelly 閱讀(1966) | 評(píng)論 (0)編輯 收藏

     警告信息如下:

    警告: No configuration found for the specified action: '/myNameSpace/login.action' in namespace: ''. Form action defaulting to 'action' attribute's literal value.

     

    struts.xml配置信息(部分)

     

    <package name="packageName" extends="struts-default" namespace="/myNameSpace">

        <action name="login" class="com.jato.srvclink.test.login.LoginAction" method="login">

     

    jsp頁(yè)面配置信息(部分)

     

    <s:form action="/myNameSpace/login.action">

     

    思考:沒(méi)有在''namespace中發(fā)現(xiàn)指定的action '/myNameSpace/login.action'

    答疑:因?yàn)榕渲玫?/span>struts2標(biāo)簽并未指定namespace屬性。所以struts2會(huì)默認(rèn)從根命名空間"/"搜索action' /myNameSpace/login.action',如果搜索不到將進(jìn)入默認(rèn)命名空間''搜索action請(qǐng)求串,在默認(rèn)命名空間中是肯定找不到我們 定義的action的,所以,struts2拋出一個(gè)警告信息。

    但是為什么我們沒(méi)有填寫(xiě)namespace,我們的請(qǐng)求也可以正常訪問(wèn)呢?

     

    我們來(lái)看一下解析后的html

    查看源碼得到的html(部分)

     

    <form id="login" onsubmit="return true;" action="/srvclink/myNameSpace/login.action" method="post">

     

    我們看到form提交的action串是準(zhǔn)確的url請(qǐng)求,action串確實(shí)是/srvclin(應(yīng)用根)/myNameSpace(命名空間)/login.action

    命名空間中找不到action定義,并不意味著這個(gè)action真的不存在,只是我們的代碼有問(wèn)題而已。還有一點(diǎn)是我們?cè)?/span>jsp頁(yè)面的action請(qǐng)求中 手動(dòng)的加入了.action后綴。事實(shí)上struts2會(huì)自動(dòng)追加.action的,因?yàn)槲覀儾](méi)有合法的使用struts2的標(biāo)簽,所以struts2 這里并沒(méi)有給我們追加.action,解析后的代碼中存在的.action,完全是我們手動(dòng)在jsp頁(yè)面填寫(xiě)的,有疑問(wèn)的網(wǎng)友可以不手動(dòng)添加查看 html

     

    我們修改我們的程序代碼

     

    jsp頁(yè)面配置信息(部分)修改后加入namespace屬性,修改action屬性值為/login.action

     

    <s:form action="/login.action" namespace="/myNameSpace">

     

    請(qǐng)求頁(yè)面后,大家很失望吧?警告依然存在。但是我們看一下警告信息。

     

    警告信息:

     

    警告: No configuration found for the specified action: '/login.action' in namespace: '/myNameSpace'. Form action defaulting to 'action' attribute's literal value.

     

    沒(méi)有在'/myNameSpace'namespace中發(fā)現(xiàn)指定的action '/login.action'

     

    毫無(wú)疑問(wèn),這里的警告和第一次的警告信息截然不同。我們現(xiàn)在存在命名空間,'/myNameSpace'能夠被struts2檢索到,并不是開(kāi)始的''。那問(wèn)題的關(guān)鍵在哪里呢?

    namespace中沒(méi)有發(fā)現(xiàn)指定的action '/login.action' ???

     

    我們來(lái)看一下struts.xml中的配置:

     

    struts.xml配置信息(部分)

     

    <package name="packageName" extends="struts-default" namespace="/myNameSpace">

        <action name="login" class="com.jato.srvclink.test.login.LoginAction" method="login">

     

    是的,我們'/myNameSpace'命名空間下,只有action名字為'login'的定義,并沒(méi)有所謂的'/login.action' 定義,所以struts2的警告并未錯(cuò)。如果大家對(duì)這個(gè)抱有懷疑,可以修改action的名字'login'‘/longin.action’

    <action name="/login.action" class="com.jato.srvclink.test.login.LoginAction" method="login">

    請(qǐng)求頁(yè)面時(shí)你會(huì)發(fā)現(xiàn)不在報(bào)警告信息,原因很簡(jiǎn)單。因?yàn)樵诿臻g為'myNameSpace'下確實(shí)存在命名為'/login.action'action

     

    我們?cè)俅涡薷呐渲梦募?/span>

     

    jsp頁(yè)面配置信息(部分)修改后action屬性值為longin

     

    <s:form action="login" namespace="/myNameSpace">

     

    請(qǐng)求頁(yè)面時(shí),我們發(fā)現(xiàn)不再有警告信息了。

     

    如果你有足夠細(xì)心,我想你應(yīng)該可以徹底的明白為什么struts2會(huì)報(bào)警了吧?你也應(yīng)該明白了使用struts2標(biāo)簽action中添加/線后請(qǐng)求反而報(bào)錯(cuò)的原因了。

    posted @ 2014-01-16 10:13 kelly 閱讀(261) | 評(píng)論 (0)編輯 收藏
    僅列出標(biāo)題
    共15頁(yè): 上一頁(yè) 1 2 3 4 5 6 7 8 9 下一頁(yè) Last 
    主站蜘蛛池模板: 亚洲精品成a人在线观看☆| 一区二区三区在线免费观看视频 | 亚洲一区二区三区免费视频| 国产午夜精品久久久久免费视 | 久久久久久av无码免费看大片| 狼人大香伊蕉国产WWW亚洲| 亚洲AV无码XXX麻豆艾秋| 亚洲日韩av无码中文| 亚洲第一成年网站视频| 偷自拍亚洲视频在线观看| 国产尤物在线视精品在亚洲| 深夜特黄a级毛片免费播放| 一级毛片免费播放视频| a级片免费在线观看| 国产精品成人69XXX免费视频| 高清永久免费观看| 色播在线永久免费视频网站| 无人在线观看免费高清| 99在线在线视频免费视频观看| 亚洲免费视频播放| 24小时免费直播在线观看| 午夜免费福利在线观看| 日本a级片免费看| 亚洲狠狠爱综合影院婷婷| 国产精品亚洲精品日韩已方 | 毛片a级毛片免费播放100| 日韩在线看片免费人成视频播放| 国产成人精品高清免费| 亚洲午夜国产片在线观看| 亚洲中文字幕无码久久2017| 亚洲欧洲日韩不卡| 午夜在线a亚洲v天堂网2019| 激情小说亚洲图片| 中文字幕免费在线看| 最近最好最新2019中文字幕免费| 亚洲毛片在线免费观看| 日本免费网站在线观看| 国产成人亚洲综合无码| 亚洲综合激情六月婷婷在线观看| 亚洲愉拍一区二区三区| a级毛片免费观看在线|