2007年8月11日星期六

再来一篇艰苦奋斗的文章

精通struts-基于mvc的java.web设计与开发
2007-2-3 晚
看书总是要作笔记的,但是现在常年在外短短的几个月我做的笔记又垒了厚厚的一摞子,每次搬家实在是一种折磨,有种食之无肉,弃之可惜的感觉,今天彻底下定决心,开始电子笔记,可能要失去笔尖在纸上飞驰的那种快意感。但相比而言还是比较值得改革的,想起一句话,中国人民总是认为改革就是好的:)

本书名《精通struts-基于mvc的java.web设计与开发》
作者:孙卫琴
1.共享数据的范围:
Page:用户请求访问的当前jsp网页
Request:用户请求访问的当前web组件以及和当前web组件共享同一个用户请求的其它web组件
Session:共享数据存在于整个http会话的生存周期
Application:整个web应用的生命周期

2.JavaBean在jsp中的语法:
例:假设有一个JavaBean的类名为CounterBean,它有一个Count的属性

注:myBean为自命名 scope里面的属性可以为page/request/session/application

如果将JavaBean的内容输出网页:


如果要给莫个JavaBean的属性赋值:

3.视图:
Struts框架中的ActionForm Bean划分到视图模块中,Struts利用ActionForm Bean来进行视图和控制器之间表单数据的传递。
流程:Struts框架把用户输入的表单数据保存在ActionForm Bean,然后传给控制器,控制器可对表单数据进行修改,jsp文件使用Struts标签读取修改后的Action Bean的信息,并重新设置HTML表单。

4.控制器
控制器由ActionServlet和Action类来实现
ActionServlet 继承了java.servlet.http.httpservlet类,它在Struts中扮演中央控制器的角色;它的主要任务:接收Http的请求信息,根据配置文件struts-config.xml的配置信息把请求转发给适当的Action对象。
ActionServlet的工作流程:ActionServlet接收到用户的一个请求后,把请求发送到一个Action的实例,如果这个实例不存在则控制器会自动创建一个Action,然后调用Action中的execute()这个方法,execute()方法返回一个ActionForward对象,它封装了把用户请求在转发给其它web组件的信息。注:用户定义自己的Action类,即Action基类的子类时,必须覆盖execute()方法,应为在基类中execute()返回null。

ActionServlet通过struts-config.xml来决定把用户请求发送到那个Action中

Struts的工作流程:
Struts接收一个用户请求时的工作流程如下
1. 检索和用户匹配的ActionMapping实例,如果不存在则返回用户请求路径无效的信息
2. 如果ActionForm实例不存在,就创建一个ActionForm对象,把客户提交的表单保存到这个对象里
3. 根据配置信息确定是否需要表单验证,如果需要,就调用ActionForm中的validate()
4. 如果ActionForm表单的返回值为null,或者返回一个不包含ActionMessage的ActionError对象,表示表单验证成功
5. ActionServlet根据ActionMapping的实例包含的映射信息将请求转发到Action,如果相应的Action实例不存在就创建这个实例,然后调用execute()
6. Action的execute()返回一个ActionForward对象,ActionServlet在把客户请求转发给ActionForward对象指向的jsp组件
7. ActionForward对象指向的jsp组件生成动态网页返回给用户
以上流程4如果ActionForm验证失败,则ActionServlet直接把请求转发给用户提交的jsp组件,此情况下不再创建Action对象,也不再有execute()

贴一篇在北京山区艰苦奋斗时的文章

做了两天的购物车功能模块了,可是还找不到感觉,其中用到的jsp,hibernate,struts还是有种混晕的感觉,基础不扎实啊!!!现在已经是晚上了,天晓得怎么回事又感冒起来,这个叫难受啊,不过妞妞说明天还不好就来山区这边看我,感动ing
借同学《课堂笔记》总是没能抽出时间来看,趁着这两天作项目,拿出来巩固一下:
一直没有搞懂的第一个问题:
在文件目录下面查找以.java结尾的文件并打印出来,实现代码如下:


import java.io.File;
import java.io.FileFilter;

public class printJavaFiles{
public static void main(String [] args){
File f = new File(args[0]);
print(f);
}

public static void print(File f){
File[] files = f.listFiles(new FileFilter(){
public boolean accept(File pathname)
{
if(pathname.isDirectory()) return true;
String filename = pathname.getName();
int index=filename.indexOf(".java");
if(index==-1) return false;
else return true;
}
});

for(int i=0;i if(files[i].isFile())
{
System.out.println(files[i].getAbsolutePath());
}
else
{
print(files[i]);
}
}
}
}

2007年8月4日星期六

对于freemaker合理的理解-------但愿是正确的

对于freemaker 在一个html元素标签中name的属性可以是一个entity.columename 传到struts中的时候 就要创建这个实体 然后跳到freemaker的另一个页面的时候就会得到这个实体的值域


也就是在项目中,我在一个页面的时候这里面的所有值到下个页面的时候都是跟上一个struts没有关系了,所以不用考虑这个页面名字的命名问题。

即一个struts创建一个对象,这个到这个页面,这个页面通过这个对象的值域来显示出相应的值,当这个页面在转入其它页面的时候这个对象是不存在的,如果直接跳转到其他页面那么其他页面将没有任何值,但是跳转到的这个页面每一个元素的属性名(name)还是需要用entity.columename命名,然后跳转到另一个struts的时候,struts就需要创建相应的entity来得到这个名字的所对应的值

2007年8月2日星期四

对于struts2.0的渐渐理解

总是感觉在freemaker里面封装了一套整个的页面代码,用起来怪怪的。
随着项目的进程,对struts有了一定的了解。最郁闷的要数怎么样在一个action里面拿到一个request的值。
现在明白,一个页面的value是由name="object.colume"来的到的,而在action里面只要给这个value="(set)object.colume.value" 拿到,即创建这个colume的一个字符串类型,且用get方法即可以取到~~~~~~~~~郁闷了好几天,终于明白了。
etc:
<#@s hidden name="entityobj.objID">(感觉相当于一个set)
那么它传给action的就会有一个value的值,在action中:
entityobj.getobjID();就会得到这个页面传过来的值。