Liferay Struts2 完整实例 修正
Struts2环境配置及配置过程小问题的解决

Struts 的环境配置,及常见小问题解决方案该文档是我学习时候记得笔记,现在拿出来和大家分享.记得不好,希望大家批评指正首先我们学习一下开发环境的配置:该文档中的大部分内容均以图片展示.观看时可以酌情地放大观看.呵呵呵第一步:新建project →web Project →…;第二步:我们需要把项目tomcat使用的apache 的服务根目录设置一下:Window → preference → MyEclipse →Server→ TomCat选取路径;如图:选取apache路径:第三步:设置installed path ,注意这里要是用的是jdk;1.6.0_13;第四步:添加Struts2 路径解压从网站上下载的压缩包struts-2.3.4;解压开后是这样的:第五步:点开apps 的实例程序,解压开把struts放到所建项目的src 目录下边;第六步:添加扩展包:复制到第七步:更改web.xml 文件:下边的文档是apps中的web_inf 下边的web.xml的记事本打开图将选中的代码copy到项目中web.xml 中的相应位置;结果如图:注意:刚粘贴的文档选中的这行结尾词不是j2ee,把它改成j2ee 否则将报错.这可能是版本的原因导致的吧;<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAn dExecuteFilter</filter-class>这句话中的 ng..ng代表的new generation .的意思;第八步:打开src下边的struts 配置文件注释:<struts ></struts>标签之间的内容;将中间的<package></package>标签和内容copy到下边;更改结果如图:注意将web_inf 目录下边的index.jsp改名为hello.jsp;这样就可以访问了; 接下来基本上可以调试了:第一步:启动服务器:记住选中自己配置的tomcat 服务器; 打开浏览器:地址栏中输入:如图:先测试服务器:再测试自己的hello.jsp,测试文件;注意有一点儿关于dtd文件的配置:由于原来填写的内容是从网上获取的,多慢啊是吧;我们现在把它配置成本地开发模式的使用的;第一步:这样的话他就会把每次更改后的文件部署到服务器上,而不用每次更改都重启服务器; 第二步:注意:这里的dtd文件是从struts 文件的解压出来的,只需要引入路径即可;软件1002班 10 / 11 王圣玺注意Tomcat 的web 配置,以及JDK 配置一定要和installed jre 等一致:添加src 文件的扩展文件:黄河水院 struts2的环境配置 信息工程系 软件1002班 11 / 11 王圣玺QQ:820215725 Struts 的运行机制:请求与展现分开(struts2 的核心内容):好了,该文档目前就先写到这里,写得不好,请大家批评指正,如果有不懂或者想要共同学习提高的哥们,姐们,请联系我.O(∩_∩)O 哈哈哈~。
struts2教程实例

struts2教程实例1.第⼀个struts2项⽬建议:参考官⽅配置操作⼀遍,因为技术不断更新,不同版本的struts的类可能不同,⽼版本的多个类可能在新版本中集成了⼀个2.struts2⼯作流程原理2.1步骤1.创建Web Project2.导⼊Jar(使⽤maven控制的话,配置pom.xml)<!--pom配置见 -->3.在web.xml配置struts2的过滤器<filter><filter-name>struts2</filter-name><!--该类会因struts版本不同⽽变化,在struts2.0-2.1.2为org.apache.struts2.dispatcher.FilterDispatcher,在之后版本为下述--> <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class></filter><filter-mapping><filter-name>struts2</filter-name><!-- 所有的url都会被url过滤器解析 --><url-pattern>/*</url-pattern></filter-mapping>4.创建Struts核⼼xml⽂件5.创建action类继承与ActionSupport6.配置struts.xml<!--详细配置及介绍见:-->2.2流程1、客户端浏览器发出HTTP请求2、该请求被StrutsPrepareAndExecuteFilter接收3、根据struts.xml配置,找到需要调⽤的Action类和⽅法,并通过IoC⽅式,将值注⼊给Aciton4、Action调⽤业务逻辑组件处理业务逻辑5、Action执⾏完毕,根据struts.xml中的配置找到对应的返回结果result,并跳转到相应页⾯6、返回HTTP响应到客户端浏览器2.3原理注意:在struts2.1.2后FilterDispatcher被替换为了StrutsPrepareAndExecuteFilter1、客户端初始化⼀个指向Servlet容器(例如Tomcat)的请求2、这个请求经过⼀系列的过滤器(Filter)(这些过滤器中有⼀个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin)3、接着被StrutsPrepareAndExecuteFilter(能够拦截请求对象ServletRequest和ServletResponse结合Struts.xml构建独⽴于servlet的ActionContxt)调⽤,StrutsPrepareAndExecuteFilter询问ActionMapper(含有struts.xml中Action配置的name,namespce,result等的HashMap)来决定这个请是否需要调⽤某个Action4、如果ActionMapper决定需要调⽤某个Action,StrutsPrepareAndExecuteFilter把请求的处理交给ActionProxy5、 ActionProxy通过Configuration Manager询问框架的配置⽂件struts.xml,找到需要调⽤的Action类6、 ActionProxy创建⼀个ActionInvocation的实例。
struts2+spring+hibernate3.3增删改查的实例图文详解(II)

S2SH的增删改查的实现第一步通过逆向工程得到实体类和Dao类实体类点击红色方框中的选项点击红色方框左边的展开标识右键单击TABLE下的datas点击红色方框中选项点击Browse选择项目和创建实体类被放的包,并选中相应的选项,点击Next点击Next点击FinishDao类点击红色方框中的选项点击红色方框左边的展开标识右键单击TABLE下的datas点击红色方框中选项包名改成com.beijing.dao,选择相应选项,点击Next点击Next点击Finish选中dao,用快捷键Ctrl+Shift+O导入实体类的包第二步在applicationContext.xml中添加数据源节点左键连击点击Source右键单击选中红色方框的选项,添加数据源点击FinishapplicationContext.xml代码如下<?xml version="1.0"encoding="UTF-8"?> <beansxmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:p="/schema/p"xsi:schemaLocation="/schema/beans /schema/beans/spring-beans-3.0.xsd"><bean id="dataSource"class="mons.dbcp.BasicDataSource"><property name="driverClassName"value="com.microsoft.sqlserver.jdbc.SQLServerDriver"> </property><property name="url"value="jdbc:sqlserver://localhost:1433"></property><property name="username" value="sa"></property> </bean><bean id="sessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean "><property name="dataSource" ref="dataSource"></property><property name="configLocation"value="classpath:hibernate.cfg.xml"></property></bean><bean id="DatasDAO"class="com.beijing.dao.DatasDAO"><property name="sessionFactory"><ref bean="sessionFactory"/></property></bean></beans>第三步用hibernate提供的方法进行增删改查注意:将dao方法里的一些不用的方法删除留下的方法如下:package com.beijing.dao;import java.util.List;import org.hibernate.HibernateException;import org.hibernate.LockMode;import org.hibernate.Query;import org.hibernate.Session;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.context.ApplicationContext;import org.springframework.dao.DataAccessResourceFailureException; importorg.springframework.orm.hibernate3.support.HibernateDaoSupport; import org.springframework.stereotype.Repository;import com.beijing.pojo.Datas;public class DatasDAO extends HibernateDaoSupport {private static final Logger log= LoggerFactory.getLogger(DatasDAO.class);//保存的方法public void save(Datas transientInstance) {log.debug("saving Datas instance");try {getHibernateTemplate().save(transientInstance);log.debug("save successful");} catch (RuntimeException re) {log.error("save failed", re);throw re;}}//删除的方法public void delete(Datas persistentInstance) {log.debug("deleting Datas instance");try {getHibernateTemplate().delete(persistentInstance);log.debug("delete successful");} catch (RuntimeException re) {log.error("delete failed", re);throw re;}}//根据实体的主键Id得到实体的方法public Datas findById(ng.Integer id) {log.debug("getting Datas instance with id: " + id);try {Datas instance = (Datas) getHibernateTemplate().get("com.beijing.pojo.Datas", id);return instance;} catch (RuntimeException re) {log.error("get failed", re);throw re;}}//数据全查的方法,不含分页public List findAll() {log.debug("finding all Datas instances");try {String queryString = "from Datas";return getHibernateTemplate().find(queryString);} catch (RuntimeException re) {log.error("find all failed", re);throw re;}}//数据全查的方法,含分页public List findAll(int pageSize, int pageNow) { log.debug("finding all Datas instances");Session session = null;try {String queryString = "from Datas";session = this.getSession();Query query = session.createQuery(queryString);int firstResultIndex = pageSize * (pageNow - 1);query.setFirstResult(firstResultIndex);query.setMaxResults(pageSize);List list = query.list();return list;} catch (RuntimeException re) {log.error("find all failed", re);throw re;} finally {//记得session要关闭,不然导致浏览器加载数据缓慢session.close();}}//修改的方法有两个调用任何都行,区别是第一个返回一个实体,第二个不返回//修改的方法1public Datas merge(Datas detachedInstance) {log.debug("merging Datas instance");try {Datas result = (Datas) getHibernateTemplate().merge(detachedInstance);log.debug("merge successful");return result;} catch (RuntimeException re) {log.error("merge failed", re);throw re;}}//修改的方法2public void update(Datas detachedInstance) {log.debug("merging Datas instance");try {super.getHibernateTemplate().update(detachedInstance);log.debug("merge successful");} catch (RuntimeException re) {log.error("merge failed", re);throw re;}}//得到总共多少条数据的方法public int getCount() {System.out.println("pageCount");Session session = null;int count = 0;try {String queryString = "select count(*) from Datas";session = this.getSession();Query query = session.createQuery(queryString);count = Integer.valueOf(query.uniqueResult().toString());} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();} finally {//记得session要关闭,不然导致浏览器加载数据缓慢session.close();}return count;}//每pageSize个数据,有几页数据public int getPageCount(int count,int pageSize) { int pageCount = count/pageSize;if(count%pageSize > 0) {pageCount++;}return pageCount;}}第四步做一个biz包,也叫业务包,和biz的接口1 bizpackage ;import java.util.List;import javax.annotation.Resource;import org.springframework.stereotype.Service;import com.beijing.dao.DatasDAO;import com.beijing.pojo.Datas;public class DataBiz implements IDataBiz {private DatasDAO datasDao;//set了datasDao是用来spring注入管理的public void setDatasDao(DatasDAO datasDao) {this.datasDao = datasDao;}//下面也是调用dao增删改查的一些方法public void delete(Datas data) {datasDao.delete(data);}public List find() {return datasDao.findAll();}public void save(Datas d) {datasDao.save(d);}public void update(Datas data) {datasDao.merge(data);}public List find(int pageSize, int nowPage) {return datasDao.findAll(pageSize, nowPage);}public int getCount() {return datasDao.getCount();}public int getPageCount(int count,int pageSize) { // TODO Auto-generated method stubreturn datasDao.getPageCount(count,pageSize);}public Datas findById(int id) {// TODO Auto-generated method stubreturn datasDao.findById(id);}}2 IBizpackage ;import java.util.List;import com.beijing.pojo.Datas;public interface IDataBiz {//action调用的是这个接口public void save(Datas d);public void delete(Datas daId);public void update(Datas data);public Datas findById(int id);public List find();public int getCount();public List find(int pageSize, int nowPage);public int getPageCount(int count,int pageSize);}第五步做一个action写入调用biz增删改查的方法代码如下:package com.beijing.ac;import java.util.Iterator;import java.util.List;import javax.annotation.Resource;import org.springframework.stereotype.Service;import .IDataBiz;import com.beijing.pojo.Datas;import com.opensymphony.xwork2.ActionSupport;public class DataAction extends ActionSupport { //biz接口的声明,用来调用bizIDataBiz idata;//这些对象set和get后,都会被hibernate自动放进request里private Integer daId;private String daName;private String daAge;private List<Datas> datas;private Datas data;private int nowPage = 1;private int pageSize = 5;private int pageCount;private int count;public int getCount() {return count;}public void setCount(int count) {this.count = count;}public int getNowPage() {return nowPage;}public void setNowPage(int nowPage) { this.nowPage = nowPage;}public int getPageSize() {return pageSize;}public void setPageSize(int pageSize) { this.pageSize = pageSize;}public int getPageCount() {return pageCount;}public void setPageCount(int pageCount) { this.pageCount = pageCount;}public List<Datas> getDatas() {return datas;}public void setDatas(List<Datas> datas) { this.datas = datas;}public IDataBiz getIdata() {return idata;}public Integer getDaId() {return daId;}public void setDaId(Integer daId) { this.daId = daId;}public String getDaName() {return daName;}public void setDaName(String daName) { this.daName = daName;}public String getDaAge() {return daAge;}public void setDaAge(String daAge) { this.daAge = daAge;}public void setIdata(IDataBiz idata) { this.idata = idata;}public String save(){System.out.println("save");data = new Datas();data.setDaAge(daAge);data.setDaName(daName);idata.save(data);System.out.println("保存成功");return"save";}public String delete(){System.out.println("delete");System.out.println(daId);data = new Datas(daId);idata.delete(data);return"delete";}public String update(){System.out.println("update");data = new Datas(daId,daName, daAge);idata.update(data);return"update";}public String findById(){System.out.println("findById");data= idata.findById(daId);daAge = data.getDaAge();daName = data.getDaName();daId = data.getDaId();return"findById";}public String find(){System.out.println("find");System.out.println(idata);datas = idata.find(pageSize,nowPage);count = idata.getCount();pageCount = idata.getPageCount(count,pageSize);for (Datas data : datas) {System.out.println(data.getDaAge() + " "+ data.getDaName());}return"find";}}第六步在applicationContext.xml添加biz和action的节点,进入注入代码如下:<?xml version="1.0"encoding="UTF-8"?><beansxmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:p="/schema/p"xsi:schemaLocation="/schema/bean s/schema/beans/spring-beans-3.0.xsd" ><bean id="dataSource"class="mons.dbcp.BasicDataSource"><property name="driverClassName"value="com.microsoft.sqlserver.jdbc.SQLServerDriver"> </property><property name="url" value="jdbc:sqlserver://localhost:1433"></property><property name="username"value="sa"></property> </bean><bean id="sessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryB ean"><property name="dataSource"ref="dataSource"></property><property name="configLocation"value="classpath:hibernate.cfg.xml"></property></bean><bean id="datasDao" class="com.beijing.dao.DatasDAO"> <property name="sessionFactory"><ref bean="sessionFactory" /></property></bean><bean id="idata" class=".DataBiz"><property name="datasDao" ref="datasDao"></property> </bean><bean id="data" class="com.beijing.ac.DataAction"><property name="idata" ref="idata"></property> </bean></beans>第七步在struts.xml中添加action节点代码如下:<?xml version="1.0"encoding="UTF-8"?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "/dtds/struts-2.1.dtd"><struts><package name="test"extends="struts-default"><action name="data"class="com.beijing.ac.DataAction"><resultname="update"type="redirectAction">/Data_find.action</result> <resultname="findById">/update.jsp</result></action><action name="*_*"class="com.beijing.ac.{1}Action" method="{2}"><resultname="save"type="redirectAction">/Data_find.action</result> <resultname="delete"type="redirectAction">/Data_find.action</result> <resultname="find">/{2}.jsp</result></action></package></struts>注意:之所以用两个action,是想用不同的方法实现action的方法调用第八步find.jsp, ind ex.jsp, save.jsp, update.jsp的实现1 find.jsp代码如下:<%@page language="java"import="java.util.*"contentType="text/html; charset=gbk"%><%@taglib prefix="c"uri="/jsp/jstl/core"%> <%@taglib prefix="s"uri="/struts-tags"%><!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>My JSP 'index.jsp' starting page</title><!--<link rel="stylesheet" type="text/css" href="styles.css">--></head><body>================================================<br>全查数据<table align="center"width="80%"><tr><th>年龄</th><th>姓名</th><th>编号</th><th>操作</th></tr><s:iterator value="datas"><tr onmouseover="this.bgColor='green'" onmouseout="this.bgColor='white'" align="center"><td><s:property value="daAge"/></td><td><s:property value="daName"/></td><td><s:property value="daId"/></td><td><ahref="${pageContext.request.contextPath}/Data_delete.action?daId= ${daId}">删除</a></td><td><a href="data!findById.action?daId=${daId}">修改</a></td></tr></s:iterator><tr></tr><tr align="center"><td>共<s:property value="pageCount"/>页</td><td><s:if test="%{nowPage==1}">首页 上一页</s:if><s:else><ahref="${pageContext.request.contextPath}/Data_find.action?nowPage=1">首页</a> <ahref="${pageContext.request.contextPath}/Data_find.action?nowPage=${nowPage-1}">上一页</a> </s:else><s:if test="%{nowPage != pageCount}"><ahref="${pageContext.request.contextPath}/Data_find.action?nowPage=${nowPage+1}">下一页</a> <ahref="${pageContext.request.contextPath}/Data_find.action?nowPage=${pageCount}">末页</a> </s:if><s:else>下一页 末页</s:else></td><td><ahref="${pageContext.request.contextPath}/save.jsp">新增</a></td> </tr></table></body></html>2 index.jsp 代码入戏<%@page language="java"import="java.util.*"contentType="text/html; charset=gbk"%><!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>My JSP 'index.jsp' starting page</title><!--<link rel="stylesheet" type="text/css" href="styles.css">--></head><script type="text/javascript">function indexFind(){document.location="${pageContext.request.contextPath}/Data_fin d.action";}</script><body onload="indexFind()">================================================<br>struts2+spring+hibernate的增删改查</body></html>3 save.jsp 代码如下<%@page language="java"import="java.util.*"contentType="text/html; charset=gbk"%><!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>My JSP 'index.jsp' starting page</title><!--<link rel="stylesheet" type="text/css" href="styles.css">--></head><body>================================================<br> <div align="center"><form action="Data_save">姓名<input name="daName"type="text"><br>年龄<input name="daAge"type="text"><br>编号<input name="daId"type="text" readonly="readonly"><br><input type="submit"value="提交"></form></div></body></html>4 update.jsp 代码如下<%@page language="java"import="java.util.*"contentType="text/html; charset=gbk"%><%@taglib prefix="s"uri="/struts-tags"%><!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>My JSP 'index.jsp' starting page</title><!--<link rel="stylesheet" type="text/css" href="styles.css">--></head><body>================================================<br><div align="center"><form action="Data_save">姓名<input value="${daName}"type="text"><br>年龄<input value="${daAge}"type="text"><br>编号<input value="${daId}"type="text" readonly="readonly"><br><input type="submit"value="提交"></form><s:form action="data!update.action"><s:textfield label="姓名"name="daName"/><br><s:textfield label="年龄"name="daAge"/><br><s:textfield label="编号"name="daId" readonly="true"/><br><s:submit value="提交"></s:submit></s:form></body></html>第九步启动tomcat如下图所示。
struts2环境搭建及详细示例

struts2环境搭建及详细示例suts2环境搭建 1.下载struts2框架下载地址/download.cgistruts223 2.创建web项目,导入用法struts2所必需的jar包。
创建web项目,在lib名目下添加必需的jar包。
所必需的jar包有 commons-upload-1.2.1.jar,commons-io-1.3.2.jar,commons-logging- api-1.1.jar,marker-2.3.16.jar,javassist-3.7.ga.jar,ognl-3.0.jar,struts2-core-2.2.1.1.jar,xwork-core-2.2.1.1.jar 注重:因为struts2版本的差异性,上面提到的包不一定满足全部版本的需求。
配置完struts2后,请部署运行一下。
按照运行时的错误提醒来添加jar 包解决问题。
比如,配置struts-2.2.1.1时需要commons-io-1.3.2.jar包和javassist-3.7.ga.jar包,但是2.1版本就不需要这两个包。
3.编写struts.xml文件 MyEclipse项目中的src 根名目下建立一个struts.xml文件。
(可以打开下载的struts2安装包里的apps名目下的随意一个jar包,在里面的 WEB_INFR/src名目下,寻觅struts.xml文件,将该文件复制进项目的src根名目下,将里面的内容清空(只留下标签和头部标签即可)) 4.在web.xml中加入struts2 MVC框架启动配置在struts2安装包里找到web.xml文件,将里面的和标签及其内容拷贝进项目中的web.config文件即可。
以上就是用Myeclips 搭配struts2的步骤,下边写一个容易的登录示例: struts2示例 1.创建login.jsp页面在body内创建一个fo表单。
form action="login.action" meth="post" username: input type="tt" name="username"/ br/ password: input type="text" name="password"/ br/ input type="bmit" value="submit" / /form 2.编写LoginAction.java package com.test.action;public class LoginAction { private String username; private String password; public String getUsername() { return username; }第1页共2页。
struts2教程(完全版)

Yaio 4一、准备工作及实例 41.解压struts-2.1.6-all.zip 42.六个基本包 43.初识struts2配置文件 4(1).web.xml文件 4(2).struts.xml文件 4(3).struts.properties(参default.properties) 4 (4)struts-default.xml 5(5)其它配置文件 54.让MyEclipse提示xml信息 55.如何使用alt+/提示 56.实例 57.开启struts2自带的开发模式常量 78.vo传参模式 89.ModerDriven传参模式(不建议采用) 810.为什么要使用struts2代替struts1.x 9二、struts.xml配置及例程 91.配置文件的优先级 92.配置形式 93.package配置相关 104.分工合作include:指定多个配置文件 125.tomcat认证访问 126.初识拦截器 137.Action中的method属性 158.使用ForwardAction实现页面屏蔽。
178.使用default-Action配置统一访问 17小结Action 189.使用通配符 1810.使用0配置:ZERO Annotation 1911.Result配置详解 1912.异常处理 24三、在Action获取Scope对象 25方式一、与Servlet解耦合的非IOC方式 25方式二、与Servlet解耦合的IOC方式 27 方式三、与Servlet耦合的非IOC方式 27 方式四、与Servlet耦合的IOC方式 28四、OGNL与ValueStack(VS) 291.值栈入门 292.OGNL入门 313.普通方法访问 314.静态方法访问 315.默认类Math的访问 326.调用普通类的构造方法 327.集合对象初步 328.集合对象进阶 339.N语法top语法 3410.获取Stack Context中的信息 3511.总结$ # %的区别 3512.总结OGNL[重点] 35五、拦截器 361.概述strust2中的拦截器 362.自定义拦截器 37方式一,实现Interceptor接口。
LifeRay Portal 6学习笔记6使用Struts2开发Portlet

准备Liferay版本:6.0.4开发模式:普通插件模式(非Ext)Struts版本:2.1.8.1环境使用到的Struts2相关jar包如下:antlr-2.7.2.jarcommons-fileupload-1.2.1.jar freemarker-2.3.15.jarognl-2.7.3.jarstruts2-core-2.1.8.1.jarstruts2-portlet-plugin-2.1.8.1.jar xwork-core-2.1.6.jar工程目录如下:参考内容参考Struts2自带的portlet示例struts2-portlet-2.1.8.1.war,在Struts 解压包下面的apps目录里面,这个示例是基于Pluto(/pluto/)Apache的Portal实现,但开发的都是portlet,所以可以参考这个。
开发示例代码portlet.xmlXml代码1.<portlet>2.<portlet-name>StrutsPortlet</portlet-name>3.<display-name>Struts Test Portlet</display-name>4.5.<portlet-class>org.apache.struts2.portlet.dispatcher.Jsr168Dispatcher</portlet-class>6.7. <!--这里的name名字不能修改,value对应于Struts.xml文件里面的配置-->8.<init-param>9.<name>viewNamespace</name>10. <value>/strutsDemoView</value>11. </init-param>12.13. <!-- 对应Struts.xml中设置的默认action -->14. <init-param>15. <name>defaultViewAction</name>16. <value>index</value>17. </init-param>18.19. <init-param>20. <name>editNamespace</name>21. <value>/strutsDemoEdit</value>22. </init-param>23.24. <init-param>25. <name>defaultEditAction</name>26. <value>index</value>27. </init-param>28.29. <expiration-cache>0</expiration-cache>30.31. <!-- 支持view、edit,和前面的portlet一样 -->32. <supports>33. <mime-type>text/html</mime-type>34. <portlet-mode>view</portlet-mode>35. <portlet-mode>edit</portlet-mode>36. </supports>37.38. <portlet-info>39. <title>My StrutsPortlet portlet</title>40. <short-title>SP</short-title>41. <keywords>struts,portlet</keywords>42. </portlet-info>43. </portlet>liferay-portlet.xmlXml代码1.<portlet>2.<portlet-name>StrutsPortlet</portlet-name>3.<instanceable>true</instanceable>4.</portlet>liferay-display.xmlXml代码1.<portlet id="StrutsPortlet"></portlet>Struts.xmlXml代码1.<?xml version="1.0"encoding="UTF-8"?>2.<!DOCTYPE struts PUBLIC3. "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"4. "/dtds/struts-2.0.dtd">5.6.<struts>7.<package name="strutsDemoView"namespace="/strutsDemoView"extends="struts-portlet-default">8.<action name="index"method="view"class="org.huqiwen.study.StrutsDemo">9.<result name="success">/strutsDemoView/view.jsp</result>10. </action>11. <action name="portletView"method="portletView"class="org.huqiwen.study.StrutsDemo">12. <result name="view">/strutsDemoView/viewMode.jsp</result>13. </action>14. </package>15.16.17. <package name="strutsDemoEdit"namespace="/strutsDemoEdit"extends="struts-portlet-default">18. <action name="index"method="edit"class="org.huqiwen.study.StrutsDemo">19. <result name="success">/strutsDemoEdit/edit.jsp</result>20. </action>21. <action name="portleEdit"method="portletEdit"class="org.huqiwen.study.StrutsDemo">22. <result name="edit">/strutsDemoEdit/editMode.jsp</result>23. </action>24. </package>25.</struts>java文件Java代码1.import com.opensymphony.xwork2.ActionSupport;2.3.public class StrutsDemo extends ActionSupport {4.5. private static final long serialVersionUID = 1L;6.7. private String message;8.9. public String getMessage(){10. return message;11. }12. public void setMessage(String message){13. this.message=message;14. }15. public String view() throws Exception {16. message = "hello Struts2 View Portlet!";17. return SUCCESS;18. }19. public String portletView(){20. return "view";21. }22. public String edit() throws Exception {23. message = "hello Struts2 Edit Portlet!";24. return SUCCESS;25. }26. public String portletEdit(){27. return "edit";28. }29.}strutsDemoView/view.jspHtml代码1.<%@ page contentType="text/html;charset=utf-8"%>2.<%@ taglib prefix="s"uri="/struts-tags"%>3.<h2><s:property value="message"/></h2>4.<s:form action="portletView!portletView.action"method="post"namespace="view">5.<s:textfield label="名字"key="message"></s:textfield>6.<s:submit value="提交"></s:submit>7.</s:form>其他的JSP不写了,和普通的Strtus2开发一样。
Struts2详细实例教程

Struts2(上)一、经典的MVC模式二、Struts1.x对MVC的实现三、Struts1.x的主要组件和作用组件作用ActionServlet 中央控制器Action 分控制器,调用JavaBean实现业务逻辑,Action可以分为Action、DispatchAction等不同类型ActionForm 封装参数,实现服务器验证,文件上传等Forward 转发到目的地,可以是JSP,也可以是另一个ActionStruts-config.xml 配置文件,配置有ActionForm,Action,Forward等,通过XML解析,然后使用反射技术使用该文件Struts标签库和JSTL类似,和Struts-config.xml、ActionForm、Action等对象可以紧密集成四、Struts1.x 开发实例-登录程序见案例。
五、Struts2(WebWork)的MVCStruts2的MVC架构六、Struts2的主要组件组件作用FilterDispatcher 起中央控制器作用的过滤器Action 处于Model层的Action,调用JavaBean实现业务逻辑struts.xml 核心配置文件,配置有Action、Result等result 和forward类似,转发的目的地,支持多种视图技术。
七、Struts2的实例-登录在MyEclipse环境中建立一个新的web工程,名称“Struts2Login”,存放路径“f:\Struts2Login”。
在Struts2.0.11版本中找到war包struts2-blank-2.0.11.war,解开该war包,在WEB-INF/lib 目录下复制出所有的jar包,这些jar包就是一个Struts2程序所需要的基础jar包,把它们复制到新建的web工程的WEB-INF/lib目录中。
在src目录下建立一个类,包名mypack,类名UserAction,其代码如下:package mypack;import com.opensymphony.xwork2.ActionSupport;public class UserAction extends ActionSupport {private String username;private String userpass;public String getUsername() {return username;}public void setUsername(String username) {ername = username;}public String getUserpass() {return userpass;}public void setUserpass(String userpass) {erpass = userpass;}@Overridepublic String execute() throws Exception {if ("Mike".equals(username) && "123".equals(userpass)|| "张三".equals(username) && "abc".equals(userpass))return "success";elsereturn "error";}}在src目录下建立Struts2的配置文件struts.xml,内容如下:<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN""/dtds/struts-2.0.dtd"><struts><!-- 定义包管理配置的action 继承struts-default.xml中的配置 --><package name="actions" extends="struts-default"><!-- 定义Action(login.action) --><action name="login" class="erAction"><!-- 定义转发路径对应的字符串名 --><result name="success">/Success.jsp</result><result name="error">/Error.jsp</result></action></package></struts>修改web.xml,在其中加入一个过滤器,过滤/*路径。
Struts 2综合应用实例实验二

实验二:Struts 2综合应用实例——添加学生信息实验要求:运用Struts 2框架,构建一个添加学生信息的项目。
界面如下:实验目的:通过构建一个添加学生信息项目,来综合应用Struts 2的知识点,包括标签、Struts 2配置等。
实验步骤:1. 建立数据库(MySQL)首先建立数据库XSCJ,建立学生表(XSB),表结构如下:相关sql语句:2. 建立Web项目打开MyEclipse,建立一个Web项目,命名为“Example_Struts”。
3. 加载Struts 2的基本类库建议从struts2-blank-2.0.14.war 的\WEB-INF\lib下拷贝,共五个jar包。
4. 修改web.xml5. 建立stu.jsp文件在项目的WebRoot文件夹下建立stu.jsp文件:<html><head><s:head /></head><body ><h3>添加学生信息</h3><s:form action="save.action" method="post" theme="simple"><table><tr><td>学号:</td><td><s:textfield name="xs.xh"></s:textfield></td></tr><tr><td>姓名:</td><td><s:textfield name="xs.xm" ></s:textfield></td></tr><tr><td>性别:</td><td><s:radio name="xs.xb" list="#{1:'男',0:'女'}" value="1"></s:radio></td></tr><tr><td>专业:</td><td><s:textfield name="xs.zy" label="专业"></s:textfield></td></tr><tr><td width="70">出生时间:</td><td><s:datetimepicker name="xs.cssj" id="cssj"displayFormat="yyyy-MM-dd" ></s:datetimepicker></td> </tr><tr><td> 备注:</td><td><s:textarea name="xs.bz" label="备注"></s:textarea></td></tr><tr><td><s:submit value="添加"></s:submit></td><td><s:reset value="重置"></s:reset></td></tr></table></s:form></body></html>6. 建立表对应的JavaBean和DBConn类在src文件夹下新建包“org.model”,在该包下建class文件,命名为“Xsb”,该类中有6个字段,分别为xh、xm、xb、zy、cssj和bz,并生成它们的getter和setter方法,代码如下://生成它们的getter和setter方法public String getXh() {return xh;}public void setXh(String xh) {this.xh = xh;}public String getXm() {return xm;}public void setXm(String xm) {this.xm = xm;}public byte getXb() {return xb;}public void setXb(byte xb) {this.xb = xb;}public String getZy() {return zy;}public void setZy(String zy) {this.zy = zy;}public Date getCssj() {return cssj;}public void setCssj(Date cssj) {this.cssj = cssj;}public String getBz() {return bz;}public void setBz(String bz) {this.bz = bz;}}注意,cssj为java.sql.Date类型。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录一.Liferay,ext开发环境的搭建 (1)二.集成struts2 (3)1.依赖包: (3)2.使用Struts2 (3)三.使用Hibernate. Spring (4)1.建立bean (4)2.建立事务层: (5)3 .建立持久层 (8)4. Action 中调用事务层 (10)三.将portlet注册到portal (11)四.加入国际化 (13)五.加入处理页面 (13)2010年12月20日,修改在页面上的标签找不到国际化信息。
一.Liferay,ext开发环境的搭建1.进入myeclipse,修改liferay-portal-src-5.2.3文件名为portal。
导入portal到eclipse.2.展开portal工程目录,我们可看到一个release.properties文件,新建一个它的扩展配置文件,文件名为release.${username}.properties。
${username}是计算机当前用户名我文件名是release.Administrator.properties,文件内容只一行:lp.ext.dir=D:\myspace\ext 即扩展工程放置路径。
3.打开myeclipse里面ant视图(window--> show view --> ant) , 在ant视图中,点击添加,选择:\portalspace\portal\目录下build.xml顺序执行clean ,start ,build-ext4.将liferay-portal-tomcat-6.0-5.2.3.zip解压到D:\portalspace\目录下,并更名为servers。
在D:\portalspace\ext目录下我们可以看到app.server.properties文件,同样我们也要建立一个扩展配置文件app.server.${username}.properties,文件内容两行:lp.ext.dir=D:/myspace/extapp.server.type=tomcatapp.server.tomcat.dir=D:/ myspace /servers/tomcat-6.0.185.将myspace/ext 工程导入到eclipse中。
6.打开window --> preference --> myeclipse --> application servers 将其他应用服务器disabble掉,找到tomcat6,将tomcat home diretory 指向D:\myspace\servers\tomcat-6.0.18,展开tomcat6,JDK选择我们配置好的JDK1.5+,JDK选项下面optional java vm argument输入如下内容:-Xms128m-Xmx256m-XX:MaxPermSize=128m7.建立数据库lportal 。
在D:\myspace\ext\ext-impl\src\portal-ext.properties文件中添加数据库连接信息# MySQLjdbc.default.driverClassName=com.mysql.jdbc.Driverjdbc.default.url=jdbc:mysql://localhost:3306/lportalername=rootjdbc.default.password=roothibernate.dialect=org.hibernate.dialect.MySQLDialect若不添加以上内容liferay就会使用自带默认数据库.8.选择 :\myspace\ext\目录下build.xml 顺序执行clean,deploy 将ext项目部署到tomcat-6.0.18. 然后选择eclipse中的tomcat6.0启动即可9.在浏览器里输入http://localhost:8080/可以看到portal系统了。
输入emal:test@ password: test登录二.集成struts21.依赖包:除以上包以外还需要加入struts2-portlet-plugin-2.1.8.1.jar准备好以上依赖包之后,将它们放到ext/ext-lib/portal/下。
然后选择project→properties→ java build path→ Libraries→add jar→选中刚才加入的包确认。
2.使用Struts2在ext-impl/src 目录下新建struts.xml,事例如下:<?xml version="1.0"encoding="UTF-8"?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN""/dtds/struts-2.0.dtd"><struts><package name="edit"extends="struts-portlet-default"namespace="/edit"><action name="submit"class="com.softcreate.portlet.car.action.SubmitCarAction"method="getParam"><result name="success">/html/portlet/test/view.jsp</result> </action></package></struts>除了extends=”struts-portlet-default”不同之外,其它配置与平常配置一样,编写好自己的action类即完成struts2的集成。
不需要在web.xml中加入监听三.使用Hibernate. Spring1.建立bean找到ext/ext-service/src新建包:com.softcreate.portlet.car.model新建类Car.java 内容如下:public class Car {private String id;private String name;private String number;private String date;private String userId;private String addtext;private Integer isAble;private Integer isUsed;private String dept;setter() , getter() …}找到 ext/ext-impl/src/META-INF新建car-hbm.xml 内容如下:<?xml version="1.0"encoding="UTF-8"?><!DOCTYPE hibernate-mapping PUBLIC"-//Hibernate/Hibernate Mapping DTD 3.0//EN""/hibernate-mapping-3.0.dtd"> <hibernate-mapping><class name="com.softcreate.portlet.car.model.Car"table="oa_t_car_detail"><id name="id"type="ng.String"><column name="id"length="100"/><generator class="assigned"/></id><property name="name"type="ng.String"><column name="name_"length="100"/></property><property name="number"type="ng.String"><column name="number_"length="100"/></property><property name="date"type="ng.String"><column name="date_"length="100"/></property><property name="userId"type="ng.String"> <column name="user_id"length="100"/></property><property name="addtext"type="ng.String"> <column name="addtext"length="500"/></property><property name="isAble"type="ng.Integer"> <column name="is_able"/></property><property name="isUsed"type="ng.Integer"> <column name="is_used"/></property><property name="dept"type="ng.String"><column name="dept"length="100"/></property></class></hibernate-mapping>2.建立事务层:找到ext/ext-service/src新建包:com.softcreate.portlet.car.service 在包下新建接口:CarService.java,内容如下:package com.softcreate.portlet.car.service;import java.util.List;import com.liferay.portal.PortalException;import com.liferay.portal.SystemException;import com.liferay.portal.kernel.annotation.Isolation;import com.liferay.portal.kernel.annotation.Transactional;@Transactional(isolation = Isolation.PORTAL, rollbackFor = {PortalException.class, SystemException.class })public interface CarEntryService {public List findAll() throws SystemException;}在此包下新建工具类:CarServiceUtil, 内容如下:package com.softcreate.portlet.car.service;public class CarServiceUtil {private static CarService _service;public static CarService getService() {if (_service == null) {throw new RuntimeException("CarService is not set");}return_service;}public void setService(CarService service) {_service = service;}}找到ext/ext-impl/src,新建包com.softcreate.portlet.car.service.base,内容如下,新建CarServiceBaseImpl:package com.softcreate.portlet.car.service.base;import java.util.List;import com.liferay.portal.SystemException;import com.liferay.portal.kernel.annotation.BeanReference;import com.liferay.portal.service.base.PrincipalBean;import com.liferay.portal.util.PortalUtil;import com.softcreate.portlet.car.service.CarService;import com.softcreate.portlet.car.service.persistence.CarEntryPersistence;public abstract class CarServiceBaseImpl extends PrincipalBean implementsCarService {// name中的内容为spring中配置的bean id/*以下为ext-spring.xml 加入的信息。