Search

  • Meta

  • Categories

    Recent Posts

    Archives

    Recent Comments

    29

    为什么用struts

    Struts告一段落,回顾一下,突然没感觉,究竟为什么给忘了,东西太多了…有点犯浑:),理了一下思路比较糙,只为加深印象。
    不使用struts:业务逻辑和控制逻辑全部由servlet实现:既包括请求的分析又包括请求的处理:如取得表单数据—处理数据—然后转向,

    //取得表单数据
    		String username = request.getParameter("xxx");
    		//调用业务逻辑
    		//转向相应的页面,显示出查询结果
    		request.setAttribute("xxxx", zzzz);
    		//c.jsp,取出数据"xxxx"
    	request.getRequestDispatcher("/result.jsp").forward(request, response);

    进一步,可以把不同的请求放到一个servlet中,比如servlet配置用*.do匹配,拦截所有请求。分析定义比较规则的url,截取然后做出不同的处理和response

    String requestURI = request.getRequestURI();
    		System.out.println("requestURI=" + requestURI);
     
    		String path = requestURI.substring(requestURI.indexOf("/", 1), requestURI.length());
    		path = path.substring(0, path.indexOf("."));
     
    		System.out.println("path=" + path);
    		Action action = null;
    		if ("/请求1".equals(path)) {
    			//业务处理
    //request.getRequestDispatcher(forwardPath).forward(request, response);
    		} else if ("/请求2".equals(path)) {
    			//业务处理
    //request.getRequestDispatcher(forwardPath).forward(request, response);
    		}
    	//... ...

    当然,你可以定义多个servlet分别处理在servlet里面只做调用,但是还无法把jsp表现层和业务逻辑分开,struts可以说把问题给我们分解了
    引出struts的配置原理草稿(非真实配置,这是我们假想的处理方式,我们想这样把我们的请求处理,业务逻辑调用和展现分开)可以吗?可以 Struts就是这样做的!

     

    根据Web.xml里面的匹配规则截获请求url,和path匹配,(由struts的核心控制器Actionservlet分析),然后若必要调用用户自定义的业务逻辑控制器Action,完成后根据forward的name属性就像上面的xml草图一样,业务调用成功转向成功页面.jsp,失败转向失败失败.jsp。
    这样jsp可以作为struts的表现层(V),struts负责用控制器调用业务逻辑组件,并负责控制器与视图技术(JSP、FreeMarker和Velocity等)的整合(C控制层)。
    结果是: more…

    19

    “享受”生活-关于生活习惯

    新开页面–新路(同时在首页和新路页面显示吧,以后再单独分开),意在记录成长中的感悟,学习or生活。跟我一起找回自信一步一步提升自我,然后学会享受生活的乐趣,我会记下从别人那里学到,或者别人教会我的,让我茅塞顿开的一些道理和大家共享。

    心情好让你每天保持生活的激情,提高学习效率,同时让你身边的人感觉到快乐,试想如果跟一个每天愁眉苦脸的人在一起时间就了,是一种什么感觉?

    1、从睡觉开开始吧,我觉得睡觉实新的一天的开始 哈哈。

    睡得不好,感觉脑袋昏沉沉的,哪么怎么快速入睡?静心!什么也别想,特别是午睡,因为工作或者学习时间要求,我们可能想在很短的时间内睡着,所以一开始就给自己定了一个准则,那就是什么时间之前一定要睡着什么时间一定要醒来,所以可能辗转反侧,结果时间到了还没睡着,只好接着昏昏沉沉的工作。

    所以,睡觉时什么也别想,或者听些音乐,自己喜欢的就行,有时摇滚甚至可以催眠–节奏的单调。或者听英语,反复的听一个短小的文章,目的实让我们的大脑慢慢对其失去兴趣不再关注其他的事,慢慢就会睡着。

    关于睡觉的时间长短,其实我觉得晚上5-6小时就可以了,中午对于我而言我只要求睡着5分钟即可,醒来就感觉清醒多了—只要睡着然后把握一棒子打醒就可以。

    总结起来就是想睡觉的时候最好就去睡,但不要睡太久,尝试多阶段睡眠,关于睡觉这里有1篇文章–什么是多阶段睡眠,不一定按照文章那个里面的强制要求,自己调整吧。就是一个原则,想睡就睡,但不要贪。

    2、睡醒了,该干什么呢?

    哼着小曲走向洗手间吧(如果有室友之类怕打扰就小声点吧,哈哈),然后对着镜子给自己一个微笑,或许你都被自己的“傻”给乐醒了。

    3、早餐,

    一定要吃不然小心肠胃病!特别是小心胆结石哦,这个自己去搜下吧 more…

    13

    java的静态与动态代理

    即将学习框架所以算是比较认真的理解了一番代理并整理了下下。

    代理模式是对象的结构型模式,代理模式给某一个对象提供了一个代理对象,并由代理对象控制对原对象的引用。 所以代理可以作函数执行前的拦截器,代理执行原对象方法的前后可以外加一些东西,典型应用:日志记录,在一 个方法执行成功或失败的前后都可以记录。

     Part I.静态代理

    首先我们看静态代理的实现:定义接口:UserManager 抽象角色

    package info.vzless.proxy;
    public interface UserManager {
        //添加用户
        public void addUser(String username, String password);
        //修改用户
        public void modify(String userId, String username, String password);
    }

    真实角色UserManager接口的实现

    package info.vzless.proxy;
    public class UserManagerImpl implements UserManager {
    	public void addUser(String username, String password) {
    		//System.out.println("start--->>addUser() - username=" + username);
    		try {
    			//调用dao.......
    			System.out.println("UserManagerImpl.addUser()");
    			//System.out.println("end--->>addUser() ");
    		}catch(Exception e) {
    			e.printStackTrace();
    			throw new java.lang.RuntimeException();
    			//System.err.println("error--->>addUser()");
    		}
    	}
     
    	public void modify(String userId, String username, String password){
    		try {
    				//调用dao.......
    				System.out.println("UserManagerImpl.modify()");
     
    			}catch(Exception e) {
    			e.printStackTrace();
    		}
    	}
    }

    具体的客户端调用:

    package info.vzless.proxy;
    public class Client {
    	/**
    	 * @param args
    	 */
    	public static void main(String[] args) {
    		//UserManager userManager = new UserManagerImpl();
    		UserManager userManager = new UserManagerImplProxy(new UserManagerImpl());
    		userManager.addUser("张三", "123");
    	}
    }

    后来可能因为业务需要,我们需要添加日志功能,好的,我们最笨的做法就是如UserManager接口的实现UserManagerImpl的addUser()方法中的注释部分一样,在每个方法的调用前后添加代码。软件开发有一个开闭原则(OCP)就是说对扩展开放,对修改关闭。所以我们不应该对原来的代码进行修改,因为修改后我们还要对原来的代 码改变进行测试,可谓劳民伤财。现在我们来用静态代理解决(仅对addUser方法举例说明) more…

    08

    在google reader里面阅读全文

    一些博主为了点击量,rss设置为不是全文输出,就要从gr里面转到原始页面才好。情有可原,而且我也喜欢去别人的blog上留点言,所以也没什么。只是有时可能懒,所以不想跳来跳去。

    想在google阅读全文是因为,因为一位博主的blog貌似被墙了,直接无法访问。我本想借助gr可以穿墙的功能,但没想博主没全文输出,所以才弄的。

    环境:firefox 3.0

    准备脚本:http://userscripts.org/scripts/review/9455,保存为 .js 文件

    步骤

    1.添加greasemonkey扩展(在ff里面直接搜就可以)

    2.在工具-greasemonkey-新建用户脚本。输入名字,空间,描述等信息,并输入你想要应用待安装脚本的网址

    此处为googlereader所用脚本所以应用到 http://www.google.com/reader/view/

    3.确认,选择保存的js文件

    就可以了,效果如下,看到preview按钮了吧?


    想要编辑脚本,在工具-greasemonkey-管理用户脚本。

    想要编辑时,点击编辑即可编辑选定的js文件,若找不到编辑器,手工指定一个如: notepad等文本编辑器即可

    ps:结果,全文输出Preview有了 ,但毕竟不是通过google,而只是把原始网页嵌入到google reader里面,还是直接访问 穿墙功能还是没有,白忙活了,不过以后读不需要穿墙的文章方便了

    ==============

    最近很忙也很迷茫,这blog都没时间打理了,任务没完成所以就没时间整理了,等等吧,有点可写的写点算复习吧