java Struts2理解
今天去面试是培训之后第一次面试上来那个项目经理就开始发飙了问我Struts中为什么去掉ActionForm了,我回答说因为ActionForm中处理参数不是很好有的需要自...
今天去面试 是培训之后第一次面试 上来那个项目经理就开始发飙了 问我Struts中为什么去掉ActionForm了,我回答说 因为ActionForm中处理参数不是很好 有的需要自己转换才行 所以就用struts2取代了。 请问应该如何深刻理解这个概念呢?还有 spring如何声明事务处理的呢?
展开
展开全部
因为struts2的Action就具备了struts1中ActionForm的功能;ActionForm的功能无非三个:初始化数据;封装数据;验证数据格式;对于struts2,都有相应的解决方式:通过Action实现Preparable接口,实现对数据初始化;Action继承ActionSupport,重写validate(),显示数据的验证,在Action中配置属性以及对应的getter和setter方法,实现数据封装。而且类型转换方面,struts2通过OGNL实现的效果要比ActionForm更灵活。
spring的声明事务依赖AOP;以代理的方式实现事务;通过AOP和tx命名空间组合成一个事务切面,声明式的方式注入给某个需要的业务对象;可以很方便的为某个业务对象添加或删除事务。
spring的声明事务依赖AOP;以代理的方式实现事务;通过AOP和tx命名空间组合成一个事务切面,声明式的方式注入给某个需要的业务对象;可以很方便的为某个业务对象添加或删除事务。
展开全部
第一步,安装tomcat6.jdk1.6.(这是我的环境,应该不是必须的)
第二步,index.html,作用是跳转到helloworld.action,代码如下:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<META HTTP-EQUIV="Refresh" CONTENT="0;URL=example/HelloWorld.action">
</head>
<body>
<p>Loading ...</p>
</body>
</html>
第三步,example目录下的HelloWorld.jsp,代码如下:
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title><s:text name="HelloWorld.message"/></title>
</head>
<body>
<h2><s:property value="message"/></h2>
<h3>Languages</h3>
<ul>
<li>
<s:url id="url" action="HelloWorld">
<s:param name="request_locale">en</s:param>
</s:url>
<s:a href="%">English</s:a>
</li>
<li>
<s:url id="url" action="HelloWorld">
<s:param name="request_locale">es</s:param>
</s:url>
<s:a href="%">Espanol</s:a>
</li>
</ul>
</body>
</html>
第四步,example包下的java原文件HelloWorld.java,代码如下:
package example;
/**
* <code>Set welcome message.</code>
*/
public class HelloWorld extends ExampleSupport {
public String execute() throws Exception {
setMessage(getText(MESSAGE));
return SUCCESS;
}
/**
* Provide default valuie for Message property.
*/
public static final String MESSAGE = "HelloWorld.message";
/**
* Field for Message property.
*/
private String message;
/**
* Return Message property.
*
* @return Message property
*/
public String getMessage() {
return message;
}
/**
* Set Message property.
*
* @param message Text to display on HelloWorld page.
*/
public void setMessage(String message) {
this.message = message;
}
}
第五步,example包下的java文件ExampleSupport.java.代码如下:
package example;
import com.opensymphony.xwork2.ActionSupport;
/**
* Base Action class for the Tutorial package.
*/
public class ExampleSupport extends ActionSupport {
}
第六步,WEB-INF下的web.xml,代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_9" version="2.4" xmlns="" xmlns:xsi="" xsi:schemaLocation=" ">
<display-name>Struts Blank</display-name>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>
第七步,WEB-INF/classes目录下的struts.xml,代码如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"">
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="false" />
<include file="example.xml"/>
<!-- Add packages here -->
</struts>
第八步,WEB-INF/classes目录下的example.xml,代码如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"">
<struts>
<package name="example" namespace="/example" extends="struts-default">
<action name="HelloWorld" class="example.HelloWorld">
<result>/example/HelloWorld.jsp</result>
</action>
<!-- Add actions here -->
</package>
</struts>
第九步,WEB-INF/classes/example目录下的package.properties,代码就一句:
HelloWorld.message= Struts is up and running ...
第十步,WEB-INF/classes/example目录下的package_es.properties,西班牙问的,代码也就一句:
HelloWorld.message= �truts est?bien! ...
结束.好累.给分.多给.谢谢
第二步,index.html,作用是跳转到helloworld.action,代码如下:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<META HTTP-EQUIV="Refresh" CONTENT="0;URL=example/HelloWorld.action">
</head>
<body>
<p>Loading ...</p>
</body>
</html>
第三步,example目录下的HelloWorld.jsp,代码如下:
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title><s:text name="HelloWorld.message"/></title>
</head>
<body>
<h2><s:property value="message"/></h2>
<h3>Languages</h3>
<ul>
<li>
<s:url id="url" action="HelloWorld">
<s:param name="request_locale">en</s:param>
</s:url>
<s:a href="%">English</s:a>
</li>
<li>
<s:url id="url" action="HelloWorld">
<s:param name="request_locale">es</s:param>
</s:url>
<s:a href="%">Espanol</s:a>
</li>
</ul>
</body>
</html>
第四步,example包下的java原文件HelloWorld.java,代码如下:
package example;
/**
* <code>Set welcome message.</code>
*/
public class HelloWorld extends ExampleSupport {
public String execute() throws Exception {
setMessage(getText(MESSAGE));
return SUCCESS;
}
/**
* Provide default valuie for Message property.
*/
public static final String MESSAGE = "HelloWorld.message";
/**
* Field for Message property.
*/
private String message;
/**
* Return Message property.
*
* @return Message property
*/
public String getMessage() {
return message;
}
/**
* Set Message property.
*
* @param message Text to display on HelloWorld page.
*/
public void setMessage(String message) {
this.message = message;
}
}
第五步,example包下的java文件ExampleSupport.java.代码如下:
package example;
import com.opensymphony.xwork2.ActionSupport;
/**
* Base Action class for the Tutorial package.
*/
public class ExampleSupport extends ActionSupport {
}
第六步,WEB-INF下的web.xml,代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_9" version="2.4" xmlns="" xmlns:xsi="" xsi:schemaLocation=" ">
<display-name>Struts Blank</display-name>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>
第七步,WEB-INF/classes目录下的struts.xml,代码如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"">
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="false" />
<include file="example.xml"/>
<!-- Add packages here -->
</struts>
第八步,WEB-INF/classes目录下的example.xml,代码如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"">
<struts>
<package name="example" namespace="/example" extends="struts-default">
<action name="HelloWorld" class="example.HelloWorld">
<result>/example/HelloWorld.jsp</result>
</action>
<!-- Add actions here -->
</package>
</struts>
第九步,WEB-INF/classes/example目录下的package.properties,代码就一句:
HelloWorld.message= Struts is up and running ...
第十步,WEB-INF/classes/example目录下的package_es.properties,西班牙问的,代码也就一句:
HelloWorld.message= �truts est?bien! ...
结束.好累.给分.多给.谢谢
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
之前的楼上已经说了,spring对事物处理 可以分为两种,注解和xml配置,在这里用xml方式,便于理解不用看源码就知道了。
首先配置事物管理器:
sessionfactory 你知道吧 就不说了。还是写上吧 记得加分哦
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="packagesToScan">
<list>
<value><!--这里写个需要扫描的实体类包名--></value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect" >
org.hibernate.dialect.MySQLDialect
</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
</bean>
把sessionfactory注入到事物管理器中
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<!-- 配置事物传播特性 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="add*" propagation="REQUIRED" />
<tx:method name="delete*" propagation="REQUIRED" />
<tx:method name="modify*" propagation="REQUIRED" />
<tx:method name="*" read-only="true" />
</tx:attributes>
</tx:advice>
<!--那些方法参与事物-->
<aop:config>
<aop:pointcut id="allManageMethod"
expression="execution(* 实现方法的包名impl.*.*(..))" />
<aop:advisor pointcut-ref="allManageMethod" advice-ref="txAdvice" />
</aop:config>
首先配置事物管理器:
sessionfactory 你知道吧 就不说了。还是写上吧 记得加分哦
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="packagesToScan">
<list>
<value><!--这里写个需要扫描的实体类包名--></value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect" >
org.hibernate.dialect.MySQLDialect
</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
</bean>
把sessionfactory注入到事物管理器中
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<!-- 配置事物传播特性 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="add*" propagation="REQUIRED" />
<tx:method name="delete*" propagation="REQUIRED" />
<tx:method name="modify*" propagation="REQUIRED" />
<tx:method name="*" read-only="true" />
</tx:attributes>
</tx:advice>
<!--那些方法参与事物-->
<aop:config>
<aop:pointcut id="allManageMethod"
expression="execution(* 实现方法的包名impl.*.*(..))" />
<aop:advisor pointcut-ref="allManageMethod" advice-ref="txAdvice" />
</aop:config>
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2011-01-12
展开全部
要是有机会再去下面这个地方拔高一下,你的处境就大不一样了:
不用花一分钱即可入学!
不就业不还学费!
就业不做软件开发不还学费!
做软件开发月薪低于3k时不还学费!
就业后靠自己的能力分十个月逐步偿还学费!
详情请搜索“黑马程序员”。
反正是参加“黑马程序员”培训后才能上班挣的钱,拿出其中一点来还款也就无所谓了,只当少挣了点,这相当于是用“黑马程序员”培训的成果交付了学费,而不是拿的父母的血汗钱,这样一想,当然可以将“黑马程序员”理解为是“免费”培训了。如果不参加“黑马程序员”培训,那可能真的是连一点钱都挣不到了,更别谈高薪,而且通过“黑马程序员”学有所成的话,估计父母也会非常开心的!
不用花一分钱即可入学!
不就业不还学费!
就业不做软件开发不还学费!
做软件开发月薪低于3k时不还学费!
就业后靠自己的能力分十个月逐步偿还学费!
详情请搜索“黑马程序员”。
反正是参加“黑马程序员”培训后才能上班挣的钱,拿出其中一点来还款也就无所谓了,只当少挣了点,这相当于是用“黑马程序员”培训的成果交付了学费,而不是拿的父母的血汗钱,这样一想,当然可以将“黑马程序员”理解为是“免费”培训了。如果不参加“黑马程序员”培训,那可能真的是连一点钱都挣不到了,更别谈高薪,而且通过“黑马程序员”学有所成的话,估计父母也会非常开心的!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不是处理参数不是很好这样说。
struts1 的缺点是过度 servlet API 以及 struts 的api,还有视图层只支持jsp阿,等等。
strust1 的缺点就是 struts2 的优点,因为struts2 有拦截器和struts2 标签对应所以可以取代actionForm。
spring 我还没研究到,解答不到你,不好意思。
struts1 的缺点是过度 servlet API 以及 struts 的api,还有视图层只支持jsp阿,等等。
strust1 的缺点就是 struts2 的优点,因为struts2 有拦截器和struts2 标签对应所以可以取代actionForm。
spring 我还没研究到,解答不到你,不好意思。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询