??xml version="1.0" encoding="utf-8" standalone="yes"?>久久丫精品国产亚洲av不卡,亚洲综合激情六月婷婷在线观看,亚洲制服中文字幕第一区http://www.tkk7.com/kelly/category/54114.htmlzh-cnFri, 17 Jan 2014 14:17:22 GMTFri, 17 Jan 2014 14:17:22 GMT60Struts2整合Spring从xml到注?/title><link>http://www.tkk7.com/kelly/archive/2014/01/17/409079.html</link><dc:creator>kelly</dc:creator><author>kelly</author><pubDate>Fri, 17 Jan 2014 13:51:00 GMT</pubDate><guid>http://www.tkk7.com/kelly/archive/2014/01/17/409079.html</guid><wfw:comment>http://www.tkk7.com/kelly/comments/409079.html</wfw:comment><comments>http://www.tkk7.com/kelly/archive/2014/01/17/409079.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/kelly/comments/commentRss/409079.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/kelly/services/trackbacks/409079.html</trackback:ping><description><![CDATA[<p style="padding-bottom: 0px; border-right-width: 0px; widows: 2; text-transform: none; background-color: rgb(255,255,255); list-style-type: none; text-indent: 2em; margin: 0px 0px 8px; padding-left: 0px; letter-spacing: normal; padding-right: 0px; font: 14px/28px 宋体; white-space: normal; orphans: 2; border-top-width: 0px; border-bottom-width: 0px; color: rgb(51,51,51); border-left-width: 0px; word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">struts和spring整合首先要在Web容器启动的时候自动装配ApplicationContext的配|信息,可想而知应该在web.xml做相应的配置Q?br />[html]<br /><context-param> <br />    <param-name>contextConfigLocation</param-name> <br />    <param-value> <br />        classpath:applicationContext.xml <br />    </param-value> <br /></context-param> <br /><listener> <br />       <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> <br />   </listener> <br />配置了org.springframework.web.context.ContextLoaderListener后我们就不惜要编写代码显C地实例化ApplicationContext对象了。至于ؓ什么要使用监听是因为web.xml 的加载顺序是Qcontext-param -> listener -> filter -> servlet 。如果你是在不想使用监听Q或怽可以试下承struts2的org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter重写q个它的initҎ在StrutsPrepareAndExecuteFilterqo器init中实例化ApplicationContext对象加蝲配置信息Q虽然这U方法也可行Q但是当拦截每个action都会加蝲一ơ配|信息,重新实例化了一个新的web容器Q不仅浪费了资源也让spring更加依赖了struts?/p> <p style="padding-bottom: 0px; border-right-width: 0px; widows: 2; text-transform: none; background-color: rgb(255,255,255); list-style-type: none; text-indent: 2em; margin: 0px 0px 8px; padding-left: 0px; letter-spacing: normal; padding-right: 0px; font: 14px/28px 宋体; white-space: normal; orphans: 2; border-top-width: 0px; border-bottom-width: 0px; color: rgb(51,51,51); border-left-width: 0px; word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">1、用xml方式Q?br />struts2配置<br /><package name="user" extends="struts-default"><br /><action name="login" class="userAction"><br /><result name="success">/success.<a style="color: rgb(51,51,51); font-size: 14px; text-decoration: none" class="keylink" target="_blank">jsp</a></result><br /><result name="input" type="redirect">/index.jsp</result><br /></action><br /></package><br />spring配置<br /><bean id="userDao" class="org.han.dao.impl.UserDaoImpl" /><br /><bean id="biz" class="org.han.service.impl.LoginBizImpl"><br /><property name="userdao" ref="userDao"/><br /></bean></p> <p style="padding-bottom: 0px; border-right-width: 0px; widows: 2; text-transform: none; background-color: rgb(255,255,255); list-style-type: none; text-indent: 2em; margin: 0px 0px 8px; padding-left: 0px; letter-spacing: normal; padding-right: 0px; font: 14px/28px 宋体; white-space: normal; orphans: 2; border-top-width: 0px; border-bottom-width: 0px; color: rgb(51,51,51); border-left-width: 0px; word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><bean id="userAction" class="org.han.action.LoginAction" scope="prototype" ><br /><property name="biz" ref="biz" /><br /></bean><br />注意U色部分Qstruts2的action class与对应的action bean必须相同,q样才能由spring理action;</p> <p style="padding-bottom: 0px; border-right-width: 0px; widows: 2; text-transform: none; background-color: rgb(255,255,255); list-style-type: none; text-indent: 2em; margin: 0px 0px 8px; padding-left: 0px; letter-spacing: normal; padding-right: 0px; font: 14px/28px 宋体; white-space: normal; orphans: 2; border-top-width: 0px; border-bottom-width: 0px; color: rgb(51,51,51); border-left-width: 0px; word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">2、struts2使用雉|方式:<br />当你导入了零配置插g包的时候千万要注意U定大于配置Q还是上面的spring配置Q只是不需要struts2配置了?br />W一U方式:只需要将Action的className对应到spring配置中的bean idp?br />@Action(value = "/login", results = { @Result(name = "success", location = "/success.jsp"),@Result(name="input",location="/index.jsp")},className="userAction")<br />public String login() throws Exception {<br />// TODO Auto-generated method stub<br />User u=biz.login(this.getUser());<br />if(u!=null){<br />return SUCCESS;<br />}<br />return INPUT;<br />}<br />W二U方式:<br />Action注解不需要className了,spring配置E作修改<br /><bean id="org.han.action.LoginAction" class="org.han.action.LoginAction" scope="prototype" ><br /><property name="biz" ref="biz" /><br /></bean><br />q样可以是因为当你用零配置的时候,action的class默认是当前类的全cdQ所以和spring整合的时候刚好用全cd在spring配置中查找以全类名ؓid的bean?/p> <p style="padding-bottom: 0px; border-right-width: 0px; widows: 2; text-transform: none; background-color: rgb(255,255,255); list-style-type: none; text-indent: 2em; margin: 0px 0px 8px; padding-left: 0px; letter-spacing: normal; padding-right: 0px; font: 14px/28px 宋体; white-space: normal; orphans: 2; border-top-width: 0px; border-bottom-width: 0px; color: rgb(51,51,51); border-left-width: 0px; word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">3、struts2、spring都用注解方式:<br />www.2cto.com<br /><beans xmlns="http://www.springframework.org/schema/beans" <br />     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" <br />     xmlns:context="http://www.springframework.org/schema/context" <br />     xsi:schemaLocation="http://www.springframework.org/schema/beans <br />         http://www.springframework.org/schema/beans/spring-beans-3.0.xsd <br />         http://www.springframework.org/schema/context <br />         http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <br />   <context:component-scan base-package="org.han.dao.impl,org.han.service.impl,org.han.action"/> <br /></beans> </p> <p style="padding-bottom: 0px; border-right-width: 0px; widows: 2; text-transform: none; background-color: rgb(255,255,255); list-style-type: none; text-indent: 2em; margin: 0px 0px 8px; padding-left: 0px; letter-spacing: normal; padding-right: 0px; font: 14px/28px 宋体; white-space: normal; orphans: 2; border-top-width: 0px; border-bottom-width: 0px; color: rgb(51,51,51); border-left-width: 0px; word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><context:component-scan base-package=""/>用此U方式,不需要在配置文g中再配置beanQ也不需要再导入上面对应的处理bean。也是说可以不需要在配置文g中?lt;context:annotation-config/>了,因ؓ此种方式会自动导?/p> <p style="padding-bottom: 0px; border-right-width: 0px; widows: 2; text-transform: none; background-color: rgb(255,255,255); list-style-type: none; text-indent: 2em; margin: 0px 0px 8px; padding-left: 0px; letter-spacing: normal; padding-right: 0px; font: 14px/28px 宋体; white-space: normal; orphans: 2; border-top-width: 0px; border-bottom-width: 0px; color: rgb(51,51,51); border-left-width: 0px; word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">[java]<br />@Namespace("/") <br />@Component(value="userLogin") <br />@Scope(value="prototype") <br />public class LoginAction extends ActionSupport { <br /> <br />    public LoginAction() { <br />        super(); <br />        // TODO Auto-generated constructor stub <br />        System.out.println("action:"+this.hashCode()); <br />    } <br />     <br />    @Autowired <br />    private ILoginBiz biz; <br />    private User user; <br /> <br />    public User getUser() { <br />        return user; <br />    } <br /> <br />    public void setUser(User user) { <br />        this.user = user; <br />    } <br />    @Autowired <br />    public void setBiz(ILoginBiz biz) { <br />        this.biz = biz; <br />    } <br /> <br />    @Override <br />    @Action(value = "hello", results = { @Result(name = "success", location = "/success.jsp"),@Result(name="input",location="/index.jsp")}) <br />    public String execute() throws Exception { <br />        // TODO Auto-generated method stub <br />        System.out.println("biz:"+this.biz.hashCode()); <br />        User u=biz.login(this.getUser()); <br />        if(u!=null){ <br />            return SUCCESS; <br />        } <br />        return INPUT; <br />    } <br />} <br />@Component 有一个可选的入参Q用于指?Bean 的名U。一般情况下QBean 都是 singleton 的,需要注?Bean 的地方仅需要通过 byType {略可以自动注入了Q所以大可不必指?Bean 的名U。除了提?@Component 注释外,q定义了几个拥有Ҏ语义的注释,它们分别是:@Repository、@Service ?@Controller。在目前?Spring 版本中,q?3 个注释和 @Component 是等效的Q但是从注释cȝ命名上,很容易看 3 个注释分别和持久层、业务层和控制层QWeb 层)相对应。虽然目前这 3 个注释和 @Component 相比没有什么新意,?Spring 在以后的版本中为它们添加特D的功能。所以,如果 Web 应用E序采用了经典的三层分层l构的话Q最好在持久层、业务层和控制层分别采用 @Repository、@Service ?@Controller 对分层中的类q行注释Q而用 @Component 寚w些比较中立的c进行注释?/p> <p style="padding-bottom: 0px; border-right-width: 0px; widows: 2; text-transform: none; background-color: rgb(255,255,255); list-style-type: none; text-indent: 2em; margin: 0px 0px 8px; padding-left: 0px; letter-spacing: normal; padding-right: 0px; font: 14px/28px 宋体; white-space: normal; orphans: 2; border-top-width: 0px; border-bottom-width: 0px; color: rgb(51,51,51); border-left-width: 0px; word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">@Scope用于定义Bean的作用范围?/p> <p style="padding-bottom: 0px; border-right-width: 0px; widows: 2; text-transform: none; background-color: rgb(255,255,255); list-style-type: none; text-indent: 2em; margin: 0px 0px 8px; padding-left: 0px; letter-spacing: normal; padding-right: 0px; font: 14px/28px 宋体; white-space: normal; orphans: 2; border-top-width: 0px; border-bottom-width: 0px; color: rgb(51,51,51); border-left-width: 0px; word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">@Autowired 注释Q它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。当 Spring 容器启动ӞAutowiredAnnotationBeanPostProcessor 扫?Spring 容器中所?BeanQ当发现 Bean 中拥?@Autowired 注释时就扑ֈ和其匚wQ默认按cd匚wQ的 BeanQƈ注入到对应的地方中去。所以对成员变量使用 @Autowired 后,您大可将它们?setter Ҏ删除?/p> <p style="padding-bottom: 0px; border-right-width: 0px; widows: 2; text-transform: none; background-color: rgb(255,255,255); list-style-type: none; text-indent: 2em; margin: 0px 0px 8px; padding-left: 0px; letter-spacing: normal; padding-right: 0px; font: 14px/28px 宋体; white-space: normal; orphans: 2; border-top-width: 0px; border-bottom-width: 0px; color: rgb(51,51,51); border-left-width: 0px; word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">@Qualifier(“name”) 中的 name?Bean 的名Uͼ所?@Autowired ?@Qualifier l合使用Ӟ自动注入的策略就?byType 转变?byName 了。@Autowired 可以Ҏ员变量、方法以及构造函数进行注释,?@Qualifier 的标注对象是成员变量、方法入参、构造函数入参?/p> <p style="padding-bottom: 0px; border-right-width: 0px; widows: 2; text-transform: none; background-color: rgb(255,255,255); list-style-type: none; text-indent: 2em; margin: 0px 0px 8px; padding-left: 0px; letter-spacing: normal; padding-right: 0px; font: 14px/28px 宋体; white-space: normal; orphans: 2; border-top-width: 0px; border-bottom-width: 0px; color: rgb(51,51,51); border-left-width: 0px; word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">@PostConstruct ?@PreDestroy:JSR-250 为初始化之后/销毁之前方法的指定定义了两个注释类Q这两个注释只能应用于方法上。标注了 @PostConstruct 注释的方法将在类实例化后调用Q而标注了 @PreDestroy 的方法将在类销毁之前调用?br />通过 <bean> 元素?init-method/destroy-method 属性进行配|,都只能ؓ Bean 指定一个初始化 / 销毁的Ҏ。但是?@PostConstruct ?@PreDestroy 注释却可以指定多个初始化 / 销毁方法,那些被标?@PostConstruct 或@PreDestroy 注释的方法都会在初始?/ 销毁时被执行?br />更多的关于注解用:L官方文档</p> <p style="padding-bottom: 0px; border-right-width: 0px; widows: 2; text-transform: none; background-color: rgb(255,255,255); list-style-type: none; text-indent: 2em; margin: 0px 0px 8px; padding-left: 0px; letter-spacing: normal; padding-right: 0px; font: 14px/28px 宋体; white-space: normal; orphans: 2; border-top-width: 0px; border-bottom-width: 0px; color: rgb(51,51,51); border-left-width: 0px; word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">4、ȝQ?br />1、注释配|不一定在先天上优?XML 配置。如?Bean 的依赖关pL固定的,Q如 Service 使用了哪几个 DAO c)Q这U配|信息不会在部v时发生调_那么注释配置优于 XML 配置Q反之如果这U依赖关pM在部|时发生调整QXML 配置昄又优于注释配|,因ؓ注释是对<span id="e2qqq2q" class="Apple-converted-space"> </span><a style="color: rgb(51,51,51); font-size: 14px; text-decoration: none" class="keylink" target="_blank">Java</a><span id="6gyei2e" class="Apple-converted-space"> </span>源代码的调整Q您需要重新改写源代码q新编译才可以实施调整?br />2、如?Bean 不是自己~写的类Q如 JdbcTemplate、SessionFactoryBean {)Q注释配|将无法实施Q此?XML 配置是唯一可用的方式?br />3、注释配|往往是类U别的,?XML 配置则可以表现得更加灉|。比如相比于 @Transaction 事务注释Q?aop/tx 命名I间的事务配|更加灵zd单?br />所以在实现应用中,我们往往需要同时用注释配|和 XML 配置Q对于类U别且不会发生变动的配置可以优先考虑注释配置Q而对于那些第三方cM及容易发生调整的配置则应优先考虑使用 XML 配置。Spring 会在具体实施 Bean 创徏?Bean 注入之前这两种配置方式的元信息融合在一赗?/p><img src ="http://www.tkk7.com/kelly/aggbug/409079.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/kelly/" target="_blank">kelly</a> 2014-01-17 21:51 <a href="http://www.tkk7.com/kelly/archive/2014/01/17/409079.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring注解讲解http://www.tkk7.com/kelly/archive/2014/01/17/409054.htmlkellykellyFri, 17 Jan 2014 04:00:00 GMThttp://www.tkk7.com/kelly/archive/2014/01/17/409054.htmlhttp://www.tkk7.com/kelly/comments/409054.htmlhttp://www.tkk7.com/kelly/archive/2014/01/17/409054.html#Feedback0http://www.tkk7.com/kelly/comments/commentRss/409054.htmlhttp://www.tkk7.com/kelly/services/trackbacks/409054.html来自Q?a >http://hanyexiaoxiao.iteye.com/blog/410123
1. 使用Spring注解来注入属?span class="Apple-converted-space"> 
1.1. 使用注解以前我们是怎样注入属性的 
cȝ实现Q?/p>
public class UserManagerImpl implements UserManager {
	private UserDao userDao;
	public void setUserDao(UserDao userDao) {
		this.userDao = userDao;
	}
	...
}


配置文gQ?/p>

<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注解Q不推荐使用Q徏议用@ResourceQ?span class="Apple-converted-space"> 
cȝ实现Q对成员变量q行标注Q?/p>

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


或者(Ҏ法进行标注)

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


配置文g

<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可以Ҏ员变量、方法和构造函数进行标注,来完成自动装配的工作。以上两U不同实现方式中Q@Autowired的标注位|不同,它们都会在Spring在初始化userManagerImplq个beanӞ自动装配userDaoq个属性,区别是:W一U实CQSpring会直接将UserDaocd的唯一一个bean赋值给userDaoq个成员变量Q第二种实现中,Spring会调用setUserDaoҎ来将UserDaocd的唯一一个bean装配到userDaoq个属性?span class="Apple-converted-space"> 

1.3. 让@Autowired工作h 
要@Autowired能够工作Q还需要在配置文g中加入以下代?/p>

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



1.4. @Qualifier 
@Autowired是根据类型进行自动装配的。在上面的例子中Q如果当Spring上下文中存在不止一个UserDaocd的beanӞ׃抛出BeanCreationException异常Q如果Spring上下文中不存在UserDaocd的beanQ也会抛出BeanCreationException异常。我们可以用@Qualifier配合@Autowired来解册些问题?span class="Apple-converted-space"> 
1. 可能存在多个UserDao实例

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


q样QSpring会找到id为userDao的beanq行装配?span class="Apple-converted-space"> 
2. 可能不存在UserDao实例

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



1.5. @ResourceQJSR-250标准注解Q推荐用它来代替Spring专有的@Autowired注解Q?span class="Apple-converted-space"> 
Spring 不但支持自己定义的@Autowired注解Q还支持几个由JSR-250规范定义的注解,它们分别是@Resource、@PostConstruct以及@PreDestroy?span class="Apple-converted-space"> 
@Resource的作用相当于@AutowiredQ只不过@Autowired按byType自动注入Q而@Resource默认按byName自动注入|了。@Resource有两个属性是比较重要的,分别是name和typeQSpring@Resource注解的name属性解析ؓbean的名字,而type属性则解析为bean的类型。所以如果用name属性,则用byName的自动注入策略,而用type属性时则用byType自动注入{略。如果既不指定name也不指定type属性,q时通过反射机制使用byName自动注入{略?span class="Apple-converted-space"> 
@Resource装配序

  1. 如果同时指定了name和typeQ则从Spring上下文中扑ֈ唯一匚w的beanq行装配Q找不到则抛出异?/li>
  2. 如果指定了nameQ则从上下文中查扑֐UͼidQ匹配的beanq行装配Q找不到则抛出异?/li>
  3. 如果指定了typeQ则从上下文中找到类型匹配的唯一beanq行装配Q找不到或者找到多个,都会抛出异常
  4. 如果既没有指定nameQ又没有指定typeQ则自动按照byName方式q行装配Q见2Q;如果没有匚wQ则回退Z个原始类型(UserDaoQ进行匹配,如果匚w则自动装配;



1.6. @PostConstructQJSR-250Q?span class="Apple-converted-space"> 
在方法上加上注解@PostConstructQ这个方法就会在Bean初始化之后被Spring容器执行Q注QBean初始化包括,实例化BeanQƈ装配Bean的属性(依赖注入Q)?span class="Apple-converted-space"> 
它的一个典型的应用场景是,当你需要往Bean里注入一个其父类中定义的属性,而你又无法复写父cȝ属性或属性的setterҎӞ如:

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);
	}
	...
}


q里通过@PostConstructQؓUserDaoImpl的父c里定义的一个sessionFactoryU有属性,注入了我们自己定义的sessionFactoryQ父cȝsetSessionFactoryҎ为finalQ不可复写)Q之后我们就可以通过调用super.getSessionFactory()来访问该属性了?span class="Apple-converted-space"> 

1.7. @PreDestroyQJSR-250Q?span class="Apple-converted-space"> 
在方法上加上注解@PreDestroyQ这个方法就会在Bean初始化之后被Spring容器执行。由于我们当前还没有需要用到它的场景,q里不不LC。其用法同@PostConstruct?span class="Apple-converted-space"> 

1.8. 使用<context:annotation-config />化配|?span class="Apple-converted-space"> 
Spring2.1d了一个新的context的Schema命名I间Q该命名I间Ҏ释驱动、属性文件引入、加载期l入{功能提供了便捷的配|。我们知道注释本w是不会做Q何事情的Q它仅提供元数据信息。要使元数据信息真正起作用,必须让负责处理这些元数据的处理器工作h?span class="Apple-converted-space"> 
AutowiredAnnotationBeanPostProcessor和CommonAnnotationBeanPostProcessor是处理q些注释元数据的处理器。但是直接在Spring配置文g中定义这些Bean昑־比较W拙。Spring为我们提供了一U方便的注册q些BeanPostProcessor的方式,q就?lt;context:annotation-config />Q?/p>

<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容器注册AutowiredAnnotationBeanPostProcessor、CommonAnnotationBeanPostProcessor?PersistenceAnnotationBeanPostProcessor以及RequiredAnnotationBeanPostProcessorq?个BeanPostProcessor?span class="Apple-converted-space"> 

2. 使用Spring注解完成Bean的定?span class="Apple-converted-space"> 
以上我们介绍了通过@Autowired或@Resource来实现在Bean中自动注入的功能Q下面我们将介绍如何注解BeanQ从而从XML配置文g中完全移除Bean定义的配|?span class="Apple-converted-space"> 

2.1. @ComponentQ不推荐使用Q、@Repository、@Service、@Controller 
只需要在对应的类上加上一个@Component注解Q就该cd义ؓ一个Bean了:

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


使用@Component注解定义的BeanQ默认的名称QidQ是写开头的非限定类名。如q里定义的Bean名称是userDaoImpl。你也可以指定Bean的名Uͼ 
@Component("userDao") 
@Component是所有受Spring理lg的通用形式QSpringq提供了更加l化的注解Ş式:@Repository、@Service、@ControllerQ它们分别对应存储层BeanQ业务层BeanQ和展示层Bean。目前版本(2.5Q中Q这些注解与@Component的语义是一LQ完全通用Q在Spring以后的版本中可能会给它们q加更多的语义。所以,我们推荐使用@Repository、@Service、@Controller来替代@Component?span class="Apple-converted-space"> 

2.2. 使用<context:component-scan />让Bean定义注解工作h

<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>


q里Q所有通过<bean>元素定义Bean的配|内容已l被U除Q仅需要添加一?lt;context:component-scan />配置px有问题了——Spring XML配置文g得到了极致的化(当然配置元数据还是需要的Q只不过以注释Ş式存在Ş了)?lt;context:component-scan />的base-package属性指定了需要扫描的cdQ类包及光归子包中所有的c都会被处理?span class="Apple-converted-space"> 
<context:component-scan />q允许定义过滤器基包下的某些类U_或排除。Spring支持以下4U类型的qo方式Q?/p>

  • qo器类?表达式范?说明
  • 注解 org.example.SomeAnnotation 所有用SomeAnnotation注解的类qo出来
  • cd指定 org.example.SomeClass qo指定的类
  • 正则表达?com\.kedacom\.spring\.annotation\.web\..* 通过正则表达式过滤一些类
  • AspectJ表达?org.example..*Service+ 通过AspectJ表达式过滤一些类


以正则表辑ּZQ我列D一个应用实例:

	<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 />配置不但启用了对类包进行扫描以实施注释驱动Bean定义的功能,同时q启用了注释驱动自动注入的功能(卌隐式地在内部注册了AutowiredAnnotationBeanPostProcessor和CommonAnnotationBeanPostProcessorQ,因此当?lt;context:component-scan />后,可以将<context:annotation-config />U除了?span class="Apple-converted-space"> 

2.3. 使用@Scope来定义Bean的作用范?span class="Apple-converted-space"> 
在用XML定义BeanӞ我们可能q需要通过bean的scope属性来定义一个Bean的作用范_我们同样可以通过@Scope注解来完成这工作:

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



3. 参?span class="Apple-converted-space"> 
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



kelly 2014-01-17 12:00 发表评论
]]>
Struts2.3+Spring3.2的整?/title><link>http://www.tkk7.com/kelly/archive/2014/01/16/409003.html</link><dc:creator>kelly</dc:creator><author>kelly</author><pubDate>Thu, 16 Jan 2014 02:32:00 GMT</pubDate><guid>http://www.tkk7.com/kelly/archive/2014/01/16/409003.html</guid><wfw:comment>http://www.tkk7.com/kelly/comments/409003.html</wfw:comment><comments>http://www.tkk7.com/kelly/archive/2014/01/16/409003.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/kelly/comments/commentRss/409003.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/kelly/services/trackbacks/409003.html</trackback:ping><description><![CDATA[     摘要: Struts2.3+Spring3.2的整?       q两天都是一直在鼓捣Struts2.3如何整合Spring3.2以及dao层到底选用什么以及如何整合。下面就把自p两天的一些小成果分n出来也以便自׃后在实际目中快速搭建?首先是Struts2.3整合Spring3.2 1、新Z个web工程Q这个就不说了) 2、添...  <a href='http://www.tkk7.com/kelly/archive/2014/01/16/409003.html'>阅读全文</a><img src ="http://www.tkk7.com/kelly/aggbug/409003.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/kelly/" target="_blank">kelly</a> 2014-01-16 10:32 <a href="http://www.tkk7.com/kelly/archive/2014/01/16/409003.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>No configuration found for the specified actionhttp://www.tkk7.com/kelly/archive/2014/01/16/408997.htmlkellykellyThu, 16 Jan 2014 02:13:00 GMThttp://www.tkk7.com/kelly/archive/2014/01/16/408997.htmlhttp://www.tkk7.com/kelly/comments/408997.htmlhttp://www.tkk7.com/kelly/archive/2014/01/16/408997.html#Feedback0http://www.tkk7.com/kelly/comments/commentRss/408997.htmlhttp://www.tkk7.com/kelly/services/trackbacks/408997.html 警告信息如下Q?/span>

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

 

struts.xml配置信息Q部分)

 

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

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

 

jsp面配置信息Q部分)

 

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

 

思考:没有?/span>''?/span>namespace中发现指定的action '/myNameSpace/login.action'

{疑Q因为配|的struts2标签q未指定namespace属性。所?/span>struts2会默认从根命名空?/span>"/"搜烦action?/span>' /myNameSpace/login.action'Q如果搜索不到将q入默认命名I间''搜烦actionhԌ在默认命名空间中是肯定找不到我们 定义?/span>action的,所以,struts2抛出一个警告信息?/span>

但是Z么我们没有填?/span>namespaceQ我们的h也可以正常访问呢Q?/span>

 

我们来看一下解析后?/span>html

查看源码得到?/span>htmlQ部分)

 

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

 

我们看到form提交?/span>action串是准确?/span>urlhQ?/span>action串确实是/srvclinQ应用根Q?/span>/myNameSpaceQ命名空_/login.action?/span>

命名I间中找不到action定义Qƈ不意味着q个action真的不存在,只是我们的代码有问题而已。还有一Ҏ我们?/span>jsp面?/span>actionh?/span> 手动的加入了.action后缀。事实上struts2会自动追?/span>.action的,因ؓ我们q没有合法的使用struts2的标{,所?/span>struts2 q里q没有给我们q加.actionQ解析后的代码中存在?/span>.actionQ完全是我们手动?/span>jsp面填写的,有疑问的|友可以不手动添加查?/span> html?/span>

 

我们修改我们的程序代?/span>

 

jsp面配置信息Q部分)修改后加?/span>namespace属性,修改action属性gؓ/login.action

 

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

 

h面后,大家很失望吧Q警告依然存在。但是我们看一下警告信息?/span>

 

警告信息Q?/span>

 

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

 

没有?/span>'/myNameSpace'?/span>namespace中发现指定的action '/login.action'

 

毫无疑问Q这里的警告和第一ơ的警告信息截然不同。我们现在存在命名空_'/myNameSpace'能够?/span>struts2索到Qƈ不是开始的''。那问题的关键在哪里呢?

?/span>namespace中没有发现指定的action '/login.action' Q?Q?/span>

 

我们来看一?/span>struts.xml中的配置Q?/span>

 

struts.xml配置信息Q部分)

 

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

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

 

是的Q我?/span>'/myNameSpace'命名I间下,只有action名字?/span>'login'的定义,q没有所谓的'/login.action' 定义Q所?/span>struts2的警告ƈ未错。如果大家对q个抱有怀疑,可以修改action的名?/span>'login'?/span>‘/longin.action’

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

h面时你会发C在报警告信息Q原因很单。因为在命名I间?/span>'myNameSpace'下确实存在命名ؓ'/login.action'?/span>action?/span>

 

我们再次修改配置文g

 

jsp面配置信息Q部分)修改?/span>action属性gؓlongin

 

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

 

h面Ӟ我们发现不再有警告信息了?/span>

 

如果你有_l心Q我想你应该可以d的明白ؓ什?/span>struts2会报警了吧?你也应该明白了?/span>struts2标签action中添?/span>/U后h反而报错的原因了?/span>



kelly 2014-01-16 10:13 发表评论
]]>
单Struts2实例(入门U?-?/title><link>http://www.tkk7.com/kelly/archive/2014/01/10/408760.html</link><dc:creator>kelly</dc:creator><author>kelly</author><pubDate>Fri, 10 Jan 2014 03:18:00 GMT</pubDate><guid>http://www.tkk7.com/kelly/archive/2014/01/10/408760.html</guid><wfw:comment>http://www.tkk7.com/kelly/comments/408760.html</wfw:comment><comments>http://www.tkk7.com/kelly/archive/2014/01/10/408760.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/kelly/comments/commentRss/408760.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/kelly/services/trackbacks/408760.html</trackback:ping><description><![CDATA[<p style="text-align: left; widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; letter-spacing: normal; font: 14px/26px Arial; white-space: normal; orphans: 2; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"> <span id="w24woqg" class="Apple-converted-space"> </span><span style="color: rgb(0,0,255)">功能Q本实例实现的功能是从输入界面输入用户名和密码,若用户名和密码正{到成功界面,否则转到p|界面?/span></p> <p style="text-align: left; widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; letter-spacing: normal; font: 14px/26px Arial; white-space: normal; orphans: 2; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">   实现Q?br />  <span id="2gmo42m" class="Apple-converted-space"> </span><span style="color: rgb(255,0,0)">W一步:创徏一个Web工程<br /></span>   在MyEclipseQ通过菜单File->New->Web ProjectQ在Project Name输入工程名称Strut2TravelQ点解确定完成创Z个工E?br />   注:MyEclipse属于一个IDEl承开发环境,可以快速的创徏Web目。读者可以手工创建,只需满目的文件结构即可。其中WEB-INF文g夹必不可?/p> <p style="text-align: left; widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; letter-spacing: normal; font: 14px/26px Arial; white-space: normal; orphans: 2; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">  <span id="cwyq2ku" class="Apple-converted-space"> </span><span style="color: rgb(255,0,0)">W二步:导入Struts2的核心支持包</span><br />   commons-fileupload-1.2.1.jar</p> <p style="text-align: left; widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; letter-spacing: normal; font: 14px/26px Arial; white-space: normal; orphans: 2; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">   commons-io-1.3.2.jar</p> <p style="text-align: left; widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; letter-spacing: normal; font: 14px/26px Arial; white-space: normal; orphans: 2; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">   commons-logging-1.0.4.jar</p> <p style="text-align: left; widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; letter-spacing: normal; font: 14px/26px Arial; white-space: normal; orphans: 2; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">   freemarker-2.3.15.jar</p> <p style="text-align: left; widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; letter-spacing: normal; font: 14px/26px Arial; white-space: normal; orphans: 2; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">   ognl-2.7.3.jar</p> <p style="text-align: left; widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; letter-spacing: normal; font: 14px/26px Arial; white-space: normal; orphans: 2; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">   struts2-core-2.1.8.1.jar</p> <p style="text-align: left; widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; letter-spacing: normal; font: 14px/26px Arial; white-space: normal; orphans: 2; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">   xwork-core-2.1.6.jar<br />   注:Struts2有大量的jar包,支持大量的功能,不同cd的应用可能需要不同的包支持。以上的5个包为Struts2的核心包Q用Struts2必须使用?/p> <p style="text-align: left; widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; letter-spacing: normal; font: 14px/26px Arial; white-space: normal; orphans: 2; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">  <span id="ai44ga4" class="Apple-converted-space"> </span><span style="color: rgb(255,0,0)">W三步:配置struts2转发qo?/span><br />   ~辑web.xml文gQ添加以下内?br /> <filter><br />  <filter-name>struts2</filter-name><br />  <filter-class><br />   org.apache.struts2.dispatcher.FilterDispatcher<br />  </filter-class><br /> </filter><br /> <filter-mapping><br />  <filter-name>struts2</filter-name><br />  <url-pattern>/*</url-pattern><br /> </filter-mapping><br />   注:“/*”表示涉及本工E的所有浏览器端的h都经qstruts2qo器处理?/p> <p style="text-align: left; widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; letter-spacing: normal; font: 14px/26px Arial; white-space: normal; orphans: 2; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">   <span style="color: rgb(255,0,0)"><span id="442a4w4" class="Apple-converted-space"> </span>W四?/span>Q创入页面login.jsp、结果页面welcome.jsp和error.jsp<br /><span style="color: rgb(255,0,0)">login.jsp<br /></span><%@ page language="java" import="java.util.*" pageEncoding="GB2312"%><br /><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><br /><html><br />  <head><title>d界面</title></head><br />  <body><br />    <form action="LoginAction.action"><br />       用户名:<input name="username"><br><br />       ?码:<input type="password" name="userpass"><br><br />      <input type="submit" value="??><br />      <input type="reset"  value="??><br />    </form><br />  </body><br /></html></p> <p style="text-align: left; widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; letter-spacing: normal; font: 14px/26px Arial; white-space: normal; orphans: 2; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><br /><span style="color: rgb(255,0,0)">welcome.jsp<br /></span><%@ page language="java" import="java.util.*" pageEncoding="GB2312"%><br /><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><br /><html><br />  <head><br />    <title>Ƣ迎</title><br />  </head><br />  <body><br />    <font color="red" size="10">d成功Q?lt;/font><br />  </body><br /></html></p> <p style="text-align: left; widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; letter-spacing: normal; font: 14px/26px Arial; white-space: normal; orphans: 2; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><br /><span style="color: rgb(255,0,0)">error.jsp<br /></span><%@ page language="java" import="java.util.*" pageEncoding="GB2312"%><br /><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><br /><html><br />  <head><br />    <title></title><br />  </head><br />  <body><br />    <font color="red" size="10">用户或密码错误!</font><br />  </body><br /></html><br />    注:本实例是最单的应用Q以上ؓUJSP文gQStruts2提供大量使用的标{,本书后面的实例会使用到?/p> <p style="text-align: left; widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; letter-spacing: normal; font: 14px/26px Arial; white-space: normal; orphans: 2; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">   <span style="color: rgb(255,0,0)"><span id="aa4c2og" class="Apple-converted-space"> </span>W五?/span>Q创建Action文gLoginAction和struts2.xml文g<br />LoginAction.java<br />package com;</p> <p style="text-align: left; widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; letter-spacing: normal; font: 14px/26px Arial; white-space: normal; orphans: 2; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">import com.opensymphony.xwork2.ActionSupport;</p> <p style="text-align: left; widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; letter-spacing: normal; font: 14px/26px Arial; white-space: normal; orphans: 2; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"> </p> <p style="text-align: left; widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; letter-spacing: normal; font: 14px/26px Arial; white-space: normal; orphans: 2; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">public class LoginAction extends ActionSupport{<br /> private String username;<br /> private String userpass;<br /> <br /> public String execute(){<br />  if("daniel".equals(username)&&"abcde".equals(userpass))<br />   return SUCCESS;<br />  else<br />   return ERROR;<br /> }<br /> <br /> public String getUsername() {<br />  return username;<br /> }<br /> public void setUsername(String username) {<br />  this.username = username;<br /> }<br /> public String getUserpass() {<br />  return userpass;<br /> }<br /> public void setUserpass(String userpass) {<br />  this.userpass = userpass;<br /> }<br />}</p> <p style="text-align: left; widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; letter-spacing: normal; font: 14px/26px Arial; white-space: normal; orphans: 2; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><br />    注:默认配置情况下执行execute()ҎQ实际应用中l常更改配置。本书后面将深入讲解。注意本cM的username和userpass必须和网|件的name属性名一致?br />struts.xml<br /><!DOCTYPE struts PUBLIC<br />        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"<br />       <span style="text-decoration: underline"><span id="24a4444" class="Apple-converted-space"> </span>"</span><a style="color: rgb(51,102,153); text-decoration: none" >http://struts.apache.org/dtds/struts-2.0.dtd</a><span style="text-decoration: underline">"><br /></span><struts><br /> <package name="struts2demo" extends="struts-default"><br />   <action name="loginAction" class="com.LoginAction"><br />     <result name="success">/welcome.jsp</result><br />     <result name="error">/error.jsp</result><br />   </action><br /> </package> <span id="2ouwsuq" class="Apple-converted-space"> </span><br /></struts></p> <p style="text-align: left; widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; letter-spacing: normal; font: 14px/26px Arial; white-space: normal; orphans: 2; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">    W五步:程序发布到TomcatQ启动Tomcat卛_?br />    通过本实例读者应该掌握如何配|ƈ~写一个最单最基本的应用,对于初学读者以了解ZQ没必要q一些问题?/p><img src ="http://www.tkk7.com/kelly/aggbug/408760.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/kelly/" target="_blank">kelly</a> 2014-01-10 11:18 <a href="http://www.tkk7.com/kelly/archive/2014/01/10/408760.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts2Z注解的Action配置http://www.tkk7.com/kelly/archive/2014/01/09/408736.htmlkellykellyThu, 09 Jan 2014 08:20:00 GMThttp://www.tkk7.com/kelly/archive/2014/01/09/408736.htmlhttp://www.tkk7.com/kelly/comments/408736.htmlhttp://www.tkk7.com/kelly/archive/2014/01/09/408736.html#Feedback0http://www.tkk7.com/kelly/comments/commentRss/408736.htmlhttp://www.tkk7.com/kelly/services/trackbacks/408736.html阅读全文

kelly 2014-01-09 16:20 发表评论
]]>
Struts2教程1Q第一个Struts2E序 -?/title><link>http://www.tkk7.com/kelly/archive/2014/01/09/408727.html</link><dc:creator>kelly</dc:creator><author>kelly</author><pubDate>Thu, 09 Jan 2014 03:41:00 GMT</pubDate><guid>http://www.tkk7.com/kelly/archive/2014/01/09/408727.html</guid><wfw:comment>http://www.tkk7.com/kelly/comments/408727.html</wfw:comment><comments>http://www.tkk7.com/kelly/archive/2014/01/09/408727.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/kelly/comments/commentRss/408727.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/kelly/services/trackbacks/408727.html</trackback:ping><description><![CDATA[<p> </p> <h2><a id="viewpost1_TitleUrl" href="file:///E:/资料大全/Spring+struts/Struts2教程1Q第一个Struts2E序%20-%20李宁的极客世?20-%20BlogJava_files/Struts2教程1Q第一个Struts2E序%20-%20李宁的极客世?20-%20BlogJava.htm">Struts2教程1Q第一个Struts2E序</a> <br /><br /><span style="font-family: 宋体">在本pd教程中我们将学习?/span>Struts2<span style="font-family: 宋体">的各U技术。在本教E中使用的工具和E序库的版本如下Q?/span> </h2> <div id="y24a2g4" class="postbody"> <p><span style="font-family: 宋体">开发工P</span>MyEclipse6</p> <p>Web<span style="font-family: 宋体">服务器:</span>Tomcat6</p> <p>Struts<span style="font-family: 宋体">版本Q?/span>Struts2.0.11.1</p> <p>JDK<span style="font-family: 宋体">版本Q?/span>JDK1.5.0_12</p> <p>J2EE<span style="font-family: 宋体">版本Q?/span>Java EE5.0</p> <p><span style="font-family: 宋体">在本pd教程?/span>Web<span style="font-family: 宋体">工程的上下文路径都是</span>struts2<span style="font-family: 宋体">Q如果在</span>Web<span style="font-family: 宋体">根目录有一?/span>index.jsp<span style="font-family: 宋体">文gQ则讉K路径如下Q?/span><br /><br />http://localhost:8080/struts2/index.jsp</p> <p><span style="font-family: 宋体">׃</span>MyEclipse6<span style="font-family: 宋体">目前q不支持</span>Struts2<span style="font-family: 宋体">Q所以我们需要到</span>struts.apache.org<span style="font-family: 宋体">M?/span>Struts2<span style="font-family: 宋体">安装包。要x怋?/span>Struts2<span style="font-family: 宋体">Q至需要如下五个包Q可能会因ؓ</span>Struts2<span style="font-family: 宋体">的版本不同,包名略有差异Q但包名的前半部是一LQ?/span></p> <p>struts2-core-2.0.11.1.jar</p> <p>xwork-2.0.4.jar</p> <p>commons-logging-1.0.4.jar</p> <p>freemarker-2.3.8.jar</p> <p>ognl-2.6.11.jar</p> <p>Struts2<span style="font-family: 宋体">虽然在大版本号上是第二个版本Q但基本上在配置和用上已经完全颠覆?/span>Struts1.x<span style="font-family: 宋体">的方式(当然Q?/span>Struts2<span style="font-family: 宋体">仍然是基?/span>MVC<span style="font-family: 宋体">模式的,也是动作驱动的,可能q是唯一没变的东西)?/span>Struts2<span style="font-family: 宋体">实际上是?/span>Webwork<span style="font-family: 宋体">基础上构v来的</span>MVC<span style="font-family: 宋体">框架。我们从</span>Struts2<span style="font-family: 宋体">的源代码中可以看刎ͼ有很多都是直接用的</span>xwork(Webwork<span style="font-family: 宋体">的核心技?/span>)<span style="font-family: 宋体">的包。既然从技术上来说</span>Struts2<span style="font-family: 宋体">是全新的框架Q那么就让我们来学习一下这个新的框架的使用Ҏ?/span></p> <p><span style="font-family: 宋体">如果大家使用q?/span>Struts1.x<span style="font-family: 宋体">Q应该对建立Z</span>Struts1.x<span style="font-family: 宋体">?/span>Web<span style="font-family: 宋体">E序的基本步骤非常清楚。让我们先来回顾一下徏立基?/span>Struts1.x<span style="font-family: 宋体">?/span>Web<span style="font-family: 宋体">E序的基本步骤?/span></p> <p style="text-indent: -19.5pt; margin-left: 19.5pt">1.<span style="font: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal"> </span><span style="font-family: 宋体">安装</span>Struts<span style="font-family: 宋体">。由?/span>Struts<span style="font-family: 宋体">的入口点?/span>ActionServlet<span style="font-family: 宋体">Q所以得?/span>web.xml<span style="font-family: 宋体">中配|一下这?/span>Servlet<span style="font-family: 宋体">?/span></p> <p style="text-indent: -19.5pt; margin-left: 19.5pt">2.<span style="font: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal"> </span><span style="font-family: 宋体">~写</span>Action<span style="font-family: 宋体">c(一般从</span>org.apache.struts.action.Action<span style="font-family: 宋体">cȝ承)?/span></p> <p style="text-indent: -19.5pt; margin-left: 19.5pt">3.<span style="font: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal"> </span><span style="font-family: 宋体">~写</span>ActionForm<span style="font-family: 宋体">c(一般从</span>org.apache.struts.action.ActionForm<span style="font-family: 宋体">cȝ承)Q这一步不是必ȝQ如果要接收客户端提交的数据Q需要执行这一步?/span></p> <p style="text-indent: -19.5pt; margin-left: 19.5pt">4.<span style="font: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal"> </span><span style="font-family: 宋体">?/span>struts-config.xml<span style="font-family: 宋体">文g中配|?/span>Action<span style="font-family: 宋体">?/span>ActionForm<span style="font-family: 宋体">?/span></p> <p style="text-indent: -19.5pt; margin-left: 19.5pt">5.<span style="font: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal"> </span><span style="font-family: 宋体">如果?/span><span style="font-family: 宋体">采集用户录入的数据,一般需要编写若q?/span>JSP<span style="font-family: 宋体">面Qƈ通过q些</span>JSP<span style="font-family: 宋体">面中的</span>form<span style="font-family: 宋体">数据提交给</span>Action<span style="font-family: 宋体">?/span></p> <p style="text-indent: 21pt"><span style="font-family: 宋体">下面我们按着~写</span>struts1.x<span style="font-family: 宋体">E序?/span><span style="font-family: 宋体">q五步和</span>struts2.x<span style="font-family: 宋体">E序的编写过E一一对应Q看看它们谁?#8220;?#8221;。下面我们来~写一个基?/span>Struts2<span style="font-family: 宋体">?/span>Web<span style="font-family: 宋体">E序。这个程序的功能是让用户录入两个整数Qƈ提交l一?/span>Struts Action<span style="font-family: 宋体">Qƈ计算q两个数的代数和Q如果代码和为非负数Q则跌{?/span>positive.jsp<span style="font-family: 宋体">面Q否则蟩转到</span>negative.jsp<span style="font-family: 宋体">面?br /><br /></span></p> <p><strong><span style="font-family: 宋体">【第</span>1</strong><strong><span style="font-family: 宋体">步?/span></strong> <span style="font-family: 宋体">安装</span>Struts2</p> <p><span style="font-family: 宋体">q一步对?/span>Struts1.x<span style="font-family: 宋体">?/span>Struts2<span style="font-family: 宋体">都是必须的,只是安装的方法不同?/span>Struts1<span style="font-family: 宋体">的入口点是一?/span>Servlet<span style="font-family: 宋体">Q?/span>Struts2<span style="font-family: 宋体">的入口点是一个过滤器</span>(Filter)<span style="font-family: 宋体">。因此,</span>Struts2<span style="font-family: 宋体">要按qo器的方式配置。下面是?/span>web.xml<span style="font-family: 宋体">中配|?/span>Struts2<span style="font-family: 宋体">的代码:</span></p> <div style="border-bottom: rgb(204,204,204) 1px solid; border-left: rgb(204,204,204) 1px solid; padding-bottom: 4px; background-color: rgb(238,238,238); padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; border-top: rgb(204,204,204) 1px solid; border-right: rgb(204,204,204) 1px solid; padding-top: 4px"><span style="color: rgb(0,0,255)"><</span><span style="color: rgb(128,0,0)">filter</span><span style="color: rgb(0,0,255)">></span><span style="color: rgb(0,0,0)"><br /></span><span style="color: rgb(0,0,255)"><</span><span style="color: rgb(128,0,0)">filter-name</span><span style="color: rgb(0,0,255)">></span><span style="color: rgb(0,0,0)">struts2</span><span style="color: rgb(0,0,255)"></</span><span style="color: rgb(128,0,0)">filter-name</span><span style="color: rgb(0,0,255)">></span><span style="color: rgb(0,0,0)"><br /></span><span style="color: rgb(0,0,255)"><</span><span style="color: rgb(128,0,0)">filter-class</span><span style="color: rgb(0,0,255)">></span><span style="color: rgb(0,0,0)"><br />org.apache.struts2.dispatcher.FilterDispatcher <br /></span><span style="color: rgb(0,0,255)"></</span><span style="color: rgb(128,0,0)">filter-class</span><span style="color: rgb(0,0,255)">></span><span style="color: rgb(0,0,0)"><br /></span><span style="color: rgb(0,0,255)"></</span><span style="color: rgb(128,0,0)">filter</span><span style="color: rgb(0,0,255)">></span><span style="color: rgb(0,0,0)"><br /></span><span style="color: rgb(0,0,255)"><</span><span style="color: rgb(128,0,0)">filter-mapping</span><span style="color: rgb(0,0,255)">></span><span style="color: rgb(0,0,0)"><br /></span><span style="color: rgb(0,0,255)"><</span><span style="color: rgb(128,0,0)">filter-name</span><span style="color: rgb(0,0,255)">></span><span style="color: rgb(0,0,0)">struts2</span><span style="color: rgb(0,0,255)"></</span><span style="color: rgb(128,0,0)">filter-name</span><span style="color: rgb(0,0,255)">></span><span style="color: rgb(0,0,0)"><br /></span><span style="color: rgb(0,0,255)"><</span><span style="color: rgb(128,0,0)">url-pattern</span><span style="color: rgb(0,0,255)">></span><span style="color: rgb(0,0,0)">/*</span><span style="color: rgb(0,0,255)"></</span><span style="color: rgb(128,0,0)">url-pattern</span><span style="color: rgb(0,0,255)">></span><span style="color: rgb(0,0,0)"><br /></span><span style="color: rgb(0,0,255)"></</span><span style="color: rgb(128,0,0)">filter-mapping</span><span style="color: rgb(0,0,255)">></span><span style="color: rgb(0,0,0)"><br /></span></div><br /> <p><strong><span style="font-family: 宋体">【第</span>2</strong><strong><span style="font-family: 宋体">步?/span></strong> <span style="font-family: 宋体">~写</span>Action<span style="font-family: 宋体">c?/span></p><span style="font-family: 'Times New Roman'; font-size: 10.5pt"></span><span style="font-family: 宋体; font-size: 10.5pt">q一步和</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt">Struts1.x</span><span style="font-family: 宋体; font-size: 10.5pt">也必进行。只?/span><span style="font-family: 'Times New Roman'; font-size: 10.5pt">Struts1.x</span><span style="font-family: 宋体; font-size: 10.5pt">中的动作cdM</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt">Action</span><span style="font-family: 宋体; font-size: 10.5pt">cMl承Q?/span><span style="font-family: 'Times New Roman'; font-size: 10.5pt">Struts2.x</span><span style="font-family: 宋体; font-size: 10.5pt">的动作类需要从</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt">com.opensymphony.xwork2.ActionSupport</span><span style="font-family: 宋体; font-size: 10.5pt">cȝѝ下面是计算两个整数代码和的</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt">Action</span><span style="font-family: 宋体; font-size: 10.5pt">c,代码如下Q?/span><span style="font-family: 'Times New Roman'; font-size: 10.5pt"><br /> <div style="border-bottom: rgb(204,204,204) 1px solid; border-left: rgb(204,204,204) 1px solid; padding-bottom: 4px; background-color: rgb(238,238,238); padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; border-top: rgb(204,204,204) 1px solid; border-right: rgb(204,204,204) 1px solid; padding-top: 4px"><span style="color: rgb(0,0,255)">package</span><span style="color: rgb(0,0,0)"> action;<br /><br /></span><span style="color: rgb(0,0,255)">import</span><span style="color: rgb(0,0,0)"> com.opensymphony.xwork2.ActionSupport;<br /><br /></span><span style="color: rgb(0,0,255)">public</span><span style="color: rgb(0,0,0)"> </span><span style="color: rgb(0,0,255)">class</span><span style="color: rgb(0,0,0)"> FirstAction </span><span style="color: rgb(0,0,255)">extends</span><span style="color: rgb(0,0,0)"> ActionSupport<br />{<br /></span><span style="color: rgb(0,0,255)">private</span><span style="color: rgb(0,0,0)"> </span><span style="color: rgb(0,0,255)">int</span><span style="color: rgb(0,0,0)"> operand1;<br /></span><span style="color: rgb(0,0,255)">private</span><span style="color: rgb(0,0,0)"> </span><span style="color: rgb(0,0,255)">int</span><span style="color: rgb(0,0,0)"> operand2;<br /><br /></span><span style="color: rgb(0,0,255)">public</span><span style="color: rgb(0,0,0)"> String execute() </span><span style="color: rgb(0,0,255)">throws</span><span style="color: rgb(0,0,0)"> Exception<br />{<br /></span><span style="color: rgb(0,0,255)">if</span><span style="color: rgb(0,0,0)"> (getSum() </span><span style="color: rgb(0,0,0)">>=</span><span style="color: rgb(0,0,0)"> </span><span style="color: rgb(0,0,0)">0</span><span style="color: rgb(0,0,0)">) </span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)"> 如果代码数和是非负整敎ͼ跛_positive.jsp面</span><span style="color: rgb(0,128,0)"><br /></span><span style="color: rgb(0,0,0)">{<br /></span><span style="color: rgb(0,0,255)">return</span><span style="color: rgb(0,0,0)"> </span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">positive</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">;<br />}<br /></span><span style="color: rgb(0,0,255)">else</span><span style="color: rgb(0,0,0)"> </span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)"> 如果代码数和是负整数Q蟩到negative.jsp面</span><span style="color: rgb(0,128,0)"><br /></span><span style="color: rgb(0,0,0)">{<br /></span><span style="color: rgb(0,0,255)">return</span><span style="color: rgb(0,0,0)"> </span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">negative</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">;<br />}<br />}<br /><br /></span><span style="color: rgb(0,0,255)">public</span><span style="color: rgb(0,0,0)"> </span><span style="color: rgb(0,0,255)">int</span><span style="color: rgb(0,0,0)"> getOperand1()<br />{<br /></span><span style="color: rgb(0,0,255)">return</span><span style="color: rgb(0,0,0)"> operand1;<br />}<br /><br /></span><span style="color: rgb(0,0,255)">public</span><span style="color: rgb(0,0,0)"> </span><span style="color: rgb(0,0,255)">void</span><span style="color: rgb(0,0,0)"> setOperand1(</span><span style="color: rgb(0,0,255)">int</span><span style="color: rgb(0,0,0)"> operand1)<br />{<br />System.out.println(operand1);<br /></span><span style="color: rgb(0,0,255)">this</span><span style="color: rgb(0,0,0)">.operand1 </span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)"> operand1;<br />}<br /><br /></span><span style="color: rgb(0,0,255)">public</span><span style="color: rgb(0,0,0)"> </span><span style="color: rgb(0,0,255)">int</span><span style="color: rgb(0,0,0)"> getOperand2()<br />{<br /></span><span style="color: rgb(0,0,255)">return</span><span style="color: rgb(0,0,0)"> operand2;<br />} <br /></span><span style="color: rgb(0,0,255)">public</span><span style="color: rgb(0,0,0)"> </span><span style="color: rgb(0,0,255)">void</span><span style="color: rgb(0,0,0)"> setOperand2(</span><span style="color: rgb(0,0,255)">int</span><span style="color: rgb(0,0,0)"> operand2)<br />{<br />System.out.println(operand2);<br /></span><span style="color: rgb(0,0,255)">this</span><span style="color: rgb(0,0,0)">.operand2 </span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)"> operand2;<br />}<br /></span><span style="color: rgb(0,0,255)">public</span><span style="color: rgb(0,0,0)"> </span><span style="color: rgb(0,0,255)">int</span><span style="color: rgb(0,0,0)"> getSum()<br />{<br /></span><span style="color: rgb(0,0,255)">return</span><span style="color: rgb(0,0,0)"> operand1 </span><span style="color: rgb(0,0,0)">+</span><span style="color: rgb(0,0,0)"> operand2; </span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)"> 计算两个整数的代码数?/span><span style="color: rgb(0,128,0)"><br /></span><span style="color: rgb(0,0,0)">}<br />}<br /></span></div> <p><span style="font-family: 宋体">从上面的代码可以看出Q动作类的一个特征就是要覆盖</span>execute<span style="font-family: 宋体">ҎQ只?/span>Struts2<span style="font-family: 宋体">?/span>execute<span style="font-family: 宋体">Ҏ没有参数了,?/span>Struts1.x<span style="font-family: 宋体">?/span>execute<span style="font-family: 宋体">Ҏ有四个参数。而且</span>execute<span style="font-family: 宋体">Ҏ的返回g不同的?/span>Struts2<span style="font-family: 宋体">只返回一?/span>String<span style="font-family: 宋体">Q用于表q执行结果(是一个标志)。上面代码的其他部分在下面讲解?/span><br /><br /></p> <p><strong><span style="font-family: 宋体">【第</span>3</strong><strong><span style="font-family: 宋体">步?/span></strong> <span style="font-family: 宋体">~写</span>ActionForm<span style="font-family: 宋体">c?/span></p> <p><span style="font-family: 宋体">在本例中当然需要?/span>ActionForm<span style="font-family: 宋体">了。在</span>Struts1.x<span style="font-family: 宋体">中,必须要单独徏立一?/span>ActionForm<span style="font-family: 宋体">c(或是定义一个动?/span>Form<span style="font-family: 宋体">Q,而在</span>Struts2<span style="font-family: 宋体">?/span>ActionForm<span style="font-family: 宋体">?/span>Action<span style="font-family: 宋体">已经二合一了。从W二步的代码可以看出Q后面的部分是应该写在</span>ActionForm<span style="font-family: 宋体">cM的内宏V所以在W?/span>2<span style="font-family: 宋体">步,本例?/span>ActionForm<span style="font-family: 宋体">cdl编写完成(是</span>Action<span style="font-family: 宋体">cȝ后半部分Q?/span></p> <p><strong><span style="font-family: 宋体">【第</span>4</strong><strong><span style="font-family: 宋体">步?/span></strong> <span style="font-family: 宋体">配置</span>Action<span style="font-family: 宋体">c?/span></p><span style="font-family: 'Times New Roman'; font-size: 10.5pt"></span><span style="font-family: 宋体; font-size: 10.5pt">q一?/span><span style="font-family: 'Times New Roman'; font-size: 10.5pt">struts1.x</span><span style="font-family: 宋体; font-size: 10.5pt">?/span><span style="font-family: 'Times New Roman'; font-size: 10.5pt">struts2.x</span><span style="font-family: 宋体; font-size: 10.5pt">都是必须的,只是?/span><span style="font-family: 'Times New Roman'; font-size: 10.5pt">struts1.x</span><span style="font-family: 宋体; font-size: 10.5pt">中的配置文g一般叫</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt">struts-config.xml</span><span style="font-family: 宋体; font-size: 10.5pt">Q当然也可以是其他的文g名)Q而且一般放?/span><span style="font-family: 'Times New Roman'; font-size: 10.5pt">WEB-INF</span><span style="font-family: 宋体; font-size: 10.5pt">目录中。而在</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt">struts2.x</span><span style="font-family: 宋体; font-size: 10.5pt">中的配置文g一般ؓ</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt">struts.xml</span><span style="font-family: 宋体; font-size: 10.5pt">Q放?/span><span style="font-family: 'Times New Roman'; font-size: 10.5pt">WEB-INF"classes</span><span style="font-family: 宋体; font-size: 10.5pt">目录中。下面是?/span><span style="font-family: 'Times New Roman'; font-size: 10.5pt">struts.xml</span><span style="font-family: 宋体; font-size: 10.5pt">中配|动作类的代码:</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt"><br /><br /></span> <div style="border-bottom: rgb(204,204,204) 1px solid; border-left: rgb(204,204,204) 1px solid; padding-bottom: 4px; background-color: rgb(238,238,238); padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; border-top: rgb(204,204,204) 1px solid; border-right: rgb(204,204,204) 1px solid; padding-top: 4px"><span style="color: rgb(0,0,255)"><?</span><span style="color: rgb(255,0,255)">xml version="1.0" encoding="UTF-8" </span><span style="color: rgb(0,0,255)">?></span><span style="color: rgb(0,0,0)"><br /></span><span style="color: rgb(0,0,255)"><!</span><span style="color: rgb(255,0,255)">DOCTYPE struts PUBLIC<br />"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"<br />"http://struts.apache.org/dtds/struts-2.0.dtd"</span><span style="color: rgb(0,0,255)">></span><span style="color: rgb(0,0,0)"><br /></span><span style="color: rgb(0,0,255)"><</span><span style="color: rgb(128,0,0)">struts</span><span style="color: rgb(0,0,255)">></span><span style="color: rgb(0,0,0)"><br /></span><span style="color: rgb(0,0,255)"><</span><span style="color: rgb(128,0,0)">package </span><span style="color: rgb(255,0,0)">name</span><span style="color: rgb(0,0,255)">="struts2"</span><span style="color: rgb(255,0,0)"> namespace</span><span style="color: rgb(0,0,255)">="/mystruts"</span><span style="color: rgb(255,0,0)"><br />extends</span><span style="color: rgb(0,0,255)">="struts-default"</span><span style="color: rgb(0,0,255)">></span><span style="color: rgb(0,0,0)"><br /></span><span style="color: rgb(0,0,255)"><</span><span style="color: rgb(128,0,0)">action </span><span style="color: rgb(255,0,0)">name</span><span style="color: rgb(0,0,255)">="sum"</span><span style="color: rgb(255,0,0)"> class</span><span style="color: rgb(0,0,255)">="action.FirstAction"</span><span style="color: rgb(0,0,255)">></span><span style="color: rgb(0,0,0)"><br /></span><span style="color: rgb(0,0,255)"><</span><span style="color: rgb(128,0,0)">result </span><span style="color: rgb(255,0,0)">name</span><span style="color: rgb(0,0,255)">="positive"</span><span style="color: rgb(0,0,255)">></span><span style="color: rgb(0,0,0)">/positive.jsp</span><span style="color: rgb(0,0,255)"></</span><span style="color: rgb(128,0,0)">result</span><span style="color: rgb(0,0,255)">></span><span style="color: rgb(0,0,0)"><br /></span><span style="color: rgb(0,0,255)"><</span><span style="color: rgb(128,0,0)">result </span><span style="color: rgb(255,0,0)">name</span><span style="color: rgb(0,0,255)">="negative"</span><span style="color: rgb(0,0,255)">></span><span style="color: rgb(0,0,0)">/negative.jsp</span><span style="color: rgb(0,0,255)"></</span><span style="color: rgb(128,0,0)">result</span><span style="color: rgb(0,0,255)">></span><span style="color: rgb(0,0,0)"><br /></span><span style="color: rgb(0,0,255)"></</span><span style="color: rgb(128,0,0)">action</span><span style="color: rgb(0,0,255)">></span><span style="color: rgb(0,0,0)"><br /></span><span style="color: rgb(0,0,255)"></</span><span style="color: rgb(128,0,0)">package</span><span style="color: rgb(0,0,255)">></span><span style="color: rgb(0,0,0)"><br /></span><span style="color: rgb(0,0,255)"></</span><span style="color: rgb(128,0,0)">struts</span><span style="color: rgb(0,0,255)">></span><span style="color: rgb(0,0,0)"><br /></span></div> <p><span style="font-family: 宋体">?/span><struts><span style="font-family: 宋体">标签中可以有多个</span><package><span style="font-family: 宋体">Q第一?/span><package><span style="font-family: 宋体">可以指定一?/span>Servlet<span style="font-family: 宋体">讉K路径Q不包括动作名)Q如“</span>/mystruts<span style="font-family: 宋体">”?/span>extends<span style="font-family: 宋体">属性承一个默认的配置文g“</span>struts-default<span style="font-family: 宋体">”Q一般都l承于它Q大家可以先不去它?/span><action><span style="font-family: 宋体">标签中的</span>name<span style="font-family: 宋体">属性表C动作名Q?/span>class<span style="font-family: 宋体">表示动作cd?/span></p> <p><result><span style="font-family: 宋体">标签?/span>name<span style="font-family: 宋体">实际上就?/span>execute<span style="font-family: 宋体">Ҏq回的字W串Q如果返回的?#8220;</span>positive<span style="font-family: 宋体">”Q就跌{?/span>positive.jsp<span style="font-family: 宋体">面Q如果是“</span>negative<span style="font-family: 宋体">”Q就跌{?/span>negative.jsp<span style="font-family: 宋体">面。在</span><struts><span style="font-family: 宋体">中可以有多个</span><package><span style="font-family: 宋体">Q在</span><package><span style="font-family: 宋体">中可以有多个</span><action><span style="font-family: 宋体">。我们可以用如下?/span>URL<span style="font-family: 宋体">来访问这个动作:</span><br /><br />http://localhost:8080/struts2/mystruts/sum.action</p> <p><span style="font-family: 宋体">?/span><span style="font-family: 宋体">Q?/span>Struts1.x<span style="font-family: 宋体">的动作一般都?/span>.do<span style="font-family: 宋体">l尾Q?/span>Struts2<span style="font-family: 宋体">是以</span>.action<span style="font-family: 宋体">l尾?/span></p> <p><strong><span style="font-family: 宋体">【第</span>5</strong><strong><span style="font-family: 宋体">步?/span></strong> <span style="font-family: 宋体">~写用户录入接口Q?/span>JSP<span style="font-family: 宋体">面Q?/span></p> <p style="text-indent: -18pt; margin-left: 39.75pt"><strong>1.<span style="font: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal"> </span></strong><strong><span style="font-family: 宋体">ȝ面(</span>sum.jsp</strong><strong><span style="font-family: 宋体">Q?/span></strong></p> <p style="margin-left: 21.75pt"><span style="font-family: 宋体">?/span>Web<span style="font-family: 宋体">根目录徏立一?/span>sum.jsp<span style="font-family: 宋体">Q代码如下:</span></p> <div style="border-bottom: rgb(204,204,204) 1px solid; border-left: rgb(204,204,204) 1px solid; padding-bottom: 4px; background-color: rgb(238,238,238); padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; border-top: rgb(204,204,204) 1px solid; border-right: rgb(204,204,204) 1px solid; padding-top: 4px"><span style="background-color: rgb(255,255,0); color: rgb(0,0,0)"><%</span><span style="background-color: rgb(245,245,245); color: rgb(0,0,0)">@ page language</span><span style="background-color: rgb(245,245,245); color: rgb(0,0,0)">=</span><span style="background-color: rgb(245,245,245); color: rgb(0,0,0)">"</span><span style="background-color: rgb(245,245,245); color: rgb(0,0,0)">java</span><span style="background-color: rgb(245,245,245); color: rgb(0,0,0)">"</span><span style="background-color: rgb(245,245,245); color: rgb(0,0,0)"> import</span><span style="background-color: rgb(245,245,245); color: rgb(0,0,0)">=</span><span style="background-color: rgb(245,245,245); color: rgb(0,0,0)">"</span><span style="background-color: rgb(245,245,245); color: rgb(0,0,0)">java.util.*</span><span style="background-color: rgb(245,245,245); color: rgb(0,0,0)">"</span><span style="background-color: rgb(245,245,245); color: rgb(0,0,0)"> pageEncoding</span><span style="background-color: rgb(245,245,245); color: rgb(0,0,0)">=</span><span style="background-color: rgb(245,245,245); color: rgb(0,0,0)">"</span><span style="background-color: rgb(245,245,245); color: rgb(0,0,0)">GBK</span><span style="background-color: rgb(245,245,245); color: rgb(0,0,0)">"</span><span style="background-color: rgb(245,245,245); color: rgb(0,0,0)"> </span><span style="background-color: rgb(255,255,0); color: rgb(0,0,0)">%></span><span style="color: rgb(0,0,0)"><br /></span><span style="background-color: rgb(255,255,0); color: rgb(0,0,0)"><%</span><span style="background-color: rgb(245,245,245); color: rgb(0,0,0)">@ taglib prefix</span><span style="background-color: rgb(245,245,245); color: rgb(0,0,0)">=</span><span style="background-color: rgb(245,245,245); color: rgb(0,0,0)">"</span><span style="background-color: rgb(245,245,245); color: rgb(0,0,0)">s</span><span style="background-color: rgb(245,245,245); color: rgb(0,0,0)">"</span><span style="background-color: rgb(245,245,245); color: rgb(0,0,0)"> uri</span><span style="background-color: rgb(245,245,245); color: rgb(0,0,0)">=</span><span style="background-color: rgb(245,245,245); color: rgb(0,0,0)">"</span><span style="background-color: rgb(245,245,245); color: rgb(0,0,0)">/struts-tags</span><span style="background-color: rgb(245,245,245); color: rgb(0,0,0)">"</span><span style="background-color: rgb(255,255,0); color: rgb(0,0,0)">%></span><span style="color: rgb(0,0,0)"><br /><br /></span><span style="color: rgb(0,0,255)"><</span><span style="color: rgb(128,0,0)">html</span><span style="color: rgb(0,0,255)">></span><span style="color: rgb(0,0,0)"><br /></span><span style="color: rgb(0,0,255)"><</span><span style="color: rgb(128,0,0)">head</span><span style="color: rgb(0,0,255)">></span><span style="color: rgb(0,0,0)"><br /></span><span style="color: rgb(0,0,255)"><</span><span style="color: rgb(128,0,0)">title</span><span style="color: rgb(0,0,255)">></span><span style="color: rgb(0,0,0)">输入操作?/span><span style="color: rgb(0,0,255)"></</span><span style="color: rgb(128,0,0)">title</span><span style="color: rgb(0,0,255)">></span><span style="color: rgb(0,0,0)"><br /></span><span style="color: rgb(0,0,255)"></</span><span style="color: rgb(128,0,0)">head</span><span style="color: rgb(0,0,255)">></span><span style="color: rgb(0,0,0)"><br /><br /></span><span style="color: rgb(0,0,255)"><</span><span style="color: rgb(128,0,0)">body</span><span style="color: rgb(0,0,255)">></span><span style="color: rgb(0,0,0)"><br />求代数和<br /></span><span style="color: rgb(0,0,255)"><</span><span style="color: rgb(128,0,0)">br</span><span style="color: rgb(0,0,255)">/></span><span style="color: rgb(0,0,0)"><br /></span><span style="color: rgb(0,0,255)"><</span><span style="color: rgb(128,0,0)">s:form </span><span style="color: rgb(255,0,0)">action</span><span style="color: rgb(0,0,255)">="mystruts/sum.action"</span><span style="color: rgb(255,0,0)"> </span><span style="color: rgb(0,0,255)">></span><span style="color: rgb(0,0,0)"> <br /></span><span style="color: rgb(0,0,255)"><</span><span style="color: rgb(128,0,0)">s:textfield </span><span style="color: rgb(255,0,0)">name</span><span style="color: rgb(0,0,255)">="operand1"</span><span style="color: rgb(255,0,0)"> label</span><span style="color: rgb(0,0,255)">=" 操作?"</span><span style="color: rgb(0,0,255)">/></span><span style="color: rgb(0,0,0)"><br /></span><span style="color: rgb(0,0,255)"><</span><span style="color: rgb(128,0,0)">s:textfield </span><span style="color: rgb(255,0,0)">name</span><span style="color: rgb(0,0,255)">="operand2"</span><span style="color: rgb(255,0,0)"> label</span><span style="color: rgb(0,0,255)">=" 操作?"</span><span style="color: rgb(255,0,0)"> </span><span style="color: rgb(0,0,255)">/></span><span style="color: rgb(0,0,0)"> <br /></span><span style="color: rgb(0,0,255)"><</span><span style="color: rgb(128,0,0)">s:submit </span><span style="color: rgb(255,0,0)">value</span><span style="color: rgb(0,0,255)">="代数?</span><span style="color: rgb(255,0,0)"> </span><span style="color: rgb(0,0,255)">/></span><span style="color: rgb(0,0,0)"> <br /></span><span style="color: rgb(0,0,255)"></</span><span style="color: rgb(128,0,0)">s:form</span><span style="color: rgb(0,0,255)">></span><span style="color: rgb(0,0,0)"><br /></span><span style="color: rgb(0,0,255)"></</span><span style="color: rgb(128,0,0)">body</span><span style="color: rgb(0,0,255)">></span><span style="color: rgb(0,0,0)"><br /></span><span style="color: rgb(0,0,255)"></</span><span style="color: rgb(128,0,0)">html</span><span style="color: rgb(0,0,255)">></span><span style="color: rgb(0,0,0)"><br /></span></div> <p><span style="font-family: 宋体">?/span>sum.jsp<span style="font-family: 宋体">中用了</span>Struts2<span style="font-family: 宋体">带的</span>tag<span style="font-family: 宋体">。在</span>Struts2<span style="font-family: 宋体">中已l将</span>Struts1.x<span style="font-family: 宋体">的好几个标签库都l一了,?/span>Struts2<span style="font-family: 宋体">中只有一个标{ֺ</span>/struts-tags<span style="font-family: 宋体">。这里面包含了所有的</span>Struts2<span style="font-family: 宋体">标签。但使用</span>Struts2<span style="font-family: 宋体">的标{֤家要注意一下。在</span><s:form><span style="font-family: 宋体">中最好都使用</span>Struts2<span style="font-family: 宋体">标签Q尽量不要用</span>HTML<span style="font-family: 宋体">或普通文本,大家可以?/span>sum.jsp<span style="font-family: 宋体">的代码改为如下的形式Q看看会出现什么效果:</span></p> <p>... ...</p> <p><span style="font-family: 宋体">求代数和</span></p> <p><br/></p> <p><s:form action="mystruts/sum.action" > </p> <p style="text-indent: 73.5pt"><span style="font-family: 宋体">操作?/span>1<span style="font-family: 宋体">Q?/span><s:textfield name="operand1" /><br/></p> <p style="text-indent: 73.5pt"><span style="font-family: 宋体">操作?/span>2<span style="font-family: 宋体">Q?/span><s:textfield name="operand1" /><br/></p> <p><s:submit value="<span style="font-family: 宋体">代数?/span>" /> </p> <p></s:form></p> <p>... ...</p> <p><span style="font-family: 宋体">提示一下,?/span><s:form><span style="font-family: 宋体">?/span>Struts2<span style="font-family: 宋体">使用</span><table><span style="font-family: 宋体">定位?/span></p> <p style="text-indent: -18pt; margin-left: 39.75pt"><strong>2.<span style="font: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal"> </span></strong><strong>positive.jsp</strong></p> <div style="border-bottom: rgb(204,204,204) 1px solid; border-left: rgb(204,204,204) 1px solid; padding-bottom: 4px; background-color: rgb(238,238,238); padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; border-top: rgb(204,204,204) 1px solid; border-right: rgb(204,204,204) 1px solid; padding-top: 4px"><span style="background-color: rgb(255,255,0); color: rgb(0,0,0)"><%</span><span style="background-color: rgb(245,245,245); color: rgb(0,0,0)">@ page language</span><span style="background-color: rgb(245,245,245); color: rgb(0,0,0)">=</span><span style="background-color: rgb(245,245,245); color: rgb(0,0,0)">"</span><span style="background-color: rgb(245,245,245); color: rgb(0,0,0)">java</span><span style="background-color: rgb(245,245,245); color: rgb(0,0,0)">"</span><span style="background-color: rgb(245,245,245); color: rgb(0,0,0)"> import</span><span style="background-color: rgb(245,245,245); color: rgb(0,0,0)">=</span><span style="background-color: rgb(245,245,245); color: rgb(0,0,0)">"</span><span style="background-color: rgb(245,245,245); color: rgb(0,0,0)">java.util.*</span><span style="background-color: rgb(245,245,245); color: rgb(0,0,0)">"</span><span style="background-color: rgb(245,245,245); color: rgb(0,0,0)"> pageEncoding</span><span style="background-color: rgb(245,245,245); color: rgb(0,0,0)">=</span><span style="background-color: rgb(245,245,245); color: rgb(0,0,0)">"</span><span style="background-color: rgb(245,245,245); color: rgb(0,0,0)">GBK</span><span style="background-color: rgb(245,245,245); color: rgb(0,0,0)">"</span><span style="background-color: rgb(255,255,0); color: rgb(0,0,0)">%></span><span style="color: rgb(0,0,0)"><br /></span><span style="background-color: rgb(255,255,0); color: rgb(0,0,0)"><%</span><span style="background-color: rgb(245,245,245); color: rgb(0,0,0)">@ taglib prefix</span><span style="background-color: rgb(245,245,245); color: rgb(0,0,0)">=</span><span style="background-color: rgb(245,245,245); color: rgb(0,0,0)">"</span><span style="background-color: rgb(245,245,245); color: rgb(0,0,0)">s</span><span style="background-color: rgb(245,245,245); color: rgb(0,0,0)">"</span><span style="background-color: rgb(245,245,245); color: rgb(0,0,0)"> uri</span><span style="background-color: rgb(245,245,245); color: rgb(0,0,0)">=</span><span style="background-color: rgb(245,245,245); color: rgb(0,0,0)">"</span><span style="background-color: rgb(245,245,245); color: rgb(0,0,0)">/struts-tags</span><span style="background-color: rgb(245,245,245); color: rgb(0,0,0)">"</span><span style="background-color: rgb(245,245,245); color: rgb(0,0,0)"> </span><span style="background-color: rgb(255,255,0); color: rgb(0,0,0)">%></span><span style="color: rgb(0,0,0)"><br /><br /></span><span style="color: rgb(0,0,255)"><</span><span style="color: rgb(128,0,0)">html</span><span style="color: rgb(0,0,255)">></span><span style="color: rgb(0,0,0)"><br /></span><span style="color: rgb(0,0,255)"><</span><span style="color: rgb(128,0,0)">head</span><span style="color: rgb(0,0,255)">></span><span style="color: rgb(0,0,0)"><br /></span><span style="color: rgb(0,0,255)"><</span><span style="color: rgb(128,0,0)">title</span><span style="color: rgb(0,0,255)">></span><span style="color: rgb(0,0,0)">昄代数?/span><span style="color: rgb(0,0,255)"></</span><span style="color: rgb(128,0,0)">title</span><span style="color: rgb(0,0,255)">></span><span style="color: rgb(0,0,0)"><br /></span><span style="color: rgb(0,0,255)"></</span><span style="color: rgb(128,0,0)">head</span><span style="color: rgb(0,0,255)">></span><span style="color: rgb(0,0,0)"><br /><br /></span><span style="color: rgb(0,0,255)"><</span><span style="color: rgb(128,0,0)">body</span><span style="color: rgb(0,0,255)">></span><span style="color: rgb(0,0,0)"> <br />代数和ؓ非负整数</span><span style="color: rgb(0,0,255)"><</span><span style="color: rgb(128,0,0)">h1</span><span style="color: rgb(0,0,255)">><</span><span style="color: rgb(128,0,0)">s:property </span><span style="color: rgb(255,0,0)">value</span><span style="color: rgb(0,0,255)">="sum"</span><span style="color: rgb(255,0,0)"> </span><span style="color: rgb(0,0,255)">/></</span><span style="color: rgb(128,0,0)">h1</span><span style="color: rgb(0,0,255)">></span><span style="color: rgb(0,0,0)"><br /></span><span style="color: rgb(0,0,255)"></</span><span style="color: rgb(128,0,0)">body</span><span style="color: rgb(0,0,255)">></span><span style="color: rgb(0,0,0)"><br /></span><span style="color: rgb(0,0,255)"></</span><span style="color: rgb(128,0,0)">html</span><span style="color: rgb(0,0,255)">></span><span style="color: rgb(0,0,0)"> <br /></span></div> <p style="text-indent: -18pt; margin-left: 39.75pt"><strong>3.<span style="font: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal"> </span></strong><strong>negative.jsp</strong></p> <div style="border-bottom: rgb(204,204,204) 1px solid; border-left: rgb(204,204,204) 1px solid; padding-bottom: 4px; background-color: rgb(238,238,238); padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; border-top: rgb(204,204,204) 1px solid; border-right: rgb(204,204,204) 1px solid; padding-top: 4px"><span style="color: rgb(0,0,0)"></span><span style="background-color: rgb(255,255,0); color: rgb(0,0,0)"><%</span><span style="background-color: rgb(245,245,245); color: rgb(0,0,0)">@ page language</span><span style="background-color: rgb(245,245,245); color: rgb(0,0,0)">=</span><span style="background-color: rgb(245,245,245); color: rgb(0,0,0)">"</span><span style="background-color: rgb(245,245,245); color: rgb(0,0,0)">java</span><span style="background-color: rgb(245,245,245); color: rgb(0,0,0)">"</span><span style="background-color: rgb(245,245,245); color: rgb(0,0,0)"> import</span><span style="background-color: rgb(245,245,245); color: rgb(0,0,0)">=</span><span style="background-color: rgb(245,245,245); color: rgb(0,0,0)">"</span><span style="background-color: rgb(245,245,245); color: rgb(0,0,0)">java.util.*</span><span style="background-color: rgb(245,245,245); color: rgb(0,0,0)">"</span><span style="background-color: rgb(245,245,245); color: rgb(0,0,0)"> pageEncoding</span><span style="background-color: rgb(245,245,245); color: rgb(0,0,0)">=</span><span style="background-color: rgb(245,245,245); color: rgb(0,0,0)">"</span><span style="background-color: rgb(245,245,245); color: rgb(0,0,0)">GBK</span><span style="background-color: rgb(245,245,245); color: rgb(0,0,0)">"</span><span style="background-color: rgb(255,255,0); color: rgb(0,0,0)">%></span><span style="color: rgb(0,0,0)"><br /></span><span style="background-color: rgb(255,255,0); color: rgb(0,0,0)"><%</span><span style="background-color: rgb(245,245,245); color: rgb(0,0,0)">@ taglib prefix</span><span style="background-color: rgb(245,245,245); color: rgb(0,0,0)">=</span><span style="background-color: rgb(245,245,245); color: rgb(0,0,0)">"</span><span style="background-color: rgb(245,245,245); color: rgb(0,0,0)">s</span><span style="background-color: rgb(245,245,245); color: rgb(0,0,0)">"</span><span style="background-color: rgb(245,245,245); color: rgb(0,0,0)"> uri</span><span style="background-color: rgb(245,245,245); color: rgb(0,0,0)">=</span><span style="background-color: rgb(245,245,245); color: rgb(0,0,0)">"</span><span style="background-color: rgb(245,245,245); color: rgb(0,0,0)">/struts-tags</span><span style="background-color: rgb(245,245,245); color: rgb(0,0,0)">"</span><span style="background-color: rgb(245,245,245); color: rgb(0,0,0)"> </span><span style="background-color: rgb(255,255,0); color: rgb(0,0,0)">%></span><span style="color: rgb(0,0,0)"><br /><br /></span><span style="color: rgb(0,0,255)"><</span><span style="color: rgb(128,0,0)">html</span><span style="color: rgb(0,0,255)">></span><span style="color: rgb(0,0,0)"><br /></span><span style="color: rgb(0,0,255)"><</span><span style="color: rgb(128,0,0)">head</span><span style="color: rgb(0,0,255)">></span><span style="color: rgb(0,0,0)"><br /></span><span style="color: rgb(0,0,255)"><</span><span style="color: rgb(128,0,0)">title</span><span style="color: rgb(0,0,255)">></span><span style="color: rgb(0,0,0)">昄代数?/span><span style="color: rgb(0,0,255)"></</span><span style="color: rgb(128,0,0)">title</span><span style="color: rgb(0,0,255)">></span><span style="color: rgb(0,0,0)"><br /></span><span style="color: rgb(0,0,255)"></</span><span style="color: rgb(128,0,0)">head</span><span style="color: rgb(0,0,255)">></span><span style="color: rgb(0,0,0)"><br /><br /></span><span style="color: rgb(0,0,255)"><</span><span style="color: rgb(128,0,0)">body</span><span style="color: rgb(0,0,255)">></span><span style="color: rgb(0,0,0)"><br />代数和ؓ负整?/span><span style="color: rgb(0,0,255)"><</span><span style="color: rgb(128,0,0)">h1</span><span style="color: rgb(0,0,255)">><</span><span style="color: rgb(128,0,0)">s:property </span><span style="color: rgb(255,0,0)">value</span><span style="color: rgb(0,0,255)">="sum"</span><span style="color: rgb(255,0,0)"> </span><span style="color: rgb(0,0,255)">/></</span><span style="color: rgb(128,0,0)">h1</span><span style="color: rgb(0,0,255)">></span><span style="color: rgb(0,0,0)"><br /><br /></span><span style="color: rgb(0,0,255)"></</span><span style="color: rgb(128,0,0)">body</span><span style="color: rgb(0,0,255)">></span><span style="color: rgb(0,0,0)"><br /></span><span style="color: rgb(0,0,255)"></</span><span style="color: rgb(128,0,0)">html</span><span style="color: rgb(0,0,255)">></span><span style="color: rgb(0,0,0)"> <br /></span></div><br /> <p><span style="font-family: 宋体">q两?/span>jsp<span style="font-family: 宋体">面的实C码基本一P只用了一?/span><s:property><span style="font-family: 宋体">标签来显C?/span>Action<span style="font-family: 宋体">cM?/span>sum<span style="font-family: 宋体">属性倹{?/span><s:property><span style="font-family: 宋体">标签是从</span>request<span style="font-family: 宋体">对象中获得了一个对象中得到?/span>sum<span style="font-family: 宋体">属性,如我们可以用如下的代码来代?/span><s:property value=”sum”/><span style="font-family: 宋体">Q?/span></p></span></div> <p> </p> <img src ="http://www.tkk7.com/kelly/aggbug/408727.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/kelly/" target="_blank">kelly</a> 2014-01-09 11:41 <a href="http://www.tkk7.com/kelly/archive/2014/01/09/408727.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ibatis+spring整合集成开?【原创?/title><link>http://www.tkk7.com/kelly/archive/2014/01/09/408726.html</link><dc:creator>kelly</dc:creator><author>kelly</author><pubDate>Thu, 09 Jan 2014 03:38:00 GMT</pubDate><guid>http://www.tkk7.com/kelly/archive/2014/01/09/408726.html</guid><wfw:comment>http://www.tkk7.com/kelly/comments/408726.html</wfw:comment><comments>http://www.tkk7.com/kelly/archive/2014/01/09/408726.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/kelly/comments/commentRss/408726.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/kelly/services/trackbacks/408726.html</trackback:ping><description><![CDATA[     摘要:   Ibatis+spring整合集成开?  前面的文档学习了ibatis的开发,q节学习ibatis和spring的整合集成开发?1.需要的开发包包括ibatis开发包和spring常用?     2.创徏POJO实体c,Area.java和Define_industry.java package com.ibatis.samp...  <a href='http://www.tkk7.com/kelly/archive/2014/01/09/408726.html'>阅读全文</a><img src ="http://www.tkk7.com/kelly/aggbug/408726.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/kelly/" target="_blank">kelly</a> 2014-01-09 11:38 <a href="http://www.tkk7.com/kelly/archive/2014/01/09/408726.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts2底层中如何将表单g入Actionhttp://www.tkk7.com/kelly/archive/2014/01/09/408725.htmlkellykellyThu, 09 Jan 2014 03:20:00 GMThttp://www.tkk7.com/kelly/archive/2014/01/09/408725.htmlhttp://www.tkk7.com/kelly/comments/408725.htmlhttp://www.tkk7.com/kelly/archive/2014/01/09/408725.html#Feedback0http://www.tkk7.com/kelly/comments/commentRss/408725.htmlhttp://www.tkk7.com/kelly/services/trackbacks/408725.html理解ActionContext ?/span>ValueStack ?/span>Stack Context
ActionContext
一?/span>Action调用都会创徏一?/span>ActionContext
调用Q?/span>ActionContext context = ActionContext.getContext()

ValueStack
?/span>OGNL框架实现
可以把它单的看作一个栈Q?/span>ListQ?/span> ?/span>

Stack ObjectQ放?/span>stack中的对象Q一般是action?/span>
Stack ContextQ?/span>mapQ:stack上下文,它包含一pd对象Q包?/span>request/session/attr/application map{?/span>
ELQ存取对象的L属性,调用对象的方法,遍历
整个对象l?#8230;

ActionContext?/span>Action上下文,可以得到request session application
ValueStack是值栈 存放表单中的?/span>
Stack Context 栈上下文 也是用来存值的



struts2?/span>OGNL上下文的概念又做了进一步扩充,?/span>struts2中,OGNL上下文通常如下所C:

|--request 



|--application 



context map---|--OgnlValueStack(root) [ user, action, OgnlUtil, ... ] 



|--session 



|--attr 



|--parameters




?/span>Struts2中,采用标准命名的上下文(Context)来处?/span>OGNL表达式。处?/span>OGNL的顶U对象是一?/span>MapQ也?/span>context mapQ,?/span>OGNL在这?/span>context中就是一个顶U对?/span>(root)。在用法上,对象的属性访问,是不需要Q何标记前~的。而其它非的对象访问,需要?/span>#标记?/span>
Struts2框架?/span>OGNL Context讄为我们的ActionContext。ƈ?/span>ValueStack作ؓOGNL的根对象。除value stack之外Q?/span>Struts2框架q把代表application?/span>session?/span>requestq些对象?/span>Map对象也放?/span>ActionContext中去。(q也是Struts2?/span>ActioncM不要直接讉KServlet API的原因,他可以通过ActionContext对象来部分代替这些(Servlet APIQ功能,以方便对Actionc进行测试!Q?/span>
Action的实例,L攑ֈvalue stack中。因?/span>Action攑֜stack中,?/span>stack?/span>root(根对?/span>)Q所以对Action中的属性的讉K可以省?/span>#标记。但是,要访?/span>ActionContext中其它对象的属性,必要带上#标记Q以便让OGNL知道Q不是从根对象,而是从其它对象中d找?/span>
那么讉KAction中的属性的代码可以这样写

<s:property value="postalCode"/>
其它ActionContext中的非根对象属性的讉K要像下面q样写:
<s:property value="#session.mySessionPropKey"/> or
<s:property value="#session['mySessionPropKey']"/> or
<s:property value="#request['myRequestPropKey']"/>
?/span>Collection的处理,内容很单?/span>
<s:select label="label" name="name" list="{'name1','name2','name3'}" value="%{'name2'}" />
q是处理List。这个代码在面上徏立一个下拉选项Q内Ҏlist中的内容Q默认值是name2.
处理map

<s:select label="label" name="name" list="#{'foo':'foovalue', 'bar':'barvalue'}" />

需要注意的是,判断一个值是否在collection中。我们要使用in或?/span>not in来处理?/span>
<s:if test="'foo' in {'foo','bar'}">
muhahaha
</s:if>
<s:else>
boo
</s:else>
另外Q可以用通配W来选择collection对象的子集?/span>
?——所有匹配选择逻辑的元?/span>
^——只提取符合选择逻辑的第一个元?/span>
$——只提取符合选择逻辑的最后一个元?/span>
person.relatives.{? #this.gender == 'male'}

?

?

值栈(ValueStack) 
Struts2?/span>OGNL上下文设|ؓStruts2中的ActionContext(内部使用的仍然是OgnlContext)Qƈ值栈设ؓOGNL的根对象?/span> 
我们知道Q?/span>OGNL上下文中的根对象可以直接讉KQ不需要用Q何特D的“标记”Q而引用上下文中的其他对象则需要?#8220;#”来标记。由于值栈是上下文中的根对象,因此可以直接讉K。那么对于值栈中的对象该如何访问呢Q?/span>Struts2提供了一个特D的OGNLPropertyAccessorQ它可以自动查找栈内的所有对?/span>(从栈到栈底)Q直接找C个具有你所查找的属性的对象。也是_对于值栈中的M对象都可以直接访问,而不需要?#8220;#”?/span> 
假设值栈中有两个对象Q?/span>student?/span>employeeQ两个对象都?/span>name属性,student有学号属?/span>numberQ?/span>employee有薪水属?/span>salary?/span>employee先入栈,student后入栈,位于栈顶Q那么对于表辑ּname,讉K的就?/span>student?/span>name属性,因ؓstudent对象位于栈顶Q表辑ּsalaryQ访问的是employee?/span>salary属性。正如你所见,讉K值栈中的对象属性或ҎQ无L明对象,也不?#8220;#”Q就好像值栈中的对象都是OGNL上下文中的根对象一栗这是Struts2?/span>OGNL基础上做出的改进?/span>

 值栈中的Action实例 
Struts2框架L?/span>Action实例攑֜栈顶。因?/span>Action在值栈中,而值栈又是OGNL中的根,所以引?/span>Action的属性可以省?#8220;#”标记Q这也是Z么我们在l果面中可以直接访?/span>Action的属性的原因?/span>

 Struts2中的命名对象 
Struts2q提供了一些命名对象,q些对象没有保存在值栈中,而是保存?/span>ActionContext中,因此讉Kq些对象需要?#8220;#”标记。这些命名对象都?/span>Mapcd?/span> 

parameters 
用于讉Kh参数。如Q?/span>#parameters['id']?/span>#parameters.idQ相当于调用?/span>HttpServletRequest对象?/span>getParameter()Ҏ?/span> 
注意Q?/span>parameters本质上是一个?/span>HttpServletRequest对象中的h参数构造的Map对象Q一量对象被创徏(在调?/span>Action实例之前已l创建好?/span>)Q它?/span>HttpServletRequest对象没有了M关系?/span> 

request 
用于讉Kh属性。如Q?/span>#request['user']?/span>#request.userQ相当于调用?/span>HttpServletRequest对象?/span>getAttribute()Ҏ?/span> 

session 
用于讉Ksession属性。如Q?/span>#session['user']?/span>#session.userQ相当于调用?/span>HttpSession对象?/span>getAttribute()Ҏ?/span> 

application 
用于讉Kapplication属性。如Q?/span>#application['user']?/span>#application.userQ相当于调用?/span>ServletContext?/span>getAttribute()Ҏ?/span> 

attr 
如果PageContext可用Q则讉KPageContextQ否则依ơ搜?/span>request?/span>session?/span>application对象?br />

假设你的ActioncM有变量String password; 要想获取面中传q来的passwordQ必Mؓpassword讄get 和set Ҏ。当你的面q入ActionӞActionContextQAction上下文)通过setҎ获取password的值ƈ压入值栈栈顶Q同时request也获取到password的|同时也如堆栈Qsession{对象的g被压入堆栈,ActionContext中的值在面中可以直接用<s:porperty value="password">取值显C,而request中存储的password通过<s:porperty value="#request.password">或?{password}取倹{即struts是通过一个值栈来存储所有对象和ActionContext中的值得。ActionContext为栈对象,也称跟对象,ActionContext的值可以直接用变量名取Q而其他的变量需要用#变量名取倹{?/pre>




kelly 2014-01-09 11:20 发表评论
]]>OGNL表达式struts2标签?Q?Q??/title><link>http://www.tkk7.com/kelly/archive/2014/01/08/408679.html</link><dc:creator>kelly</dc:creator><author>kelly</author><pubDate>Wed, 08 Jan 2014 05:58:00 GMT</pubDate><guid>http://www.tkk7.com/kelly/archive/2014/01/08/408679.html</guid><wfw:comment>http://www.tkk7.com/kelly/comments/408679.html</wfw:comment><comments>http://www.tkk7.com/kelly/archive/2014/01/08/408679.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/kelly/comments/commentRss/408679.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/kelly/services/trackbacks/408679.html</trackback:ping><description><![CDATA[<ol style="widows: 2; text-transform: none; text-indent: 0px; letter-spacing: normal; font: 13px/19px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; orphans: 2; color: rgb(75,75,75); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><li><span>一、什么是OGNLQ有什么特点?  <wbr> <wbr></span></li><li><span> <wbr> <wbr></span></li><li><span>OGNLQObject-Graph <wbr>Navigation <wbr>LanguageQ,大概可以理解为:对象囑Ş化导航语a。是一U可以方便地操作对象属性的开源表辑ּ语言。OGNL有如下特点: <wbr><span id="mi4g2qs" class="Apple-converted-space"> </span> <wbr> <wbr></span></li><li><span> <wbr> <wbr></span></li><li><span><font color="#c00000">1</font></span><span>、支持对象方法调用,形式如:objName.methodName()Q? <wbr> <wbr></span></li><li><span> <wbr> <wbr></span></li><li><span><font color="#c00000">2</font></span><span>、支持类静态的Ҏ调用和D问,表达式的格式为@[cd名(包括包\Q]@[Ҏ?nbsp;<wbr>| <wbr> <wbr>值名]Q例如:  <wbr> <wbr></span></li><li><span> <wbr> <wbr></span></li><li><span><font color="#646464">@java</font></span><span>.lang.String</span><span><font color="#646464">@format</font></span><span>(</span><span><font color="#0000ff">'foo <wbr>%s'</font></span><span>, <wbr></span><span><font color="#0000ff">'bar'</font></span><span>)?/span><span><font color="#646464">@tutorial</font></span><span>.MyConstant</span><span><font color="#646464">@APP_NAME</font></span><span>Q? <wbr> <wbr></span></li><li><span> <wbr> <wbr></span></li><li><span><font color="#c00000">3</font></span><span>、支持赋值操作和表达式串联,例如Q? <wbr> <wbr></span></li><li><span> <wbr> <wbr></span></li><li><span>price=</span><span><font color="#c00000">100</font></span><span>, <wbr>discount=</span><span><font color="#c00000">0.8</font></span><span>, <wbr>calculatePrice()Q这个表辑ּ会返?/span><span><font color="#c00000">80</font></span><span>Q? <wbr> <wbr></span></li><li><span> <wbr> <wbr></span></li><li><span><font color="#c00000">4</font></span><span>、访问OGNL上下文(OGNL <wbr>contextQ和ActionContextQ? <wbr> <wbr></span></li><li><span> <wbr> <wbr></span></li><li><span><font color="#c00000">5</font></span><span>、操作集合对象? <wbr> <wbr></span></li><li><span> <wbr> <wbr></span></li><li><span> <wbr><span id="e64wkq4" class="Apple-converted-space"> </span> <wbr> <wbr></span></li><li><span> <wbr> <wbr></span></li><li><span>二、用OGNL表达? <wbr> <wbr></span></li><li><span> <wbr> <wbr></span></li><li><span>OGNL要结合struts标签来用。由于比较灵z,也容易把人给弄晕Q尤其是“%”?#8220;#”?#8220;$”q三个符L使用。由?q泛应用于EL中,q里重点??W号的用法? <wbr> <wbr></span></li><li><span> <wbr> <wbr></span></li><li><span><font color="#c00000">1</font></span><span>?#8220;#”W号有三U用途:  <wbr> <wbr></span></li><li><span> <wbr> <wbr></span></li><li><span>(</span><span><font color="#c00000">1</font></span><span>)、访问非根对象(struts中值栈为根对象Q如OGNL上下文和Action上下文,#相当于ActionContext.getContext()Q下表有几个ActionContext中有用的属性:  <wbr> <wbr></span></li><li><span> <wbr> <wbr></span></li><li><span> <wbr><span id="ges2u4a" class="Apple-converted-space"> </span> <wbr> <wbr></span></li><li><span> <wbr> <wbr></span></li><li><span>名称  <wbr> <wbr></span></li><li><span> <wbr>作用  <wbr> <wbr></span></li><li><span> <wbr>例子  <wbr> <wbr></span></li><li><span> <wbr><span id="oouiw44" class="Apple-converted-space"> </span> <wbr> <wbr></span></li><li><span>parameters  <wbr> <wbr></span></li><li><span> <wbr>包含当前HTTPh参数的Map  <wbr> <wbr></span></li><li><span> <wbr>#parameters.id[</span><span><font color="#c00000">0</font></span><span>]作用相当于request.getParameter(</span><span><font color="#0000ff">"id"</font></span><span>) <wbr><span id="44gw4si" class="Apple-converted-space"> </span> <wbr> <wbr></span></li><li><span> <wbr><span id="ukmwsi4" class="Apple-converted-space"> </span> <wbr> <wbr></span></li><li><span>request  <wbr> <wbr></span></li><li><span> <wbr>包含当前HttpServletRequest的属性(attribute)的Map  <wbr> <wbr></span></li><li><span> <wbr>#request.userName相当于request.getAttribute(</span><span><font color="#0000ff">"userName"</font></span><span>) <wbr><span id="4224mqi" class="Apple-converted-space"> </span> <wbr> <wbr></span></li><li><span> <wbr><span id="ecwycac" class="Apple-converted-space"> </span> <wbr> <wbr></span></li><li><span>session  <wbr> <wbr></span></li><li><span> <wbr>包含当前HttpSession的属性(attributeQ的Map  <wbr> <wbr></span></li><li><span> <wbr>#session.userName相当于session.getAttribute(</span><span><font color="#0000ff">"userName"</font></span><span>) <wbr><span id="c24qyu4" class="Apple-converted-space"> </span> <wbr> <wbr></span></li><li><span> <wbr><span id="kgkk24i" class="Apple-converted-space"> </span> <wbr> <wbr></span></li><li><span>application  <wbr> <wbr></span></li><li><span> <wbr>包含当前应用的ServletContext的属性(attributeQ的Map  <wbr> <wbr></span></li><li><span> <wbr>#application.userName相当于application.getAttribute(</span><span><font color="#0000ff">"userName"</font></span><span>) <wbr><span id="oeqsc2m" class="Apple-converted-space"> </span> <wbr> <wbr></span></li><li><span> <wbr><span id="gw42y44" class="Apple-converted-space"> </span> <wbr> <wbr></span></li><li><span> <wbr> <wbr></span></li><li><span>注:attr <wbr>用于按request <wbr>> <wbr>session <wbr>> <wbr>application序讉K其属性(attributeQ,#attr.userName相当于按序在以上三个范_scopeQ内duserName属性,直到扑ֈ为止。用于过滤和投媄Qprojecting)集合Q如books.{?#</span><span><strong><font color="#7f0055">this</font></strong></span><span>.price<</span><span><font color="#c00000">100</font></span><span>}Q构造MapQ如#{</span><span><font color="#0000ff">'foo1'</font></span><span>:</span><span><font color="#0000ff">'bar1'</font></span><span>, <wbr></span><span><font color="#0000ff">'foo2'</font></span><span>:</span><span><font color="#0000ff">'bar2'</font></span><span>}? <wbr> <wbr></span></li><li><span> <wbr> <wbr></span></li><li><span> <wbr><span id="y2g4qak" class="Apple-converted-space"> </span> <wbr> <wbr></span></li><li><span> <wbr> <wbr></span></li><li><span>(</span><span><font color="#c00000">2</font></span><span>)、用于过滤和投媄Qprojecting)集合Q如: <wbr>books.{?#</span><span><strong><font color="#7f0055">this</font></strong></span><span>.price></span><span><font color="#c00000">35</font></span><span>} <wbr> <wbr><span id="2wwasqy" class="Apple-converted-space"> </span> <wbr> <wbr></span></li><li><span> <wbr> <wbr></span></li><li><span>books.{?#</span><span><strong><font color="#7f0055">this</font></strong></span><span>.price></span><span><font color="#c00000">35</font></span><span>}  <wbr> <wbr></span></li><li><span> <wbr> <wbr></span></li><li><span>(</span><span><font color="#c00000">3</font></span><span>)、构造MapQ如: <wbr>#{</span><span><font color="#0000ff">'foo1'</font></span><span>:</span><span><font color="#0000ff">'bar1'</font></span><span>, <wbr></span><span><font color="#0000ff">'foo2'</font></span><span>:</span><span><font color="#0000ff">'bar2'</font></span><span>} <wbr> <wbr><span id="2426aiw" class="Apple-converted-space"> </span> <wbr> <wbr></span></li><li><span> <wbr> <wbr></span></li><li><span>#{</span><span><font color="#0000ff">'foo1'</font></span><span>:</span><span><font color="#0000ff">'bar1'</font></span><span>, <wbr></span><span><font color="#0000ff">'foo2'</font></span><span>:</span><span><font color="#0000ff">'bar2'</font></span><span>}q种方式常用在给radio或select、checkbox{标{赋g。如果要在页面中取一个map的值可以这样写Q?nbsp;<wbr><span id="2m44sww" class="Apple-converted-space"> </span> <wbr> <wbr></span></li><li><span> <wbr> <wbr></span></li><li><span><s:property <wbr>value=</span><span><font color="#0000ff">"#myMap['foo1']"</font></span><span>/> <wbr> <wbr><span id="ukc24ca" class="Apple-converted-space"> </span> <wbr> <wbr></span></li><li><span> <wbr> <wbr></span></li><li><span><s:property <wbr>value=</span><span><font color="#0000ff">"#myMap['foo1']"</font></span><span>/>  <wbr> <wbr></span></li><li><span> <wbr> <wbr></span></li><li><span><font color="#c00000">2</font></span><span>?#8220;%”W号的用途是在标{属性D理解为字W串cdӞ告诉执行环境%{}里的是OGNL表达式? <wbr> <wbr></span></li><li><span> <wbr> <wbr></span></li><li><span>q是一开始最让我不能理解的符P原因是一些相兌源在表述时不太准备,l过一ȝ苦的探烦Q终于明白了它的用途。实际上是让被理解为字W串的表辑ּQ被真正当成ognl来执行。很有点cMjavascript里面的eval_r()功能Q例?nbsp;<wbr>Q? <wbr> <wbr></span></li><li><span> <wbr> <wbr></span></li><li><span>var <wbr>oDiv <wbr>= <wbr>eval_r(</span><span><font color="#0000ff">"document.all.div"</font></span><span>+index) <wbr> <wbr><span id="u4uqck4" class="Apple-converted-space"> </span> <wbr> <wbr></span></li><li><span> <wbr> <wbr></span></li><li><span>var <wbr>oDiv <wbr>= <wbr>eval_r(</span><span><font color="#0000ff">"document.all.div"</font></span><span>+index)  <wbr> <wbr></span></li><li><span> <wbr> <wbr></span></li><li><span>当index变量?/span><span><font color="#c00000">1</font></span><span>Ӟ语句׃被当作var <wbr>oDiv <wbr>= <wbr>document.all.div1 <wbr> <wbr>var <wbr>oDiv <wbr>= <wbr>document.all.div1来执行?{}是赯个作用。D例: <wbr><span id="e4s4kiy" class="Apple-converted-space"> </span> <wbr> <wbr></span></li><li><span> <wbr> <wbr></span></li><li><span><s:set <wbr>name=</span><span><font color="#0000ff">"myMap"</font></span><span> <wbr>value=</span><span><font color="#0000ff">"#{'key1':'value1','key2':'value2'}"</font></span><span>/> <wbr> <wbr> <wbr><span id="iqwy4mk" class="Apple-converted-space"> </span> <wbr> <wbr></span></li><li><span> <wbr> <wbr></span></li><li><span><s:property <wbr>value=</span><span><font color="#0000ff">"#myMap['key1']"</font></span><span>/> <wbr> <wbr> <wbr><span id="24wce4g" class="Apple-converted-space"> </span> <wbr> <wbr></span></li><li><span> <wbr> <wbr></span></li><li><span><s:url <wbr>value=</span><span><font color="#0000ff">"#myMap['key1']"</font></span><span> <wbr>/> <wbr><span id="mcw624a" class="Apple-converted-space"> </span> <wbr> <wbr></span></li><li><span> <wbr> <wbr></span></li><li><span><s:set <wbr>name=</span><span><font color="#0000ff">"myMap"</font></span><span> <wbr>value=</span><span><font color="#0000ff">"#{'key1':'value1','key2':'value2'}"</font></span><span>/>  <wbr> <wbr></span></li><li><span> <wbr> <wbr></span></li><li><span><s:property <wbr>value=</span><span><font color="#0000ff">"#myMap['key1']"</font></span><span>/>  <wbr> <wbr></span></li><li><span> <wbr> <wbr></span></li><li><span><s:url <wbr>value=</span><span><font color="#0000ff">"#myMap['key1']"</font></span><span>/>  <wbr> <wbr></span></li><li><span> <wbr> <wbr></span></li><li><span>上面的代码第</span><span><font color="#c00000">2</font></span><span>行会在页面上输出“value1”Q而第</span><span><font color="#c00000">3</font></span><span>行则会输?/span><span><font color="#0000ff">"#myMap['key1']"</font></span><span>q么一个字W串?nbsp;<wbr>如果第</span><span><font color="#c00000">3</font></span><span>行改写成q样Q?nbsp;<wbr><span id="c4k4gcc" class="Apple-converted-space"> </span> <wbr> <wbr></span></li><li><span> <wbr> <wbr></span></li><li><span><s:url <wbr>value=</span><span><font color="#0000ff">"%{#myMap['key1']}"</font></span><span>/> <wbr> <wbr><span id="g24esqo" class="Apple-converted-space"> </span> <wbr> <wbr></span></li><li><span> <wbr> <wbr></span></li><li><span><s:url <wbr>value=</span><span><font color="#0000ff">"%{#myMap['key1']}"</font></span><span>/>  <wbr> <wbr></span></li><li><span> <wbr> <wbr></span></li><li><span>则输Zؓ“value1”? <wbr> <wbr></span></li><li><span> <wbr> <wbr></span></li><li><span> <wbr><span id="usm2o44" class="Apple-converted-space"> </span> <wbr> <wbr></span></li><li><span> <wbr> <wbr></span></li><li><span> <wbr><span id="iqa2syw" class="Apple-converted-space"> </span> <wbr> <wbr></span></li><li><span> <wbr> <wbr></span></li><li><span>q说明struts2里不同的标签对ognl的表辑ּ的理解是不一L。如果当有的标签“看不?#8221;cM“#myMap[</span><span><font color="#0000ff">'key1'</font></span><span>]”的语句时Q就要用%{}来把q括q去Q?#8220;译”一下了? <wbr> <wbr></span></li><li><span> <wbr> <wbr></span></li><li><span><font color="#c00000">3</font></span><span>?#8220;$”有两U用? <wbr> <wbr></span></li><li><span> <wbr> <wbr></span></li><li><span>(</span><span><font color="#c00000">1</font></span><span>)、在国际化资源文件中Q引用OGNL表达式? <wbr> <wbr></span></li><li><span> <wbr> <wbr></span></li><li><span>(</span><span><font color="#c00000">2</font></span><span>)、在Struts <wbr></span><span><font color="#c00000">2</font></span><span>配置文g中,引用OGNL表达式: <wbr><span id="qwacec4" class="Apple-converted-space"> </span> <wbr> <wbr></span></li><li><span> <wbr> <wbr></span></li><li><span><action <wbr>name=</span><span><font color="#0000ff">"saveUser"</font></span><span> <wbr></span><span><strong><font color="#7f0055">class</font></strong></span><span>=</span><span><font color="#0000ff">"userAction"</font></span><span> <wbr>method=</span><span><font color="#0000ff">"save"</font></span><span>>  <wbr> <wbr></span></li><li><span> <wbr> <wbr></span></li><li><span><result <wbr>type=</span><span><font color="#0000ff">"redirect"</font></span><span>>listUser.action?msg=${msg}</result>  <wbr> <wbr></span></li><li><span> <wbr> <wbr></span></li><li><span></action>  <wbr> <wbr></span></li><li><span> <wbr> <wbr></span></li><li><span><action <wbr>name=</span><span><font color="#0000ff">"saveUser"</font></span><span> <wbr></span><span><strong><font color="#7f0055">class</font></strong></span><span>=</span><span><font color="#0000ff">"userAction"</font></span><span> <wbr>method=</span><span><font color="#0000ff">"save"</font></span><span>> <wbr> <wbr> <wbr> <wbr><span id="goyk4qo" class="Apple-converted-space"> </span> <wbr> <wbr></span></li><li><span> <wbr> <wbr></span></li><li><span><result <wbr>type=</span><span><font color="#0000ff">"redirect"</font></span><span>>listUser.action?msg=${msg}</result>  <wbr> <wbr></span></li><li><span> <wbr> <wbr></span></li><li><span></action> <wbr><span id="mk2imu4" class="Apple-converted-space"> </span><br /></span></li></ol><br class="Apple-interchange-newline" /> <img src ="http://www.tkk7.com/kelly/aggbug/408679.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/kelly/" target="_blank">kelly</a> 2014-01-08 13:58 <a href="http://www.tkk7.com/kelly/archive/2014/01/08/408679.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ibatis介绍与用?[原创]http://www.tkk7.com/kelly/archive/2014/01/07/408640.htmlkellykellyTue, 07 Jan 2014 07:50:00 GMThttp://www.tkk7.com/kelly/archive/2014/01/07/408640.htmlhttp://www.tkk7.com/kelly/comments/408640.htmlhttp://www.tkk7.com/kelly/archive/2014/01/07/408640.html#Feedback0http://www.tkk7.com/kelly/comments/commentRss/408640.htmlhttp://www.tkk7.com/kelly/services/trackbacks/408640.html阅读全文

kelly 2014-01-07 15:50 发表评论
]]>
深入学习Struts2-?/title><link>http://www.tkk7.com/kelly/archive/2014/01/07/408638.html</link><dc:creator>kelly</dc:creator><author>kelly</author><pubDate>Tue, 07 Jan 2014 07:39:00 GMT</pubDate><guid>http://www.tkk7.com/kelly/archive/2014/01/07/408638.html</guid><wfw:comment>http://www.tkk7.com/kelly/comments/408638.html</wfw:comment><comments>http://www.tkk7.com/kelly/archive/2014/01/07/408638.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/kelly/comments/commentRss/408638.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/kelly/services/trackbacks/408638.html</trackback:ping><description><![CDATA[     摘要: 深入Struts2的配|文?本部分主要介lstruts.xml的常用配|?1.1.    包配|: Struts2框架中核心组件就是Action、拦截器{,Struts2框架使用包来理Action和拦截器{。每个包是多个Action、多个拦截器、多个拦截器引用的集合?在struts.xml文g中package元素用于定义包配|,每个pack...  <a href='http://www.tkk7.com/kelly/archive/2014/01/07/408638.html'>阅读全文</a><img src ="http://www.tkk7.com/kelly/aggbug/408638.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/kelly/" target="_blank">kelly</a> 2014-01-07 15:39 <a href="http://www.tkk7.com/kelly/archive/2014/01/07/408638.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts1入门实例Q简单登录)-?/title><link>http://www.tkk7.com/kelly/archive/2013/12/27/408117.html</link><dc:creator>kelly</dc:creator><author>kelly</author><pubDate>Fri, 27 Dec 2013 06:56:00 GMT</pubDate><guid>http://www.tkk7.com/kelly/archive/2013/12/27/408117.html</guid><wfw:comment>http://www.tkk7.com/kelly/comments/408117.html</wfw:comment><comments>http://www.tkk7.com/kelly/archive/2013/12/27/408117.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/kelly/comments/commentRss/408117.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/kelly/services/trackbacks/408117.html</trackback:ping><description><![CDATA[     摘要: 首页要在web.xml中添加相应的struts配置Q? <servlet> <servlet-name>action</servlet-name> <servlet-class> org.apache.struts.action.ActionServlet </servle...  <a href='http://www.tkk7.com/kelly/archive/2013/12/27/408117.html'>阅读全文</a><img src ="http://www.tkk7.com/kelly/aggbug/408117.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/kelly/" target="_blank">kelly</a> 2013-12-27 14:56 <a href="http://www.tkk7.com/kelly/archive/2013/12/27/408117.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ibatis+spring WEB-INF\SqlMapConfig.xml (pȝ找不到指定的路径? -?/title><link>http://www.tkk7.com/kelly/archive/2013/12/05/407249.html</link><dc:creator>kelly</dc:creator><author>kelly</author><pubDate>Thu, 05 Dec 2013 05:39:00 GMT</pubDate><guid>http://www.tkk7.com/kelly/archive/2013/12/05/407249.html</guid><wfw:comment>http://www.tkk7.com/kelly/comments/407249.html</wfw:comment><comments>http://www.tkk7.com/kelly/archive/2013/12/05/407249.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/kelly/comments/commentRss/407249.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/kelly/services/trackbacks/407249.html</trackback:ping><description><![CDATA[改变applicationContext.xml?br /><p><bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"> <br /><span style="white-space: pre;"></span><property name="configLocation"> <br /><span style="white-space: pre;"></span><value>classpath:SqlMapConfig.xml</value> <br /><span style="white-space: pre;"></span></property> <br /><span style="white-space: pre;"></span><property name="dataSource"> <br /><span style="white-space: pre;"></span><ref bean="dataSource"/> <br /><span style="white-space: pre;"></span></property> <br />< /bean><br /></p><p>中的</p><p><span style="white-space: pre;"></span><value>classpath:SqlMapConfig.xml</value> <br />然后把SqlMapConfig.xml攑ֈsrc下面 </p> <img src ="http://www.tkk7.com/kelly/aggbug/407249.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/kelly/" target="_blank">kelly</a> 2013-12-05 13:39 <a href="http://www.tkk7.com/kelly/archive/2013/12/05/407249.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>лǵվܻԴȤ</p> <a href="http://www.tkk7.com/" title="亚洲av成人片在线观看">亚洲av成人片在线观看</a> <div class="friend-links"> </div> </div> </footer> վ֩ģ壺 <a href="http://guoyit.com" target="_blank">޹ɫƵ</a>| <a href="http://vod8090.com" target="_blank">һ߹ۿƵ</a>| <a href="http://njchxf.com" target="_blank">av뾫Ʒۺ</a>| <a href="http://www52a.com" target="_blank">AVһ</a>| <a href="http://liulaogendawutai.com" target="_blank">ĻӰԺ</a>| <a href="http://hidiaoyan.com" target="_blank">91ƷƵ</a>| <a href="http://51ruilon.com" target="_blank">H⶯߹ۿ鶹</a>| <a href="http://lidajc.com" target="_blank">͵Ƶ߹ۿ99</a>| <a href="http://556228.com" target="_blank">һƵ</a>| <a href="http://bomilon.com" target="_blank">޵Ӱһ</a>| <a href="http://wxyz2.com" target="_blank">Ļһþ</a>| <a href="http://wulegu.com" target="_blank">ѿһ</a>| <a href="http://ri9999.com" target="_blank">պŷһѹۿ</a>| <a href="http://yytengsheng.com" target="_blank">þþƷѹۿ</a>| <a href="http://0515bh.com" target="_blank">ĻѹۿƵ</a>| <a href="http://sdzsx.com" target="_blank">ѾƷԲ߹ۿ </a>| <a href="http://kanzhelu23.com" target="_blank">ŷAVר</a>| <a href="http://henhenluc.com" target="_blank">޾߹ۿ</a>| <a href="http://6132423.com" target="_blank">Ӱվ</a>| <a href="http://qihongxia.com" target="_blank">߹ۿ</a>| <a href="http://pj9xx6.com" target="_blank">޾ƷþëƬ</a>| <a href="http://yw323.com" target="_blank">޾ƷA߹ۿ</a>| <a href="http://kingleadsw.com" target="_blank">߹ۿ</a>| <a href="http://thinkchating.com" target="_blank">ֻˬִַ̼ </a>| <a href="http://www66susu.com" target="_blank">޾ƷŮþ777777</a>| <a href="http://msjdyd.com" target="_blank">ۺ</a>| <a href="http://df6618.com" target="_blank">Ʒxxxxˮ޹Ʒþһ </a>| <a href="http://010youhua.com" target="_blank">ˮwww</a>| <a href="http://jinlaifubuxiugang.com" target="_blank">ƷAVһ</a>| <a href="http://youweidianqi.com" target="_blank">˾þô߽AV</a>| <a href="http://ygpx6.com" target="_blank">Ʒһ鶹</a>| <a href="http://sjmthanks.com" target="_blank">˳ɵӰ߲</a>| <a href="http://888-28.com" target="_blank">޾Ʒҹþþ</a>| <a href="http://wwwst6.com" target="_blank">ŷղҳ </a>| <a href="http://zqsplc.com" target="_blank">òƵ</a>| <a href="http://jiggybaby.com" target="_blank">97ѹۿƵ߹ۿ</a>| <a href="http://633223.com" target="_blank">91鶹˳ѹۿ</a>| <a href="http://hmjx-tape.com" target="_blank">AVƬ</a>| <a href="http://yzxjk.com" target="_blank">߹ۿѲ </a>| <a href="http://9981tv.com" target="_blank">޾Ʒ</a>| <a href="http://173ba.com" target="_blank">պƵ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>