作者存档: fred - 第12页

错误归纳:jquery formValidator

1、在和struts2框架做ajax验证时候,采用ajaxValidator方法!

url : “valEmail.action”, data:”email=”+$(“#email”).val();

这种形式传递不能把值传递到Service~~

解决方法:直接默认传递,即url : “valEmail.action”, 不构建任何字符串~由formValidator插件完成参数传递!然后在action里面通过String str = request.getParameter(“email”);得到传递的参数。

2、ajaxValidator乱码问题

由于前面一个问题导致不能加入参数,因此在传入中文后会有乱码出现!在action里面~~通过各种方式转换都不成功!

解决方法:打开formValidator.js文件,找到395行的

var parm = "clientid="+id+"&"+id+"="+encodeURIComponent(encodeURIComponent(srcjo.val()));

修改为

var parm = "clientid="+id+"&"+id+"="+escape(srcjo.val());
然后在服务端获取参数的时候String str = URLDecoder.decode(request.getParameter(“name”),”utf8″);转换即可

以上都是在源码和界面都采用utf8情况下!肯定有更好的解决方法!希望大家帮忙,集思广益!

Struts2实现财付通、支付宝、网银……

在线支付听起来是比较唬人,会吓到一片初学者,本人也曾是其中之一~~不过,只要认真研究平台提供的API和实例,就会发现在线支付不难~~

一般在线支付平台都已经封装的很好了!我们程序员所要做的只是实现接口对接而已!!

一般的在线支付都主要是2部分!!

1、请求(即把支付金额,支付帐户等相关信息给支付平台)

2、回调处理(在用户支付以后,支付平台会把相关信息又返回给本地系统,我们程序员要做的就是处理好这个步骤!)

下面我拿财付通做实例!实现下struts2+财付通 实现在线支付,strut2的相关配置就不做说明了!有兴趣的朋友可以去买本《struts2权威指南》看看,挺适合初学者的~

由于我要为后期实现各类支付方式打下基础。所以这里我会先写一个父类~封装一些商品通用属性。


				import java.util.Map;

				import com.ecfront.util.Constants;

				import com.ecfront.util.DateFormat;

				import com.opensymphony.xwork2.ActionContext;

				import com.opensymphony.xwork2.ActionSupport;

				import com.opensymphony.xwork2.Preparable;

				/**

				* 支付请求action

				* @author ZhuFeng

				*/

				public class PayAction extends ActionSupport implements Preparable {

				protected Object uId;// 用户ID

				protected Integer userId;// 用户ID

				protected long payId;// 订单ID

				/* 初始化用户ID */

				public void prepare() throws Exception {

				Map sessions = ActionContext.getContext().getSession();

				uId = sessions.get(Constants.USER_ID);

				if (uId != null) {

				userId = Integer.valueOf(uId.toString());

				}

				}

				//省略set、get

				}

这里是简单的把支付的订单ID、系统内部用户的ID、做了封装~

下面是财付通的请求action


				import javax.servlet.http.HttpServletRequest;

				import org.apache.struts2.interceptor.ServletRequestAware;

				import com.ecfront.pojo.Pay;

				import com.ecfront.service.PayService;

				import com.ecfront.util.Constants;

				import com.ecfront.util.PriceFormat;

				import com.opensymphony.xwork2.ActionSupport;

				import com.tenpay.bean.PayRequest;

				import com.tenpay.bean.PayResponse;

				import com.tenpay.helper.PayRequestHelper;

				import com.tenpay.helper.PayResponseHelper;

				import com.tenpay.util.TenpayUtil;

				/**

				* 财付通接口连接action

				* @author ZhuFeng

				*/

				public class TenPayAction extends PayAction implements ServletRequestAware {

				private HttpServletRequest request;// 请求环境变量

				private PayService payService;//注入订单服务层

				private String bargainor_id; // 商户号

				private String key; // 密钥

				private String return_url; // 回调地址

				private String sendUrl;//请求网关转发地址,因为struts2基于请求转发模式,此处利用jsp界面进行财付通网关的转发

				/*支付请求,封装了订单的相关信息*/

				public String request() {

				Pay pay = payService.getUserPay(userId, payId);

				String currTime = TenpayUtil.getCurrTime();

				String strRandom = TenpayUtil.buildRandom(4) + "";

				PayRequest payRequest = new PayRequest();

				payRequest.setAttach(String.valueOf(pay.getId()));// 自定义串,原样返回 存放订单ID

				payRequest.setBank_type("0"); // 银行类型 0:财付通

				payRequest.setBargainor_id(bargainor_id); // 商户号

				payRequest.setCmdno("1");// 任务代码 支付为1

				payRequest.setDate(currTime.substring(0, 8));// 商户日期 yyyyMMdd

				payRequest.setDesc("动脉商城(" + pay.getId() + ")");// 商品名称,以“动脉商城(订单编号)”为值

				payRequest.setFee_type("1");// 现金支付币种 1:人民币 其它币种暂不支持

				payRequest.setPurchaser_id("");// 买家财付通帐号,可以留空

				payRequest.setReturn_url(return_url);// 回调URL

				payRequest.setSp_billno(currTime + strRandom);// 商户订单号

				payRequest.setTotal_fee(pay.getPrice());// 订单总价,以分为单位

				payRequest.setTransaction_id(bargainor_id + currTime + strRandom);// 财付通交易单号

				String ip = TenpayUtil.toString(request.getRemoteAddr());// ip设置

				payRequest.setSpbill_create_ip(ip);

				PayRequestHelper helper = new PayRequestHelper(key, payRequest);

				sendUrl = helper.getSendUrl();

				return SUCCESS;

				}

				/*支付回调处理,对于正确支付则调用相应的业务逻辑,否则返回失败界面*/

				public String handler() {

				PayResponseHelper helper = new PayResponseHelper();

				helper.setKey(key);

				helper.setPayResponse(request);

				PayResponse payResponse = helper.getPayResponse();

				if ("0".equals(payResponse.getPay_result())) {

				// 支付成功,注意判断交易单重复性

				payService.modifPayOnline(

				Long.valueOf(payResponse.getAttach()), Constants.PAY_CAIFU,

				"", payResponse.getTotal_fee());

				// 注意金额问题,财付通以分为单位

				return SUCCESS;

				}

				return INPUT;

				}

注意下面几个属性~除了sendUrl以为,我都采用了IOC的方式,通过配置文件注入~(采用了spring做粘合)

bargainor_id; // 商户号 财付通申请的时候给你的

key; // 密钥

return_url; // 回调地址 这里相当重要,必须是一个http的绝对路径,最好是IP路径

sendUrl;//此处是一点小技巧,也是struts2实现的关键所在,用于把最后提交的地址保存到这个变量里面去!

下面是配置的相关信息!


				<action name="tenpay_request" class="tenPayAction" method="request">

				<result>../Pages/Buy/request.jsp</result>

				</action>

				<action name="tenpay_handler" class="tenPayAction" method="handler">

				<result type="redirect-action">../UserManager/mypay.action</result>

				</action>

tenpay_request.action是用于请求的路径~调用商品的request方法,把sendUrl提交给../pages/Buy/request.jsp页面~~这个页面里面就二句代码~~

<%

String obj = pageContext.getAttribute("sendUrl").toString();

response.sendRedirect(obj);

%>

就是把前面拼凑的sendUrl转向而已!

 

下面是请求处理,即交付款项以后,本地系统要做的事情~

本人的一点粗浅建议~可以分为2部~

1、对返回的数据包的数据提取重要信息,比如前面,我提交的时候,把订单的ID放到了自定义属性里面去。这时候我们要做的就是把这个订单ID拿回来

2、比对订单信息~上面拿回订单ID以后~在自己系统里面查找该ID符合的订单,并且比对该订单应付款和转向回来已付款~~如果都是正确的,则可以把该订单给完结~~否则,哪怕差1分钱,都放弃完成订单~~

有点乱~~~~算是给自己做个笔记,有兴趣的朋友在我博客首页加我QQ或发邮件 ,一起讨论讨论在线支付!!说实在,我上面的方法实在不咋地!!

对Struts2标签数据二次处理!

最近遇到一个问题~~从hibernate取回一个记录集List<Pay>,用Struts2标签<s:iterator>在页面遍历这个List里面的集合~~


 

因为在此处如果输出就会是一个整数串,而不是一个时间类型,这不符合我的需求!本来我都准备自己写个标签了,呵呵,但是被我在网上无意间找到个方法,可以对Struts2标签的数据在此处理!

代码如下:


<%
Object obj = pageContext.getAttribute("date"); 
out.print(DateFormat.fotmatDate3(Long.valueOf(obj.toString())));
%>

这样运用我写得一个时间处理方法,就可以对Struts2标签得到的数据再次处理!

小小经验!希望大家少走弯路!

谢谢bearjava的文章:http://bearjava20071220091900.javaeye.com/blog/153349

重温Java!

前几天我一个学长推荐我一部视频系列《尚学堂》的J2SE,看了几部,发现老师讲的真的不错!解决了以前

不少的基本问题,再次感谢尚学堂的老师们。

老师的讲述都是比较生动的。有时讲着讲着开几个小玩笑缓解学习的紧张。在现在社会如果每个老师都能像

尚学堂里的老师那样认真负责的话,我想大学教育问题就能解决了!大学生不认真学不是他们不努力,而是

学不进去,老师不是太老(讲的不知所云),就是太年轻(自己都不怎么懂)!下面是地址,有至于以后重

试软件开发的可以去下载!

http://www.verycd.com/topics/93279/

希望能有更多的人投入到中国软件工业上来,为中国的IT做出贡献!

总算整出个东西来了!

花了偶一个礼拜的时间总算自己的个人网站给整出来了!

一下是一些截图!需要源码的人加我QQ哦!希望大家一起学习!

主页:结合RSS可以直接从百度空间和新浪新闻采集资料

分章总汇

文章详情

留言板

简易后台

作为一个个人网站 ,我自己认为基本的功能都很完善了,但是具体细节方面存在很大不足!特别是布局方式!

IIS不支持ASP.NET的错误解决方法

我根据网上1.1的版本改的,用于2.0版本

1.进入任何一个.Net Framework版本的目录: cd %WINDOWS%Microsoft.NETFramework这里选择要安装的ASP.NET版本
2.卸载所有版本的ASP.NET: aspnet_regiis -ua
3.安装此版本的ASP.NET,并递归更新IIS元数据库根处的脚本映射: aspnet_regiis -i
4.递归安装此版本的IIS客户端脚本: aspnet_regiis -c
5.重新启动IIS: iisreset

开始前最好关闭IIS服务器!

迷茫的道路!—我大学2年的学习历程

想当年一进学校就发誓要考取软件工程师,不然就白读了!

想想一年上万的学费,就感到汗颜!不说学校的垃圾程度如何,反正全中国都差不多!学校教的东西基本都是没什么实用的,竟然连VB6.0的课都有!二级考的3个语种全都上了(C/VFP/VB)!难道要考3回二级,把二级的3证都拿齐吗?

还得自己努力啊。想当年大一一进来,凭着高中时候的点底子,花了3个月的时间把C语言给啃下来了,总算在从“人脑”转变为“计算机脑”!这速度是有点慢,但是在俺们班我竟然算神速了,因为这课要第二学期教,汗。。。。

好不容易熬到第二学期,听老师说现在java工程师有多好,多吃香!于是我就忙跑图书馆去啃书!当时连什么叫java都不清楚,后来才知道是外国的大师在喝咖啡的时候取的,一种咖啡的名字,想想就觉得人家外国人NB!看看中国取得名字,什么神州、银河…不说这些!我这人没有耐心,刚开java的时候觉得很简单,结构和算法与C都一样,看到对象、类、接口这些名词时就晕了!这都什么和什么啊!越到后面越是难懂!当时我还不知道有视频教程这回事!只知道啃书,这也让我找到了一种途径!就是一次看几本,翻到同一内容!—-找规律!通过这原始的方法j2se阶段算是被我熬过来了!这又花了我3个月的时间!学期又要结束了!值得讽刺的是,我的速度还是领先全班,这课要大二下学期上的!我算看开了,按学校的教学计划,出了学校大门我就去扫大街了!

大二上学期的我是意气风发的,想一口气冲击java的高级!可笑的是那时候我连一个java小程序都没写出来!那时买了一本大师名著《think in java》。以为看了这本书,就能成为java高手了!虽说这本书写的很好,但是其跳跃式的写法,让我这种土生土长的中国人很难理解!最后这本书都被我限制了!这学期是我最窝囊的一学期!java还是初级水准!值得欣慰的是我看书做了几个课程设计!什么学生管理系统啊!信息管理系统!一堆,感觉都差不多!无非是对数据库的读取和写入!这学期也是我最幸运的学期!因为我得到了一位老师的指导!她为我指名了我所存在的错误!就是学的太杂!并推荐我接触ASP.NET。这是我第一次听到这个名词!那时据.NET进入中国即将7年了!苦笑啊!

在大二下学期前寒假里,去了新华书店选书!当时明明准备买asp.net的、但是看到JSP的书后!脑子里产生了竞争、是asp.net强大呢!还是JSP强呢!最后我买了JSP的书,因为那样的话我就不用在学习新的语种了!这个寒假是我收获最大的一段时间了!这段时间里我理解了WEB的基本结构以及运作方式!也一直坚持着!但是我也遇到了最大的困难那就是我从J2SE进阶到了J2EE。这本市好事啊!但我这中完全靠自学的人只能理解到JavaBean,Servlet.对于上面的构架!只能望而畏惧了!好在寒假结束了!学校里有恩师会指导我!

开学的时候收到了好消息!那位指导我的老师这学期教我们班级java!带着寒假里的疑问我咨询了老师!她告诉我。两种技术都是主流技术没有太大的区别!asp.net入门容易但是深入难!但是J2EE在电子商务和WEB上有无与伦比的优势!学哪个都可以!只要坚持学好!但是以我现在的情况想通过自学学好J2EE真的很难!还有就是以我现在的学历找到J2EE工程师真的很难啊!是啊!专科学历在这个只认学历的年代找到工作都是问题啊!我痛恨这个社会!我考虑了许久,再次放下学了一个月的JSP,重新踏上了ASP.NET的道路!这次我不是放弃了J2EE。而是专科只有3年。时间不够了!J2EE只能在以后找到工作后继续学习了!就这样我踏上了ASP.NET的道路!一个月的寒假没有白度!我掌握了WEB开发的一些重要基础!这些不论是JSP还是ASP.NET都是通用的!熟练了掌握了HTML语法、基本的JavaScript表单过滤、还有一些CSS层的概念!并且凭着java的一些面向对象思想!现在我对ASP.NET的理解越来越深了!学习的速度也飞快了!

现在开学已过了3周了!我的ASP.NET基础部分也快结束了!我打算用2周的时间把基础再次看一遍!然后开始啃代码!这样才能达到最快的速度!我的时间只有一年了!真的不多!也正因为这样我每天都除了上课都花4小时以上的时间自学ASP.NET!虽然苦了点!但是我真的体会到了充实!不同于那些成天打游戏的同学的满足感!

未来的道路啊!我不再迷茫了!时间啊!我们来次比赛吧!看谁才是最后的胜者!

一个不错的JDBC连接池教程(带具体例子)(转载)

1.前言

数据库应用,在许多软件系统中经常用到,是开发中大型系统不可缺少的辅助。但如果对数据库资源没有很好地管理(如:没有及时回收数据库的游标(ResultSet)、Statement、连接 (Connection)等资源),往往会直接导致系统的稳定。这类不稳定因素,不单单由数据库或者系统本身一方引起,只有系统正式使用后,随着流量、用户的增加,才会逐步显露。

在b基于Java开发的系统中,JDBC是程序员和数据库打交道的主要途径,提供了完备的数据库操作方法接口。但考虑到规范的适用性,JDBC只提供了最直接的数据库操作规范,对数据库资源管理,如:对物理连接的管理及缓冲,期望第三方应用服务器(Application Server)的提供。

本文,以JDBC规范为基础,介绍相关的数据库连接池机制,并就如果以简单的方式,实现有效地管理数据库资源介绍相关实现技术。

2.连接池技术背景

2.1JDBC

JDBC是一个规范,遵循JDBC接口规范,各个数据库厂家各自实现自己的驱动程序(Driver),如下图所示:

应用在获取数据库连接时,需要以URL的方式指定是那种类型的Driver,在获得特定的连接后,可按照固定的接口操作不同类型的数据库,如: 分别获取Statement、执行SQL获得ResultSet等,如下面的例子 :

import java.sql.*;
…

..DriverManager.registerDriver(
new oracle.jdbc.
driver.OracleDriver());
Connection dbConn = DriverManager.getConnection
(“jdbc:oracle:thin:@127.0.0.1:1521:
oracle”,“username”, “password” );
Statement st = dbConn.createStatement();
ResultSet rs = st.executeQuery(
“select * from demo_table” );
…
some data source operation in herers.close();
st.close();
dbConn.close();

在完成数据操作后,还一定要关闭所有涉及到的数据库资源。这虽然对应用程序的逻辑没有任何影响,但是关键的操作。上面是个简单的例子,如果搀和众多的if-else、exception,资源的管理也难免百密一疏。如同C中的内存泄漏问题,Java系统也同样会面临崩溃的恶运。所以数据库资源的管理依赖于应用系统本身,是不安全、不稳定的一种隐患。

2.2JDBC连接池

在标准JDBC对应用的接口中,并没有提供资源的管理方法。所以,缺省的资源管理由应用自己负责。虽然在JDBC规范中,多次提及资源的关闭/回收及其他的合理运用。但最稳妥的方式,还是为应用提供有效的管理手段。所以,JDBC为第三方应用服务器(Application Server)提供了一个由数据库厂家实现的管理标准接口:连接缓冲(connection pooling)。引入了连接池( Connection Pool )的概念 ,也就是以缓冲池的机制管理数据库的资源。

JDBC最常用的资源有三类:

-Connection: 数据库连接。

-Statement: 会话声明。

-ResultSet: 结果集游标。

分别存在以下的关系 :

这是一种 ‘爷-父-子’ 的关系,对Connection的管理,就是对数据库资源的管理。举个例子: 如果想确定某个数据库连接(Connection)是否超时,则需要确定其(所有的)子Statement是否超时,同样,需要确定所有相关的ResultSet是否超时;在关闭Connection前,需要关闭所有相关的Statement和ResultSet。

因此,连接池(Connection Pool)所起到的作用,不仅仅简单地管理Connection,还涉及到 Statement和ResultSet。

2.3连接池(ConnectionPool)与资源管理

ConnectionPool以缓冲池的机制,在一定数量上限范围内,控制管理Connection,Statement和ResultSet。任何数据库的资源是有限的,如果被耗尽,则无法获得更多的数据服务。

在大多数情况下,资源的耗尽不是由于应用的正常负载过高,而是程序原因。

在实际工作中,数据资源往往是瓶颈资源,不同的应用都会访问同一数据源。其中某个应用耗尽了数据库资源后,意味其他的应用也无法正常运行。因此,ConnectionPool的第一个任务是限制:每个应用或系统可以拥有的最大资源。也就是确定连接池的大小(PoolSize)。

ConnectionPool的第二个任务:在连接池的大小(PoolSize)范围内,最大限度地使用资源,缩短数据库访问的使用周期。许多数据库中,连接(Connection)并不是资源的最小单元,控制Statement资源比Connection更重要。以Oracle为例:

每申请一个连接(Connection)会在物理网络(如 TCP/IP网络)上建立一个用于通讯的连接,在此连接上还可以申请一定数量的Statement。同一连接可提供的活跃Statement数量可以达到几百。 在节约网络资源的同时,缩短了每次会话周期(物理连接的建立是个费时的操作)。但在一般的应用中,多数按照2.1范例操作,这样有10个程序调用,则会产生10次物理连接,每个Statement单独占用一个物理连接,这是极大的资源浪费。 ConnectionPool可以解决这个问题,让几十、几百个Statement只占用同一个物理连接, 发挥数据库原有的优点。

通过ConnectionPool对资源的有效管理,应用可以获得的Statement总数到达 :

(并发物理连接数) x (每个连接可提供的Statement数量)

例如某种数据库可同时建立的物理连接数为 200个,每个连接可同时提供250个Statement,那么ConnectionPool最终为应用提供的并发Statement总数为: 200 x 250 = 50,000个。这是个并发数字,很少有系统会突破这个量级。所以在本节的开始,指出资源的耗尽与应用程序直接管理有关。

对资源的优化管理,很大程度上依靠数据库自身的JDBC Driver是否具备。有些数据库的JDBC Driver并不支持Connection与Statement之间的逻辑连接功能,如SQLServer,我们只能等待她自身的更新版本了。

对资源的申请、释放、回收、共享和同步,这些管理是复杂精密的。所以,ConnectionPool另一个功能就是,封装这些操作,为应用提供简单的,甚至是不改变应用风格的调用接口。

3.简单JDBC连接池的实现

根据第二章中原理机制,Snap-ConnectionPool(一种简单快速的连接池工具)按照部分的JDBC规范,实现了连接池所具备的对数据库资源有效管理功能。

3.1体系描述

在JDBC规范中,应用通过驱动接口(Driver Interface)直接方法数据库的资源。为了有效、合理地管理资源,在应用与JDBC Driver之间,增加了连接池: Snap-ConnectionPool。并且通过面向对象的机制,使连接池的大部分操作是透明的。参见下图,Snap-ConnectionPool的体系:

图中所示,通过实现JDBC的部分资源对象接口( Connection, Statement, ResultSet ),在 Snap-ConnectionPool内部分别产生三种逻辑资源对象: PooledConnection, PooledStatement和 PooledResultSet。它们也是连接池主要的管理操作对象,并且继承了JDBC中相应的从属关系。这样的体系有以下几个特点:

-透明性。在不改变应用原有的使用JDBC驱动接口的前提下,提供资源管理的服务。应用系统,如同原有的 JDBC,使用连接池提供的逻辑对象资源。简化了应用程序的连接池改造。

-资源封装。复杂的资源管理被封装在 Snap-ConnectionPool内部,不需要应用系统过多的干涉。管理操作的可靠性、安全性由连接池保证。应用的干涉(如:主动关闭资源),只起到优化系统性能的作用,遗漏操作不会带来负面影响。

-资源合理应用。按照JDBC中资源的从属关系,Snap-ConnectionPool不仅对Connection进行缓冲处理,对Statement也有相应的机制处理。在2.3已描述,合理运用Connection和Statement之间的关系,可以更大限度地使用资源。所以,Snap-ConnectionPool封装了Connection资源,通过内部管理PooledConnection,为应用系统提供更多的Statement资源。

-资源连锁管理。Snap-ConnectionPool包含的三种逻辑对象,继承了JDBC中相应对象之间的从属关系。在内部管理中,也依照从属关系进行连锁管理。例如:判断一个Connection是否超时,需要根据所包含的Statement是否活跃;判断Statement也要根据ResultSet的活跃程度。

3.2连接池集中管理ConnectionManager

ConnectionPool是Snap-ConnectionPool的连接池对象。在Snap-ConnectionPool内部,可以指定多个不同的连接池(ConnectionPool)为应用服务。ConnectionManager管理所有的连接池,每个连接池以不同的名称区别。通过配置文件适应不同的数据库种类。如下图所示:

通过ConnectionManager,可以同时管理多个不同的连接池,提供通一的管理界面。在应用系统中通过ConnectionManager和相关的配置文件,可以将凌乱散落在各自应用程序中的数据库配置信息(包括:数据库名、用户、密码等信息),集中在一个文件中。便于系统的维护工作。

3.3连接池使用范例

对2.1的标准JDBC的使用范例,改为使用连接池,结果如下:

import java.sql.*;
import net.snapbug.util.dbtool.*;
…
..ConnectionPool dbConn = ConnectionManager
.getConnectionPool("testOracle" );
Statement st = dbConn.createStatement();
ResultSet rs = st.executeQuery(
“select * from demo_table” );
…
some data source operation
in herers.close();
st.close();

在例子中,Snap-ConnectionPool封装了应用对Connection的管理。只要改变JDBC获取Connection的方法,为获取连接池(ConnectionPool)(粗体部分),其他的数据操作都可以不做修改。按照这样的方式,Snap-ConnectionPool可帮助应用有效地管理数据库资源。如果应用忽视了最后资源的释放: rs.close() 和 st.close(),连接池会通过超时(time-out)机制,自动回收。

4.小结

无论是Snap-ConnectionPool还是其他的数据库连接池,都应当具备一下基本功能:

-对源数据库资源的保护

-充分利用发挥数据库的有效资源

-简化应用的数据库接口,封闭资源管理。

-对应用遗留资源的自动回收和整理,提高资源的再次利用率。

在这个前提下,应用程序才能投入更多的精力于各自的业务逻辑中。数据库资源也不再成为系统的瓶颈。

注: 在网站 www.snapbug.net可免费下载Snap-ConnectionPool及更详细的文档。

作者Blog:http://blog.csdn.net/JavaProgramers/

JSP学习笔记(转载)

开始学习JSP,必要的是给自己一个计划,需要学什么,要怎么学,下面是一个比较常规的学习方法:

1、 建立并且配置好你的Web Server。
  安装并学新使用的时间:半天 。
这是之前讲过的了,初学者推荐TomCat或Resin

2、 保证你理解 HTML / XHTML 。
  你将需要了解html基础, 特别是 HTML 布局中的table的使用。XHTML 不久将代替 HTML ,学习 XHTML 的基础是一个好主意。许多程序员通过 HTML IDE 学习 HTML ( 集成开发环境 ) 。因为大多数 HTML IDE产生混乱的HTMl语法,所以花时间学习手工写作html是很有必要的。因为你将会使用 JSP 和 HTML 混合编程,精通HTML语法是重要的。所以,你必须能流利地写 HTML 。
  训练时间:半个星期。

3、开始学习 Java 。
  开始学习 Java 1.3 理解 Java 基础是很重要的。不用担心学习Swing或 Java 的图形方面,因为在JSP 中你不会使用这些特征。集中精力在 Java 工作的细节,学习 Java 的逻辑,也在 Java Bean上花时间。学习Applet是好的, 但是就象Swing, JSP 的大多数应用将不使用小程序。
  训练时间:1 个星期。

4、学习并且理解你的Web Server的更好的细节。
  熟悉Web Server的特征,这是很重要的。
  训练时间:2 天。

5、建立你的 JSP Server
  我推荐以Tomcat开始。它可以很好地运行JSP程序。当你不能在生产使用Tomcat时,学习尽可能多的知识以便于更好的运行程序。另外, 许多 JSP 程序员使用Tomcat。因此当你遇到一个问题时,你将容易发现帮助。
  安装时间:半天。

6、开始学习 JSP 。
  基本的 JSP 学习通过的步骤 1到步骤6可以完成, 然后使用 JSP 对象和脚本写 JSP 程序来联系学习 JSP 的另外一个方面可以学习怎么创建一个分布式的应用程序。
  训练时间:2 个星期。

7、学习更多的 JSP server。
  没有关于更多的 JSP Server当然也可以运行jsp程序。然而, 许多 JSP server都由自己特殊的特征,可以让你更好的理解你的JSP 工程。

  学习更多的Jsp server如何处理jsp程序是有必要的。同样也可以优化你的 JSP 应用程序,并且使之运行得更快而不出任何问题
训练时间:2 天。

8、 学习 JDBC 。
  JSP 大多数应用将使用数据库,JDBC 被用于数据库连接。经常忽略的一个事实就是,每个 JDBC Driver 所支持的东西是相当不同的。了解并熟悉在jsp工程上被使用的 JDBC driver的细节是很重要的。
  (有时这部分的学习被包含在前面 Java 或JSP的学习中了 。)
  训练时间:1个星期。

  到现在,你已经成为了熟练的 JSP 程序员。仍然有很多需要学习,你可以考虑扩展你的知识比如 DHTML , XML ,java证书, JSP Tag Libraries 或 Servlets , 看你想要造什么类型的网站而决定了。

  这些训练是JSP 的核心。你不必都学习上面所有的, 取决于你在工程中分配到什么任务和你已经有什么知识。但是这是我成功地训练程序员的时间表。关键的单元是时间。平均的说, 5 个月时间确实能够训练一个人 ( 从开始到完成 ) 成为一个对jsp熟悉程序员。几个月时间似乎很长,但要成为一个资深的WEB程序员所学的东西远远不止这一些。

  也许你认为这样学习一种语言花费的时间太长了,因为学 ASP 会更快、时间会更短。 但是学习 ASP 不需要学习java的。 但是你要知道,JSP拥有很多ASP没有的优点哟~以后你自己会领会到的!

B级考试啦!

12月23日,多么痛苦的日子,因为今天就是我最痛恨的英语B级考试!看看自己的英语成绩,真是惨不

忍睹啊,回想在高中的时候貌似没及格过几回吧!看别人考个CET-4都很轻松的样子,挨,这人和人真是没

比啊!我祈求漫天神佛保佑让我通过这次考试吧!