一、ActionContext解析: (1)
二、ValueStack解析: (5)
三、ActionContext和ValueStack: (6)
四、ActionProxy (10)
五、ActionInvocation (11)
六、resulttype (13)
1、chain (13)
2、json (14)
七、struts2 tag和ognl (17)
一、ActionContext解析:
public static ActionContext getContext() :
获得当前Action的ActionContext实例
public Object get(Object key) :
此方法类似 HttpServletRequest.getAttribute(String name)
这种说法是错误的:
原因可查看Dispatcher.createContextMap()参数多的那个方法
public void put(Object key, Object value) :
此方法类似HttpServletRequest setAttribute(String name, Object o)。
这种说法是错误的:
public Map getParameters() :
获取所有的请求参数。类似于HttpServletRequest.getParameterMap() 方法。
调用了public Object get(Object key) 如下
{return get(ActionContext. PARAMETERS);}
public Map getSession() :
返回一个Map对象,该Map对象模拟了HttpSession实例。
调用了public Object get(Object key) 如下
{return get(ActionContext.SEESION);}
public void setSession(Map session) :程序员一般不调用没有意义
直接传入一个Map实例,将该Map实例里的key-value对转换成session的属性名
-属性值对。
public Map getApplication() :
返回一个Map对象,该对象模拟了该应用的ServletContext实例。
调用了public Object get(Object key) 如下
{return get(ActionContext. APPLICATION);}
public void setApplication(Map application) :程序员一般不调用没有意义
直接传入一个Map实例,将该Map实例里的key-value对转换成application的属性
名-属性值对。
Public getValueStack():
返回ValueStack
调用了public Object get(Object key) 如下
{return get(ActionContext. VALUE_STACK);}
如果想获取servletAPI有如下方法(查看Dispatcher.createContextMap()参数多的那个方法) 1:实现ServletRequestAware 然后从request中获取session和servletContext 实现ServletResponseAware 获取respose
2:ActionContext.getContext().get(StrutsStatics.HTTP_REQUEST)//request
ActionContext.getContext().get(StrutsStatics. HTTP_RESPONSE)//response
ActionContext.getContext().get(StrutsStatics. SERVLET_CONTEXT)// servletContext
而sesion就可以通过request获得
而获取他们的map形式可用以下方法
ActionContext.getContext().get(“request”); //requestMap(封装了httprequest) ActionContext 中没有直接获取requestMap的方法
ActionContext.getContext().get(“session”); //sessionMap(封装了httpsession)
和ActionContext .getSession()等效
ActionContext.getContext().get(“application”); //applicationMap(封装servletContext) 和ActionContext .getApplication()等效
ActionContext.getContext().get(“parameters”);//封装了所有的请求参数
和ActionContext . getParameters ()等效
Struts2 中通过ActionContext来访问Servlet API,让Action彻底从Servlet API 中分离出来,最大的好处就是可以脱离Web容器测试Action。
那么struts是如何做到的呢?
查看struts2的StrutsPrepareAndExecuteFilter.dofilter()
不难发现prepare.createActionContext(request, response);就是创建ActionContext的地方
跟进该方法
继续跟进dispatcher.createContextMap()
继续跟进createContextMap()(上图中第四个红圈)
以下是RequestMap片段
这就是ActionContext中获得的虽然是Map却能操作request,session等对象的原因二、ValueStack解析:
ValueStack:虚拟对象
当strtus2接受请求时,他会立即创建一个ActionContext,ValueStack和一个Action对象。作为数据的载体,Action对象首先被迅速压入ValueStack以被他的属性可通过OGNL访问到, 然后是模型对象(如果实现了ModelDriver接口),再次就是用户调用valuestack.set()压入的自定义对象
OGNL表达式可以解析对象集合中的任何一个。V alueStack只是这些对象中的一个,也是默认的。OGNL表达式可以从中选择哪个对象来解析的更大范围的对象集合被称为ActionContext
/*实际调用findValue(),当知道返回结果一定为String时可调用此方法*/
public String findString(String expr);
/*
如果不以“#“打头则从valuestack中查找,
如果堆栈中找不到,则到ActionContext.context中查找(就是
ActionContext.getContext().get(“”))还没有就返回null
如果以“#“打头则从ActionContext的内置对象中找
如:
findValue(“#parameters”) //parameters map
findValue(“#request”)// request map
findValue(“#session”)// session map
findValue(“#application”)// application map
findValue(“#attr”)// attributeMap
AttributeMap.get()先从requestMap中找如果找不到则从sessionMap中找如果还找不
到则从applicationMap中找,范围依次从小到大找如下图
ognl表达式其实就是通过调用这个方法实现的
**/
public Object findValue(String expr);
/*
新建一个 bean 并设置属性expr和值value 压入栈顶
这个新建的bean内部实现我推测估计是个map
通常我们的bean并不意味着标准javaBean。这些bean并不具有好的javaBean形式.
可以是任何java对象
*/
public void set (String expr, Object value);
/*取到栈顶的bean,然后设置其属性expr的值为value*/
public void setValue(String expr, Object value);
public Object peek();
public Object pop();
public void push(Object o);
三、ActionContext和ValueStack:
ValueStack.getContext()==ActionContext.content(同一个Map) 如下:
而且valueStack.getContext()中返回的this.context(map)中同样包含了valuestack对象
因为:在onglValueStack的构造函数中会执行如下操作
Strtus2把valuestack放在request(setArribute())中、创建ActionProxy代理等操作都从这个方法开始Dispatcher.serviceAction(): 查看Dispatcher.serviceAction()如下:
当访问一个action的时候,此时struts2会把整个action压入valuestack的顶部(查看第四节ActionInvocation)
statuts2中valuestack的实现类是ognlValueStack 结构如下:
valuestack中的root就是模仿栈操作,有push(),peek(),pop()方法,其实他通过包装list 实现的,并且还继承了list.所以有 list和stack的双特性。每次请求访问的action都被放在root中.
从上图我们可以看出创建一个valuestack 有两种方式:
1 用一个已经存在的valuestack的root创建一个新的valuestack
2 完全新建一个valuestack
但无论哪种方式,context(也就是ActionContext)都是重新创建
结合下图可以得出:
1、valuestack :
如果是转发(reqeust.forward,其实ServletDispatcherResult就是直接转发请求的,结果资源可以是jsp/静态资源或者 action的url,只不过转发后由于struts2过滤器的配置前者不走struts,后者走strtus2的过滤器)会用老的valuestack.root创建一个新的,由于老的valuestack.root中有上一个action,所以新的valuestack中也有,而后的action也会被压入栈顶,
如果是新的请求则是一个完全新的valuestack
如果结果类型为chain:由于不重新走struts2的过滤器了,valuestack也不会重建,后面的action也会被压入栈顶。
2、ActionContext:
但无论是转发还是新请求,ActionContext都会被重置,也就是说如果你再某个action 中做了如下操作:ActionContext.getContext().put(“test”,”test”),然后转发给了另一个action则在第二个action中拿不到test 因为被重置了。只能拿到request等一些http对象,用户自己塞得都不存在了,一般我们也不会直接
ActionContext.getContext().put();因为这样做也没什么意义,直接根据需求把变量放在http对象中就可以了
如果结果类型为chain,由于不重新走struts2的过滤器了,ActionContext不会被重置
四、ActionProxy
ActionProxy API
public String getNamespace() //获取将要执行action的命名空间
public ActionInvocation getInvocation()/获取ActionInvocation
public ActionConfig getConfig()//获取action的配置信息
public String getActionName()获取将要执行action的命字
public Object getAction()获取将要执行action
代理Action的excute会调用invocation.invoke()该方法会调用所有拦截器并在最后调用业务action
五、ActionInvocation
Action的调度管理器
保存了将要调用的action和调用action之前的所有拦截器的链表并依次调用所有拦截器然后调用action 然后执行result 再然后倒序从各个拦截器中出来
ActionInvocation API:
Object getAction();
ActionContext getInvocationContext()://其实就是ActionContext.getContext();
Boolean isExecuted();//action是否执行过了
ActionProxy getProxy();
Result getResult();
Result getResult();
ValueStack getStack();
六、resulttype
1、chain
Action的返回结果类型为”chain”,表明返回结果为action链。
所谓的action链无非就是运行完action后不是返回某个视图资源,而是执行另一个action 如果第二个action返回结果仍然是chain 则继续下一个action 直至最后一个返回视图资源的action,最后一个action将返回给浏览器某个视图资源。
redirectAction 是重定向到某个action。
chain其实就相当于转发给某个action。
可查看ServletActionRedirectResult的excute()方法
2、json
需要使用jsonplugin.Jar包放入Web-INF/lib目录下.查看该包的sturts-plugin.xml文件如下:
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"https://www.sodocs.net/doc/2810636796.html,/dtds/struts-2.0.dtd">
而且要使包含返回结果类型为json的action所在的package必须继承”json-default”。
或者不继承”json-default”,而把sturts-plugin.xml中
的直接拷贝到当前struts.xml 然后在action的result中直接配置
root properties
如果
如:{action.property1:value1,action.property2:value2,……}
如果配置了 result ,则会把root指定的对象的属性(result)做为根生成json串;root参数值是一个ognl表达式!从valuestack中查找此值
如:{ rootObj.property1:value1, rootObj.property2:value2,……}
对应js:
jQuery.post(url, data, function(rs) {})中
rs对象中的所有属性就是action中的所有属性
如果指定了root rs对象中的所有属性就是root对应对象中的所有属性
Excluding properties
A comma-delimited list of regular expressions can be passed to the JSON Result and Interceptor, properties matching any of these regular expressions will be ignored on the serialization process:
login.password,
studentList.*\.sin
true
login.password,
studentList.*\.sin
Including properties
A comma-delimited list of regular expressions can be passed to the JSON Result to restrict which properties will be serialized. ONLY properties matching any of these regular expressions will be included in the serialized output.
Note
Exclude property expressions take precedence over include property
expressions. That is, if you use include and exclude property expressions on the same result, include property expressions will not be applied if an exclude
exclude property expression matches a property first.
更多参数详情查看
https://https://www.sodocs.net/doc/2810636796.html,/confluence/display/W W/JSON+Plugin
查看源码JSONResult.execute():
查看源码 JSONResult.execute():
所以result中的result就是现在valuestack中找,找不到则用action
从上图可以看出,我们可以利用JSONUtil来把一个JAVA对象序列化为JSON串
七、struts2 tag和ognl
用标签属性设置值要理解两件事,属性是否需要字符串文本或者OGNL表达式。
首先,我们需要考虑标签上的属性最终要被java代码处理。但在JSP页面中,都是字符串。使用其他技术,你可能很熟悉使用转移序列来强制属性被转换成表达式。伴随着使用${表达式}符号的增加,常常导致标记的标签可读性差。为了使OGNL表达式使用起来更直观和可读性,Struts2做出了针对每个属性他期望何种数据的假设。哪些属性是字符串哪些是非字如果属性是字符串类型,则值写到属性上,在实际的jsp与Velocity页面中被解释成字符
串文本符串。如果属性是非字符串类型,则被解释成OGNL表达式的值写到属性上。
value属性是Object类型,一个非字符串属性。该用法会携带一个java属性,典型的是来自于ValueStack中,并作为字符串写到渲染的页面中。栈中属性可以是任何java类型。转换成串的工作会自动被OGNL类型转换器处理。value属性告诉渲染页面的属性名。
由于没有用#指定ActionContext中的对象,因此使用ValueStack对象若nonExistingProperty不存在,会怎样?一个null值会被转换成空字符串。第一个标签没有任何东西会被渲染。
Default属性用于提供没有找到对象时的默认值,既然default属性是提供默认串,那么他就是字符串类型。
但可以使用%{表达式}语法强制字符串属性解释为OGNL表达式。
我们可能对多种标记很熟,比如${表达式},这表明哪个文本被视为表达式哪个是真正的串。
注意,强制字符串类型的值用作OGNL表达式取值与JSTL语言的想似之处。
OGNL使用%而不是$。这可能和jsp中的语法相混淆,实际上,你很少使用这一方式。这要归于标签智能的默认行为,大都时候你会让标签决定何时解析成ONGL表达式何时解析成串。这也是框架减少常见任务的方式。
Struts2+hibernate实现用户登录和增删改查案例 Struts2+hibernate实现用户登录和增删改查案例 开发工具MyEclipse 10.7.1 创建一个项目 web项目project。 部署好Struts2的开发环境: 1、引入需要的类库文件jar 2、添加struts2的配置文件struts.xml //src路径:classespath: 3、在web.xml添加启动struts2 MVC框架的过滤器 4、添加Hibernate所依赖的jar文件 (注意:如果Hibernate添加的jar文件与struts2添加jar文件名称完全一致(只需其中之一(版本不一致保留高本版 5、同样添加hibernate的配置文件 Classespath: src路径下面 6、需要添加对应数据库操作的驱动文件jar 在此基础上对 admin这个类完成增删改查的操作。 在src下搭建开发框架,如图所示: struts.xml文件: xml version="1.0" encoding="UTF-8"?> DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "https://www.sodocs.net/doc/2810636796.html,/dtds/struts-2.3.dtd">
SSH2 增删查改实例 (0)软件和框架版本: MyEclipse 6.0.1 Tomcat 6.0.14 Sturts2 1.8 Hibernate 3 Spring 2.0 Mysql 5.1 (一)引入包(共73个,不一定都需要,但是我的项目是这么多,经过调试,有没包冲突)
(二)创建数据库表 建立数据库octtest,并创建user表,表里面一共4个字段:id,姓,名,年龄。 语句如下: create database octtest; user octtest; DROP TABLE IF EXISTS `users`; CREATE TABLE `users` ( `id` int(10) unsigned NOT NULL, `firstname` varchar(50) NOT NULL, `lastname` varchar(50) NOT NULL, `age` int(10) unsigned NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; (三)用myeclipse 中自带的hibernate reverse engineering 工具,根据刚才创建的user表,自动生成实体User 和相应的User.hbm.xml配置文件。 1)在myeclipse中的
填入mysql数据库相应的路径,用户名,密码等信息。注意:这里要引入mysql-connector-java的jar包,需要从外部导入。 2)连接数据库正常后,选择octtest数据库中的user表,右键-》hibernate reverse engineering。自动生成实体User 和相应的User.hbm.xml配置文件。(正常情况下可以生成,但是笔者生成engineer有问题,所以只能够手动创建User类和相应的User.hbm.xml,,所以如果读者顺利创建,可跳过2a,2b两部) 2a)创建User实体类 User.java package com.bean; public class User { public Integer id; public String firstname; public String lastname; public int age;
struts2-convention 既然说了是全注解开发,而且我们已经实现了Hibernate与Spring的注解。同样的,Struts2也能够做到用注解来代替配置文件,struts2-convention插件可以帮助我们完成这一功能。它是struts2提供的一个插件,目前网上相关的中文文档主要是一个叫石太洋的人根据官方文档翻译的,很多网站与博客都有转载。我看了原文与译文,感觉讲的不够清楚,例子也很简单。大象根据自己在项目中的实际使用情况,现将个人对这个插件的经验总结写出来与各位分享,希望与大家多交流,共同提高。 官方文档 请不要把地址中的两个大写W换成小写,否则是打不开页面滴!这个插件的使用其实非常简单,如果光看文档可能会觉得好像很麻烦。那么大象来告诉你怎样快速学习这个插件。 首先你要搞清楚,这个插件它会默认扫描所有包名为struts、struts2、action、actions下面的类。然后它会对实现了Action接口以及类名以Action 结尾的这些类,作为Action来进行处理。 你可以重新定义按哪种包名进行扫描。比如本例设定,只扫描web包下面的所有类,因为我们将Action类都放在这个包下面。 那这个插件是怎么实现原来的配置信息的呢?它的映射规则是这样的,对于以Action结尾的的类,去掉Action,取剩下的部分,将所有的字母转换为小写,如果有驼峰式的写法,则用"-"连接符来连接不同的单词,这是此插件的默认方式。最终转换之后的就是请求地址,还是用例子说明。 https://www.sodocs.net/doc/2810636796.html,erAction 按照上面的规则,请求地址就应该是UserAction去掉Action后缀,将其余部分转换为小写,所以user就是我们的请求地址。不过,这还没有完,因为这里面还有一个命名空间的路径,在通常的配置文件中,一般会将不同的功能进行划分,在package标签里加上namespace属性。使用这个插件,它会为你自动配上命名空间,默认的就是前面说到的以那四种名称为根目录的命名空间,它们之后的都将成为命名空间的名称。 https://www.sodocs.net/doc/2810636796.html,erAction 映射为 /user.action https://www.sodocs.net/doc/2810636796.html,erAction 映射为 /base/user.action 要是我们不以struts或其它几种默认值为包名,又该怎么办呢?没关系,插件为我们提供了一种自定义根包的配置方式
增: 调用的是hibernate的save方法。 Action中传值方式有两种,一种是以对象传值,一种是以属性传值,所以在Action中有两种方式来接收。 private HibernateTemplate hibernateTemplate; 一:以属性传值: jsp页面: 用户名:
1)拷贝下面所说的.java文件,9个java文件和相应的包名,这些都是大果任封装好的文件,可以直接用。 dao包里面有:Dao.java 还有一个impl包:IDao.java manager包里面有:IBaseManager.java IManager.java IUserLoginManager.java 还有一个impl包:BaseManager.java struts包里面有: ApplicationResources.properties 还有一个action包:BaseAction.java IAction.java utils包里面有:MyActionProxy.java ObjectUtils.java 再把 log4j.properties 贴到src包下面。 2)把 applicationContext.xml spring-form.tld spring.tld struts-bean.tld struts-config.xml struts-html.tld struts-logic.tld struts-nested.tld struts-tiles.tld validator-rules.xml web.xml 这些以前写过的都可以贴过来,你可以直接把这个项目里的都贴过去,以后就直
接在这里该代码就行了。 以上两个步骤样就是为了完成手写SSH代码 3)新建一个pojo包: 创建一个实体: 先让这个类实现序列接口如: 然后写相应的字段: 利用get和set方法生成每个字段的get()和set()。例如: 4)为了更够生成所以为每一个字段写出相应的元数据:1.生成相应的表: 说明:利用hibernate生成UserLogin表。 2.字段id的映射,元数据要写在get()方法前面: 3. 字段username的映射,元数据要写在get()方法前面: 4. 字段password的映射,元数据要写在get()方法前面: 这样这个UserLogin.java就完成了。 5)右键项目名称找到“属性”选项: 找到:XDoclet 点击这个出来相应的界面: 单击按钮,
Action 包下面的class文件: package action; import https://www.sodocs.net/doc/2810636796.html,erDao; import https://www.sodocs.net/doc/2810636796.html,erDaoImp; import https://www.sodocs.net/doc/2810636796.html,er; public class UserAction { private User user; public String add(){ UserDao userDao = new UserDaoImp(); try { userDao.save(user); return"success"; } catch (Exception e) { e.printStackTrace(); return"error"; } } public String update(){ UserDao userDao = new UserDaoImp(); try { userDao.updata(user); System.out.print("----"); return"success"; } catch (Exception e) { e.printStackTrace(); return"error"; } } public String delete(){ UserDao userDao = new UserDaoImp(); try { userDao.deleteById(user.getId()); return"success"; } catch (Exception e) { e.printStackTrace(); return"error";
} } public String show(){ UserDao userDao = new UserDaoImp(); try { user = userDao.findById(user.getId()); return"success"; } catch (Exception e) { e.printStackTrace(); return"error"; } } public User getUser() { return user; } public void setUser(User user) { https://www.sodocs.net/doc/2810636796.html,er = user; } } package action; import java.util.List; import https://www.sodocs.net/doc/2810636796.html,erDao; import https://www.sodocs.net/doc/2810636796.html,erDaoImp; import https://www.sodocs.net/doc/2810636796.html,er; public class UserListAction { private List
Struts2增删改查例子 UserBean //要添加set,get public class UserBean{ private Long id; private String name; private String password; private int age; private Date birthday; private Long sex; private Set
mysql语句用法,添加、修改、删除字段一,连接MySQL 二,MySQL管理与授权 三,数据库简单操作 四, 数据库备份 五,后记 一,连接MySQL 格式:mysql -h 远程主机地址 -u 用户名 -p 回车 输入密码进入: mysql -u root -p 回车 Enter password: ,输入密码就可以进入 mysql> 进入了 退出命令:>exit 或者ctrl+D 二,MySQL管理与授权 1.修改密码:
格式:mysqladmin -u 用户名 -p 旧密码 password 新密码 2.增加新用户: >grant create,select,update....(授予相关的操作权限) ->on 数据库.* -> to 用户名@登录主机 identified by '密码' 操作实例: 给root用户添加密码: # mysqladmin -u root password 52netseek 因为开始root没有密码,所以-p旧密码一项可以省略. 登陆测试: # mysql -u root -p 回车 输入密码,成功登陆. 将原有的mysql管理登陆密码52netseek改为52china. # mysqladmin -u root -p 52netseek password '52china' 创建数据库添加用户并授予相应的权限: mysql> create database phpbb; Query OK, 1 row affected (0.02 sec)
mysql> use phpbb; Database changed mysql> grant create,select,update,insert,delete,alter -> on phpbb.* -> to phpbbroot@localhost identified by '52netseek'; Query OK, 0 rows affected (0.00 sec) 授予所有的权限: >grant all privileges >on bbs.* >to bbsroot@localhost identified by '52netseek' 回收权限: revoke create,select,update,insert,delete,alter on phpbb.* from phpbbroot@localhost identified by '52netseek'; 完全将phpbbroot这个用户删除: >use mysql >delete from user where user='phpbbroot' and host='localhost'; >flush privileges; 刷新数据库 三,数据库简单操作
Struts框架和Hibernate框架的整合 1、首先写一个student的实体类,命名为:StudentEntity.java package com.liu.student.entity; /** * 数据库表的映射实体类文件 * @author Calasin */ public class StudentEntity { private String s_id;// 学号 private String s_name;// 姓名
private int s_age;// 年龄 public String getS_id() { return s_id; } public void setS_id(String s_id) { this.s_id = s_id; } public String getS_name() { return s_name; } public void setS_name(String s_name) { this.s_name = s_name; } public int getS_age() { return s_age; } public void setS_age(int s_age) { this.s_age = s_age; } public String toString() { return"StudentEntity [s_id="+ s_id+ ", s_name="+ s_name + ", s_age=" + s_age + "]"; } } 2、接着写student实体类StudentEntity的配置文件:StudentEntity.hbm.xml
private final String = "oracle.jdbc.driver.OracleDriver"及登录;功能实现。E clipse + struts2+oracle+jdbc eb开发技术框架入门小项目,一般都是从增删改功能实现开始入手,就像学编程语言几乎从“HelloWorld final”一样的经典,本人初入 String = "jdbc:oracle:thin:@192.168.0.99:1521:denver"; private final String DBUSER = "zzw"; private final一、环境搭建 "zzw"; private Connection conn = null; 导入必要的包,我所建工程引入如下包: public DataBaseConnection( { C lasses12.jar commons-fileupload-1.2.2.jar commons-io-2.0.1.jar commons-lang-2.5.jar freemarker- 2.3.16.jar javassist-3.11.0.GA.jar ognl-3.0.1.jar ojdbc14.jar struts-core-2.2.3.jar xwork-core-2.2.3.jar try { 引入的包具体的版本同struts 的版本有关系,我的是sturts2.2.6.(DBDRIVER; this.conn = DriverManager.getConnection 二、DBURL, web.xml, DBPASSWORD; } 我的web.xml内容如下: } xml } ?> // 取得数据库连接web-app public Connection getConnection( { "xmlns=" return xmlns:web="https://www.sodocs.net/doc/2810636796.html,/xml/ns/javaee/web- app_2_5.xsd" }="https://www.sodocs.net/doc/2810636796.html,/xml/ns/javaee https://www.sodocs.net/doc/2810636796.html,/xml/ns/javaee/web-app_2_5.xsd " id="WebApp_ID"version=" close( {"> try{
一、安装OFBIZ 1.配置数据库 比如我的ofbiz的根目录为H:\workspace\csofbizworkspace\weidaPlatform设置为OFBIZHOME 则打开OFBIZHOME/framework\entity\config\entityengine.XML文件 修改数据源名称: 然后往下查找,你定义的datasource-name的数据库,比如我这里是localmssql 修改jdbc-uri 和账号和密码 2.创建数据库 在数据库中手动创建你指定的数据库,我这里是weidaTest 3.打开命令提示符窗口 使用cd命令进入到ofbiz根目录 比如我的ofbiz根目录为H:\workspace\csofbizworkspace\weidaPlatform 然后输入ant load-demo执行 4.执行完毕后,进入创建的数据库看下,是不是增加了表,然后再打开user_login表看了,里面是否有数据,如果有,则表示安装完成 二、新建应用 修改配置文件 1.把ofbiz导入到eclipse中 2.在OFBIZHOME/hot-deploy文件夹下,重新复制一份weidaTest并重命名为weidaTest2 3.打开weidaTest2根目录下的build.xml文件,把weidaTest全部替换为weidaTest2 4.打开weidaTest2根目录下的ofbiz-component.xml文件,把weidaTest全部替换为weidaTest2,并清掉所有的服务和实体和初始数据的配置 5.把weidaTest2/webapp下的weidaTest更改为weidaTest2 6.打开文件wedaTest2/wepapp/weidaTest2/WEB-INF/web.xml 把weidaTest替换为weidaTest2 7.打开weidaTest2/widget/CommonScreens.xml把所有的weidaTest替换为weidaTest2 8.打开weidaTest2/widget/ProductMenus.xml把所有的weidaTest替换为weidaTest2 9.把entitydef和servicedef,data,src清空 10.在src右键build path->use assource folder 到目前为止基本配置文件已经修改完毕
个人简历个人信息 姓名:xxxxxxx性别:x 电话:187-xxx7-xxxx 年龄:22 邮箱:lxxxxxxx@https://www.sodocs.net/doc/2810636796.html,专业:软件技术 应聘职位 Java软件开发工程师 专业技能 熟练掌握CoreJava编程,具有扎实的编程功底和良好的编码习惯 熟练掌握ssh(Struts2+hibernate+Spring)等轻量级框架 熟悉MVC开发模式 熟练使用Eclipse/MyEclipse工具进行Java软件开发 熟练Unix/Linux环境下Java的应用软件开发 熟练掌握MySQL、Oracle等数据库操作,能编写常用SQL语句 熟悉软件开发的主要流程,可以根据指定要求快速完成设计、编码等工作
了解xml、HTML、JavaScript、Ajax技术 项目经验 一、通用电子商务平台(当当网购物系统) 开发环境:Linux 开发工具:MyEclipse8.6,Tomcat,MySQL 技术实现:Struts2+Hibernate+Spring+JavaScript+JSP+AJAX 项目描述:此系统为网上购物系统,用户可以用过该系统实现网上购物、注册、登录、浏览商品、订货、生成订单功能。也包括对普通商品增删改查功能和购物车内 书的数量的增删改功能。 责任描述:独自完成项目的整个开发过程 用户模块包括登录与注册,主要使用了AJAX对其输入的信息进行验证,结合 Hibernate存储和验证用户登录等。 商品列表模块主要是用List集合来展示商品。 购物车模块则是使用Session技术来保存购物车,通过Struts2调用不通方法来 操作购物车中的商品集合,实现对购物车的增删改查。 订单模块主要是用Hibernate对用户所买商品的记录进行存储。 经验总结:这个项目让我们把我们所学习的三大框架以及JS,Ajax等都联系起来。尤其是使用Hibernate经常出现异常,在和组内成员讨论中逐步解决问题,并且更加 完善代码。通过这个项目不仅提高我个人能力,而且还促进了与他人合作的能力。 二、教学管理系统
基于Struts2简单的***管理系统 (登录注册增删改查)系统平台要求: 开发环境: Windows操作系统 开发工具:Myeclipse+Jdk+Tomcat+MySQL数据库 要求:标题之间必须有过渡段;正文用小四号字体,段落格式首行缩进2个字符,1.5倍行距;论文中的表必须是三线表,图必须用vs画,图和表中的文本是五号字体;图必须有图序和图题,表必须有表序和表题。 论文文档命名:专业班级姓名--基于Struts2简单的***管理系统.docx 1.系统简介 系统的主要功能模块 (1)学生信息注册: 通过这个功能,可以注册学生的学号,年龄,email等。 (2)学生信息删除: 通过这个功能,可以根据学生的账号,删除学生的信息。 (3)学生信息修改: 通过这个功能,可以修改学生信息,比如密码。 (4)学生成绩查询: 通过这个功能,学生可以对自己本期的成绩进行查询 (5)学生成绩录入: 通过这个功能,可以根据学号来录入学生的成绩。
2.需求分析 随着计算机的崛起,现实生活中计算机可以做很多人不能做的事情,在管理方面,它也很在行,所以我们要学会运用计算机去更好服务生活。 2.1系统的现实意义和可行性分析 本系统的最终用户为在校的教师和学生,根据从学校方面取得的图表资料,文字资料以及其他细节方面的信息,根据日常生活中的经验,根据所做的其他询问和调查,得出用户的下列实际要求: (1)本系统的组成 老师、学生和成绩信息。 一个老师管理一批学生。 每个学生有自己的学号,出生日期等信息。 每个学生的成绩有语文,数学等。 (2)学校的调查情况 在学校,学生考试,学生对自己的成绩查询,教师对自己学生成绩的查询都要依靠一个简单。方便的系统。因此,学生成绩管理系统的设计十分必要。 2.2模块设计功能结构图 根据用户的需求,把学生成绩管理系统分为以下几个子系统: (1)查询子系统:学生通过学号来查询自己的成绩。 (2)修改子系统:学生通过学号和密码修改自己的密码。 (3)删除子系统:通过学生的学号来删除已经录入的信息。 图1-1:学生成绩管理功能结构图
1.下面关于AOP的说法错误的是( C )。 A.AOP将散落在系统中的“方面”代码集中实现 B.AOP有助于提高系统的可维护性 C.AOP已经表现出了将要替代面向对象的趋势 D.AOP是一种设计模式,Spring提供了一种实现 2.关于XmlHttpRequest对象的readyState属性,下列说法中正确的有( AC )。【选两项】 A. 当open()方法调用后,readyState属性值为2 B. 当readyState的值为3时,send()方法已经被调用 C. 当readyState的值为3时,服务器已经响应,但响应未完全结束 D. 当readyState的值为4时,HTTP响应码一定是200 3.在web.xml文件中配置Spring框架,以下选项中配置正确的是( C )。 A.
27.项目平台管理系统: 该项目主要用于项目的目标控制,其目的为项目建设的增值服务。项目包含项目管理,任务管理,信息箱,客户信息管理,权限管理,我的信息六大功能模块。系统基于B/S三层架构,采用struts2+Spring?+?Hibernate?框架.使用Oracle?数据库。本项目只投入7个人,开发周期为2个月。本人主要负责项目管理模块,根据模块需求利用ssh和Javascript、easyUI、ajax等技术完成——基本信息管理,需求分析管理,模块管理,功能管理,附件管理五个子模块。 功能描述: 1.页面展示五个模块的一些基本信息。 2.后台系统管理页面:项目开发ERP管理细化模块的增删改查+分页。 3.后台数据库管理:项目开发信息的增删改查+分页 4.添加数据页面验证; 应用技术: 采用Ajax实现页面的无刷新异步通信。 应用SSH实现文件上传与下载功能。 应用SSH+easyUi对数据库数据进行增删改查+分页+模糊查询。 应用easyUi对表单进行验证并阻止表单重复提交。 网络版办公自动化管理系统(Web OA): 本系统是一个实现企业内各种信息资源共享、加强员工间的交流、提高整体工作效率、为领导各种有用数据、方便领导对公司情况的及时了解、提供决策支持和提供各种工作记录以备事后查询的信息系统。采用Struts2、Spring、Hibernate 、HTML、JavaScript、DWR 等相关技术。本人在项目中进行了前期的需求分析,系统架构实现,数据库建模,及部分编码工作。?? 网上购物系统: 本系统是一个在线商品交易平台, 开发环境与技术:MyEclipse6.0,Tomcat6.0,Oracle9i,JSP,Servlet,Spring,Hibernate,Struts2 项目简述:该系统成功运行于Linux环境下,使用B/S模式开发。采用基于MVC设计模式的框架Struts,使用JavaBean实现了Module层的业务逻辑和数据的读取,在View层采用JSP与JSTL及EL相结合,增强了系统的强壮性。 本人职责:参与该系统用户注册、登陆模块实现,购物模块设计。独立开发了购物车模块。完成对该系统部分的测试工作,并完善了该项目的相关文档资料。 项目名称/客户名称: 盛宇家纺电子商务: 开发环境与技术:Jbuilder,Oracle,Struts2,Tomcat5,Jsp,Ajax,Jquery 项目简述:本系统和我公司为客户开发的盛宇家纺的ERP 无缝绑定,实现工厂的产销
Struts_spring整合 第一步:建立WEB工程Spring_Struts2 第二步: ①导入struts2支持的JAR包:将 struts-2.1.8.1-all\struts-2.1.8.1\apps\struts2-blank-2.1.8.1\WEB-INF\lib下的所有JAR包(6个jar 包,是struts必要的包)拷入到工程目录下的WEB-INF/lib目录下,如果没有看到你拷入的JAR包需要强制加载(这一步指的是如果包导入到lib下后仍然存在WEB-INF/lib下而没有 在工程下出现Referenced Liberaries这一项则需要选中lib文件夹,单击右键,Build Path,Configure Build Path,在弹出的对话框中选择Order and Export,Select All,确定)。
②此外还需要struts2-spring-plugin-2.1.8.1.jar支持包,整合spring与struts2所必需的JAR 包,它位于struts-2.1.8.1-all\struts-2.1.8.1\lib目录下 第三步:拷贝配置文件web.xml,struts.xml,它们分别位于路径: ①struts-2.1.8.1-all\struts-2.1.8.1\apps\struts2-blank-2.1.8.1\WEB-INF(web.xml所在位置)拷贝Web.xml文件到工程的Web-INF路径下。Web-INF路径下是受保护的,不会被访问到,保证数据的安全。 ②struts-2.1.8.1-all\struts-2.1.8.1\apps\struts2-blank-2.1.8.1\WEB-INF\classes(struts.xml所在位置)拷贝struts.xml文件到工程的src文件下并删除
struts2 增删改查功能实现先看下总体项目 这是用户登陆表 这是用户信息表
1.在用户输入用户名和密码登陆之后,我们可以直接调用一个查询所有用户信息的方法,这样就可以查看到所有用户信息了,所要做的就是要写多个方法来执行,然后返回给页面显示(在这里我没有做分页演示),大家要有耐心的看哦,代码有点多。。。 ------------------------------action类代码-------------------------- package laogen.action; import java.sql.Connection; import java.sql.ResultSet; import java.sql.Statement; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.List; import javax.servlet.http.HttpSession; import org.apache.struts2.ServletActionContext; import https://www.sodocs.net/doc/2810636796.html,mon.DBcon; import laogen.dto.depDto; import com.opensymphony.xwork2.ActionSupport; @SuppressWarnings("serial") public class action extends ActionSupport { private String username;//注意这里跟index.jsp form里面的name属性要对应private String password; private String msg; public String getMsg() { return msg; }
一、填空: 1.Struts 2框架由__WebWork_________和____XWork_______框架发展而来。 2.Struts 2以__过滤器_________为核心,采用____拦截器_______的机制来处理用户的请求。3.构建Struts 2应用的最基础的几个类库是_____struts2-core______、____xwork_______、____freemaker_______、__ognl_________以及____commons-logging_______。 4.Struts 2中的控制器类是一个普通的____POJO_______。 5.如果要在JSP页面中使用Struts 2提供的标签库,首先必须在页面中使用taglib编译指令导入标签库,其中taglib编译指令为____<%@ uri=”/struts-tags” prefix=”s”%>_______。6.在Struts 2表单标签库中,表单标签为____