雅典之夏的小站
知人者智 自知者明 Fighting!!

Datasource对象是由Tomcat提供的,因而需要使用JNDI来获得Datasouce

在Javax.naming 中提供了Context接口,

数据源的配置涉及到Server.xml和web.xml,需要在server.xml中加入如下内容:说明一下:我的数据库是MYsql

<Context path="/text" docBase="d:/upload" debug="0">
     <Resource name="jdbc/testDb" auth="Container"
                    type="javax.sql.DataSource"/>
          <ResourceParams name="jdbc/testDB">\\数据源的名称
            <parameter><name>username</name><value>root</value></parameter>数据库的名称
            <parameter><name>password</name><value>password</value></parameter>数据库密码
            <parameter><name>driverClassName</name>
              <value>org.gjt.mm.mysql.Driver</value></parameter>\\要加载的驱动
            <parameter><name>url</name>
              <value>jdbc:mysql://172.20.0.73/rk?</value></parameter>\\要连接的URL
          </ResourceParams>
         
   </Context>

具体还有一些详细的选项例如:MaxActive等,参加Server.xml中说明

另外在Web.xml中加入如下内容:
<description>test connection</description>\\描述
    <res-ref-name>jdbc/testDB</res-ref-name>\\名称与上对应
    <res-type>javax.sql.DataSource</res-type>\\与上对应
    <res-auth>Container</res-auth>\\与上一置
    </resource-ref>

配置以上内容后,只要在你的Jsp或Javabean 中按以下方式创建连接,就可以

Context ctx=new InitialContext();
  DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/testDB");
  conn = ds.getConnection();

以上代码均测试成功,但是在Server.xml中配置数据库的URL中我不能加入useUnicode=true&characterEncoding=GBK,所以从数据库中取出来的汉字都是????

刚刚解决了上面的问题,可以这样加入

jdbc:mysql://172.20.0.73/rk?useUnicode=true&amp;characterEncoding=GBK

因为&是特殊字符

我用如下代码来解决这个问题:

public static String toChinese(String strvalue) {
  try{
   if(strvalue==null)
  {
  return null;
  }
  else {
   strvalue = new String(strvalue.getBytes("ISO8859_1"), "GBK");
   return strvalue;
  }
  }catch(Exception e){
   return null;
  }
 }

写Blog 的时候停了几次电,真是郁闷,数据库的连接池的概念我现在还是不太清晰,加强学习,看书去了1

posted @ 2005-10-27 13:03 rkind 阅读(182) | 评论 (0)编辑 收藏

今天做了一个新闻上传的页面,遇到一些问题

首先是数据库的设计,考虑新闻有一个优先级的问题,因些我在表中需要设置一个recommand的字段,我想设成一个布尔类型,可是发现在mysql里面没有这种类型,查查了都推荐使用ENUM这种类型,可以设置两个值

一个设成true一个设成false,然后我在JSP中就可以通过Insert一个布尔值往这个字段传值,

今天在表单中使用了单选框,原来以为需要使用request.getparameterValus,后来发现不用

最后在上传新闻的过程中,tomcat提示一个叫invalid column 什么 key的错误,调试了很多次才发现是表中的

有一个ID 的主建,本来是自动增长的,可是死了几次机,居然变成不是自动增长的,狂晕

这几天电压总是不够,一天死很多次机,搞的现在一个劲按ctrl+s

posted @ 2005-10-27 13:02 rkind 阅读(152) | 评论 (0)编辑 收藏

今天在原来上传文件页面的基础上,想添加一段文件的简介

因为同时要上传文件,所以ENCTYPE="multipart/form-data" 必须要加在form里面

可是这样的话,我再servlet里面用request.getParameter()方法无论如何都只是获得null值,

不是一般的郁闷,百度了一下,有人出现了同样的问题可是它用的是jspsmartupload组件实现文件上传的,

而我用的commons fileupload组件,仔细看了一下这个组件的api,可是英语太差了,没有发现相关的信息

我又尝试用session传递参数,可是发现有点麻烦,因为在表单提交之时你就得赋给session表单上它的数值,

这似乎要javascript,可是偶也不会,

后来只有google了,搜索了一些中文网页,也没有找到资料,试试不限制语言,呵呵呵,一大片,后来被俺发

现了这个

I cannot read the submitter using request.getParameter("submitter") (it returns null). ]

Situation:

javax.servlet.HttpServletRequest.getParameter(String) returns null when the ContentType is multipart/form-data

Solutions:

Solution A:

1. download http://www.servlets.com/cos/index.html
2. invoke getParameters() on com.oreilly.servlet.MultipartRequest

Solution B:

1. download http://jakarta.apache.org/commons/sandbox/fileupload/
2. invoke readHeaders() in 
org.apache.commons.fileupload.MultipartStream

Solution C:

1. download http://users.boone.net/wbrameld/multipartformdata/
2. invoke getParameter on 
com.bigfoot.bugar.servlet.http.MultipartFormData

Solution D:

Use Struts. Struts 1.1 handles this automatically.
说是不详细,接着往下看,另一种解决方法
> Solution B:
> 1. download
> http://jakarta.apache.org/commons/sandbox/fileupload/
> 2. invoke readHeaders() in
> org.apache.commons.fileupload.MultipartStream

The Solution B as given by my dear friend is a bit hectic and a bit complex :(
We can try the following solution which I found much simpler (at least in usage).

1. Download one of the versions of UploadFile from http://jakarta.apache.org/commons/fileupload/
2. Invoke parseRequest(request) on org.apache.commons.fileupload.FileUploadBase which returns list of org.apache.commons.fileupload.FileItem objects.
3. Invoke isFormField() on each of the FileItem objects. This determines whether the file item is a form paramater or stream of uploaded file.
4. Invoke getFieldName() to get parameter name and getString() to get parameter value on FileItem if it's a form parameter. Invoke write(java.io.File) on FileItem to save the uploaded file stream to a file if the FileItem is not a form parameter.

按照上面的步骤来,果然一切都ok,GOOGLE真不错,主要是getFieldName和getString,
虽然说这种做法有一点麻烦,但稍微判断加工一下,总比获取不到强
posted @ 2005-10-27 13:01 rkind 阅读(841) | 评论 (0)编辑 收藏
大家在JSP的开发过程中,经常出现中文乱码的问题,可能一至困扰着您,我现在把我在JSP开发中遇到的中文乱码的问题及解决办法写出来供大家参考。

一、JSP页面显示乱码
下面的显示页面(display.jsp)就出现乱码:
<html>
<head>
<title>JSP的中文处理</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>

<body>
<%
out.print("JSP的中文处理");
%>
</body>
</html>
对不同的WEB服务器和不同的JDK版本,处理结果就不一样。原因:服务器使用的编码方式不同和浏览器对不同的字符显示结果不同而导致的。解决办法:在JSP页面中指定编码方式(gb2312),即在页面的第一行加上:<%@ page contentType="text/html; charset=gb2312"%>,就可以消除乱码了。完整页面如下:
<%@ page contentType="text/html; charset=gb2312"%>
<html>
<head>
<title>JSP的中文处理</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>

<body>
<%
out.print("JSP的中文处理");
%>
</body>
</html>

二、表单提交中文时出现乱码
下面是一个提交页面(submit.jsp),代码如下:
<html>
<head>
<title>JSP的中文处理</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>

<body>
<form name="form1" method="post" action="process.jsp">
<div align="center">
<input type="text" name="name">
<input type="submit" name="Submit" value="Submit">
</div>
</form>
</body>
</html>
下面是处理页面(process.jsp)代码:
<%@ page contentType="text/html; charset=gb2312"%>
<html>
<head>
<title>JSP的中文处理</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>

<body>
<%=request.getParameter("name")%>
</body>
</html>
如果submit.jsp提交英文字符能正确显示,如果提交中文时就会出现乱码。原因:浏览器默认使用UTF-8编码方式来发送请求,而UTF-8和GB2312编码方式表示字符时不一样,这样就出现了不能识别字符。解决办法:通过request.seCharacterEncoding("gb2312")对请求进行统一编码,就实现了中文的正常显示。修改后的process.jsp代码如下:
<%@ page contentType="text/html; charset=gb2312"%>
<%
request.seCharacterEncoding("gb2312");
%>
<html>
<head>
<title>JSP的中文处理</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>

<body>
<%=request.getParameter("name")%>
</body>
</html>

三、数据库连接出现乱码
只要涉及中文的地方全部是乱码,解决办法:在数据库的数据库URL中加上useUnicode=true&characterEncoding=GBK就OK了。

四、数据库的显示乱码
在mysql4.1.0中,varchar类型,text类型就会出现中文乱码,对于varchar类型把它设为binary属性就可以解决中文问题,对于text类型就要用一个编码转换类来处理,实现如下:
public class Convert {
/** 把ISO-8859-1码转换成GB2312
*/
public static String ISOtoGB(String iso){
String gb;
try{
if(iso.equals("") || iso == null){
return "";
}
else{
iso = iso.trim();
gb = new String(iso.getBytes("ISO-8859-1"),"GB2312");
return gb;
}
}
catch(Exception e){
System.err.print("编码转换错误:"+e.getMessage());
return "";
}
}
}
把它编译成class,就可以调用Convert类的静态方法ISOtoGB()来转换编码。


如果你还有什么不懂之处:我给大家推荐一个好的JSP-JAVA网站:

http://www.phy.hbnu.edu.cn/dsp/

Linux和Java是互联网的宠儿,更是互联网时代的两头雄师, Linux的网络安全性和开放源代码,Java的平台独立性和安全易用性,正好符合Internet平台的要求,Linux和Java真是天生一对鸳鸯。双狮资源网给你提供了最好的Linux和Java学习资源, 欢迎大家多多访问并宣传:
http://www.phy.hbnu.edu.cn/dsp/
posted @ 2005-10-27 13:00 rkind 阅读(130) | 评论 (0)编辑 收藏
前言: 
本来我都是使用JBuilderX当主力IDE、但使用了Eclipse后 
发现...Eclipse原来也这么好用...渐渐的就爱上了它...... 
Eclipse优点:免费、程序代码排版功能、有中文化包、可增 
设许多功能强大的外挂、支持多种操作系统(Windows、 
Linux、Solaris、Mac OSX)..等等。 

开此篇讨论串的目的,是希望能将Eclipse的一些使用技巧集 
合起来...欢迎大家继续补充下去...由于Eclipse的版本众多 
,希望补充的先进们能顺便说明一下您所使用的版本~ 

Eclipse网站:http://www.eclipse.org/ 
Eclipse中文化教学:JavaWorld站内文章参考 

(使用版本:Eclipse 2.1.2 Release + 中文化) 

热键篇: 
Template:Alt + / 
修改处:窗口->喜好设定->工作台->按键->编辑->内容辅助。 
个人习惯:Shift+SPACE(空白)。 
简易说明:编辑程序代码时,打sysout +Template启动键,就 
会自动出现:System.out.println(); 。 
设定Template的格式:窗口->喜好设定->Java->编辑器->模板。 

程序代码自动排版:Ctrl+Shift+F 
修改处:窗口->喜好设定->工作台->按键->程序代码->格式。 
个人习惯:Alt+Z。 
自动排版设定:窗口->喜好设定->Java->程序代码格式制作程序。 
样式页面->将插入tab(而非空格键)以内缩,该选项取消勾选 
,下面空格数目填4,这样在自动编排时会以空格4作缩排。 

快速执行程序:Ctrl + F11 
个人习惯:ALT+X 
修改处:窗口->喜好设定->工作台->按键->执行->启动前一次的启动作业。 
简易说明:第一次执行时,它会询问您执行模式, 
设置好后,以后只要按这个热键,它就会快速执行。 
<ALT+Z(排版完)、ATL+X(执行)>..我觉得很顺手^___^ 

自动汇入所需要的类别:Ctrl+Shift+O 
简易说明: 
假设我们没有Import任何类别时,当我们在程序里打入: 

BufferedReader buf = 
new BufferedReader(new InputStreamReader(System.in)); 

此时Eclipse会警示说没有汇入类别,这时我们只要按下Ctrl+Shift+O 
,它就会自动帮我们Import类别。 

查看使用类别的原始码:Ctrl+鼠标左键点击 
简易说明:可以看到您所使用类别的原始码。 

将选取的文字批注起来:Ctrl+/ 
简易说明:Debug时很方便。 
修改处:窗口->喜好设定->工作台->按键->程序代码->批注 

视景切换:Ctrl+F8 
个人习惯:Alt+S。 
修改处:窗口->喜好设定->工作台->按键->窗口->下一个视景。 
简易说明:可以方便我们快速切换编辑、除错等视景。 

密技篇: 
一套Eclipse可同时切换,英文、繁体、简体显示: 
1.首先要先安装完中文化包。 
2.在桌面的快捷方式后面加上参数即可, 
英文-> -nl "zh_US" 
繁体-> -nl "zh_TW" 
简体-> -nl "zh_CN"。 
(其它语系以此类推) 
像我2.1.2中文化后,我在我桌面的Eclipse快捷方式加入参数-n1 "zh_US"。 
"C:\Program Files\eclipse\eclipse.exe" -n "zh_US" 
接口就会变回英文语系噜。 

利用Eclipse,在Word编辑文书时可不必将程序代码重新编排: 
将Eclipse程序编辑区的程序代码整个复制下来(Ctrl+C),直接贴(Ctrl+V)到 
Word或WordPad上,您将会发现在Word里的程序代码格式,跟Eclipse 
所设定的完全一样,包括字型、缩排、关键词颜色。我曾试过JBuilder 
、GEL、NetBeans...使用复制贴上时,只有缩排格式一样,字型、颜 
色等都不会改变。 

外挂篇: 
外挂安装:将外挂包下载回来后,将其解压缩后,您会发现features、 
plugins这2个数据夹,将里面的东西都复制或移动到Eclipse的features 
、plugins数据夹内后,重新启动Eclipse即可。 

让Eclipse可以像JBuilderX一样使用拖拉方式建构GUI的外挂: 
1.Jigloo SWT/Swing GUI Builder : 
http://cloudgarden.com/jigloo/index.html 
下载此版本:Jigloo plugin for Eclipse (using Java 1.4 or 1.5) 
安装后即可由档案->新建->其它->GUI Form选取要建构的GUI类型。 

2.Eclipse Visual Editor Project: 
http://www.eclipse.org/vep/ 
点选下方Download Page,再点选Latest Release 0.5.0进入下载。 
除了VE-runtime-0.5.0.zip要下载外,以下这2个也要: 
EMF build 1.1.1: (build page) (download zip) 
GEF Build 2.1.2: (build page) (download zip) 

3.0 M8版本,请下载: 
EMF build I200403250631 
GEF Build I20040330 
VE-runtime-1.0M1 

安装成功后,便可由File->New->Visual Class开始UI设计。 
安装成功后,即可由新建->Java->AWT与Swing里选择 
所要建构的GUI类型开始进行设计。VE必须配合着对应 
版本,才能正常使用,否则即使安装成功,使用上仍会 
有问题。 

使用Eclipse来开发JSP程序: 
外挂名称:lomboz(下载页面) 
http://forge.objectweb.org/project/showfiles.php?group_id=97 
请选择适合自己版本的lomboz下载,lomboz.212.p1.zip表示2.1.2版, 
lomboz.3m7.zip表示M7版本....以此类推。 
lomboz安装以及设置教学: 
Eclipse开发JSP-教学文件 

Java转exe篇: 
实现方式:Eclipse搭配JSmooth(免费)。 
1.先由Eclipse制作包含Manifest的JAR。 
制作教学 
2.使用JSmooth将做好的JAR包装成EXE。 
JSmooth下载页面: 
http://jsmooth.sourceforge.net/index.php 
3.制作完成的exe文件,可在有装置JRE的Windows上执行。 

Eclipse-Java编辑器最佳设定: 
编辑器字型设定:工作台->字型->Java编辑器文字字型。 
(建议设定Courier New -regular 10) 

编辑器相关设定:窗口->喜好设定->Java->编辑器 

外观:显示行号、强调对称显示的方括号、强调显示现行行、 
显示打印边距,将其勾选,Tab宽度设4,打印编距字段设80。 
程序代码协助:采预设即可。 
语法:可设定关键词、字符串等等的显示颜色。 
附注:采预设即可。 
输入:全部字段都勾选。 
浮动说明:采预设即可。 
导览:采预设即可。 

使自动排版排出来的效果,最符合Java设计惯例的设定: 
自动排版设定:窗口->喜好设定->Java->程序代码制作格式。 

换行:全部不勾选。 
分行:行长度上限设:80。 
样式:只将强制转型后插入空白勾选。 
内缩空格数目:设为4。 

Eclipse的教学文件: 
Eclipse 3.0系列热键表 - 中英对照解说版 (by sungo) ~New~ 
Window+GCC+CDT用Eclipse开发C、C++ (by sungo) ~New~ 

其它: 
扩充Eclipse的Java 开发工具(中文) 
使用Eclipse开发J2EE 应用程序(中文) 
使用Eclipse平台进行除错(中文) 
用Eclipse进行XML 开发(中文) 
开发Eclipse外挂程序(中文) 
国际化您的Eclipse外挂程序(英文) 
将Swing编辑器加入Eclipse(英文) 
如何测试你的Eclipse plug-in符合国际市场需求(英文) 

Eclipse的相关网站: 
http://eclipse-plugins.2y.net/eclipse/index.jsp 
http://www.eclipseplugincentral.com/ 
Eclipse相关教学[简体] 

  

  

写程序写到很累了,想休息一下??玩玩小Game是 
不错的选择,下面介绍使用Eclipse玩Game的Plug-in。 

补充外挂篇: 
Eclipse-Games: 
http://eclipse-games.sourceforge.net/ 
版本选:Latest Release 3.0.1 (Release Notes) Sat, 3 Jan 2004 

外挂安装完后,重新开启Eclipse。 
窗口->自订视景->其它->勾选Game Actions。 
再将Eclipse关闭,重新再启动,就可以开始玩噜。 
(共有4种:采地雷I、采地雷II、贪食蛇、仓库番。) 

(Eclipse 2.1.2 +中文化 玩Game -仓库番)   

补充:(于Eclipse使用assertion机制) 
Eclipse版本:2.1.3 release。 

JDK1.4版新加入的assertion机制(关键词:assert),由于JDK1.4编译器 
预设是兼容1.3,所以要使用assert必须在编译时加上-source 1.4的参数。 

C:\>javac -source 1.4 XXX.java
执行时则必须加-ea 或-enableassertions参数启动。 

C:\>java -ea XXX

如要在Eclipse中使用assertion机制,请作以下设定: 
设定一:(编译设定) 
Windows->Preferance->Java->Compiler->Compliance and Classfiles 
页面。将..JDK Compliance level->Compiler compliance level调成1.4。 

设定二:(执行设定) 
Run->Run->(x)=Arguments页面,在VM arguments加入-da参数,按下 
Run button便可看到启动assertion后的执行结果。 

(Eclipse 2.1.3 release + assertion测试) 
<assert判别为false,所以show出AssertionError>   

新版(m8+)的eclipse可以设vm arguments 
另外提供一种设法,是在eclipse启动时加入vm arguments(跟加大eclipse预设内存大小的方式一样) 
这样就不用每次run都得需去设vm arguments 

posted @ 2005-10-27 13:00 rkind 阅读(161) | 评论 (0)编辑 收藏
一、J2EE提出的背景
1、    企业级应用框架的需求
在许多企业级应用中,例如数据库连接、邮件服务、事务处理等都是一些通用企业需求模块,这些模块如果每次再开发中都由开发人员来完成的话,将会造成开发周期长和代码可靠性差等问题。于是许多大公司开发了自己的通用模块服务。这些服务性的软件系列同陈为中间件。
2、    为了通用必须要提出规范,不然无法达到通用
在上面的需求基础之上,许多公司都开发了自己的中间件,但其与用户的沟通都各有不同,从而导致用户无法将各个公司不同的中间件组装在一块为自己服务。从而产生瓶颈。于是提出标准的概念。其实J2EE就是基于JAVA技术的一系列标准。
注:中间件的解释 中间件处在操作系统和更高一级应用程序之间。他充当的功能是:将应用程序运行环境与操作系统隔离,从而实现应用程序开发者不必为更多系统问题忧虑,而直接关注该应用程序在解决问题上的能力 。我们后面说到的容器的概念就是中间件的一种。
二、相关名词解释
容器:充当中间件的角色
WEB容器:给处于其中的应用程序组件(JSP,SERVLET)提供一个环境,使JSP,SERVLET直接更容器中的环境变量接口交互,不必关注其它系统问题。主要有WEB服务器来实现。例如:TOMCAT,WEBLOGIC,WEBSPHERE等。该容器提供的接口严格遵守J2EE规范中的WEB APPLICATION 标准。我们把遵守以上标准的WEB服务器就叫做J2EE中的WEB容器。
EJB容器:Enterprise java bean 容器。更具有行业领域特色。他提供给运行在其中的组件EJB各种管理功能。只要满足J2EE规范的EJB放入该容器,马上就会被容器进行高效率的管理。并且可以通过现成的接口来获得系统级别的服务。例如邮件服务、事务管理。
WEB容器和EJB容器在原理上是大体相同的,更多的区别是被隔离的外界环境。WEB容器更多的是跟基于HTTP的请求打交道。而EJB容器不是。它是更多的跟数据库、其它服务打交道。但他们都是把与外界的交互实现从而减轻应用程序的负担。例如SERVLET不用关心HTTP的细节,直接引用环境变量session,request,response就行、EJB不用关心数据库连接速度、各种事务控制,直接由容器来完成。
RMI/IIOP:远程方法调用/internet对象请求中介协议,他们主要用于通过远程调用服务。例如,远程有一台计算机上运行一个程序,它提供股票分析服务,我们可以在本地计算机上实现对其直接调用。当然这是要通过一定的规范才能在异构的系统之间进行通信。RMI是JAVA特有的。
JNDI:JAVA命名目录服务。主要提供的功能是:提供一个目录系统,让其它各地的应用程序在其上面留下自己的索引,从而满足快速查找和定位分布式应用程序的功能。
JMS:JAVA消息服务。主要实现各个应用程序之间的通讯。包括点对点和广播。
JAVAMAIL:JAVA邮件服务。提供邮件的存储、传输功能。他是JAVA编程中实现邮件功能的核心。相当MS中的EXCHANGE开发包。
JTA:JAVA事务服务。提供各种分布式事务服务。应用程序只需调用其提供的接口即可。
JAF:JAVA安全认证框架。提供一些安全控制方面的框架。让开发者通过各种部署和自定义实现自己的个性安全控制策略。
EAI:企业应用集成。是一种概念,从而牵涉到好多技术。J2EE技术是一种很好的集成实现。
三、J2EE的优越性
1、    基于JAVA 技术,平台无关性表现突出
2、    开放的标准,许多大型公司已经实现了对该规范支持的应用服务器。如BEA ,IBM,ORACLE等。
3、    提供相当专业的通用软件服务。
4、    提供了一个优秀的企业级应用程序框架,对快速高质量开发打下基础

四、现状
J2EE是由SUN 公司开发的一套企业级应用规范。现在最高版本是1.4。支持J2EE的应用服务器有IBM WEBSPHERE APPLICATION SERVER,BEA WEBLOGIC SERVER,JBOSS,ORACLE APPLICATION SERVER,SUN ONE APPLICATION SERVER 等。.



posted @ 2005-10-27 12:59 rkind 阅读(145) | 评论 (0)编辑 收藏

1

java中当前日期的获取方法

旧方法(已不常用):

int year = 0;

int month = 0;

int day = 0;

java.util.Date now = new java.util.Date();

year = now.getYear() + 1900;

month = now.getMonth() + 1;

day = now.getDate();

 

 

新方法:

SimpleDateFormat formatter = new SimpleDateFormat(“yyyy-mm-dd”);

Calendar cal_today = Calendar.getInstance();

int m_day = cal_today.get(cal_today.DAY_OF_MONTH);

int m_month = cal_today.get(cal_today.MONTH) + 1;

int m_hour = cal_today.get(cal_today.HOUR_OF_DAY);

int m_minute = cal_today.get(cal_today.MINUTE);

String d = formatter.format(cal_today.getTime());

 

我采用前一种方法实现了按日期生成文件夹.

2

jsp传给mysql当前系统时间的方法

insert into youDB(date) values(NOW())

不过这样只能获得当前日期

3 

判断要建立的文件夹是否存在,如果不则新建立一个文件夹

int year,mm,dd;
  String month,day;
  Date d1=new Date();
  year=d1.getYear()+1900;
  mm=d1.getMonth()+1;
  if (mm<10) month="0"+mm;
  else month=""+mm;
  dd=d1.getDate();
  if (dd<10) day="0"+dd;
  else day=""+dd;
  String filepath="d:\\upload"+"\\"+year+month+day+"\\";
  
  if(!new File(filepath).isDirectory())
        new File(filepath).mkdirs();

posted @ 2005-10-27 12:59 rkind 阅读(301) | 评论 (0)编辑 收藏

今天在linux下完成了配置了jsp+tomcat+mysql,

因为linux没怎么用过,也是边学边查

装tomcat和jdk比较顺利,可是当我把自己做的那个使用mysql注册的jsp+javaben上传时,却出现了http 500的错误,因为tomcat 在linux下看不到调试情况,只能猜了,mysql的问题,驱动没加载?

先下载好驱动org.gjt.mm.mysql.Driver放到/usr/local/tomcat 下面的common /lib目录下

然后在vi /etc/profile

添加上面那个jar文件.

上面操作完成以后,运行 jsp提示访问被拒绝,我用的phpmyadmin做mysql的前台,修改localhost的权限后,一切ok了

对了,还有个发现,用tomcat的admin管理界面添加任何东西以后,都要再点一次上面的commit change,

要不再一启动又回到以前

学了vi的两个命令,按i是插入的意思,退出时遇到了麻烦,先按esc,再按Q怎么也退出不了,

后来用shift+zz才退出了

刚看到vi的资料,原来刚才少看了一个: 郁闷啊{说了半天,可能你的文件已经编辑完成了,但如何存盘呢?现在我们还是保持在命令状态,按:w按后回车即完成了存盘工作,而退出vi返回到Linux的命令是:q,这两个命令也可以组合使用,如:wq代表存盘退出。

  好了,说了半天,可能你的头已经大了,上面讲到的那些只是vi中最常用的功能,至于其它的功能你可以在使用中慢慢体会。顺便说一句,不要强记那些命令,它们看起来多而毫无规律,多用几次自然就熟练了,现在我觉得比Windows中的记事本方便多了。}

posted @ 2005-10-27 12:58 rkind 阅读(214) | 评论 (0)编辑 收藏

本文主要参考了,JSP+javabean循序渐进

开发平台:winxp+tomcat4+mysql+javabean

在实现在了用servlet注册还有登录以后,打算做一个注册页面

首先创建一个表:username VARCHAR2(20) 用户名
password VARCHAR2(20) 密码
email VARCHAR2(30) Email地址
homepage VARCHAR2(50) 主页
signs VARCHAR2(200) 签名
regtime DATE 注册时   //这个date我没有实现

主要有三个jsp页面:

addnewuser.jsp,主要用来实现注册用户的界面,

doadduser.jsp 实现填加到数据库中的具体功能

listuser.jsp 来实现显示所有用户信息

两个bean:

db.java实现数据库的操作,主要有两个方法public ResultSet executeQuery(sql)返回rs用来进行记录的查询

public boolean executeUpdate(String sql)用来进行记录的更新

adduser.java继承了db类用来提供所需更新和查询的sql语句;

我直接调用原文的代码时后发现调用了span什么,不太懂,而且有很多字符不对,所以调试时的问题基本上都是html代码的问题.这是一个仅有基本功能,很多方面还需进一步完善,比如实现注册时间(虽然这不难,可是我还没看util.date和sql.date 区别),email地址的识别,连登录都没有做 :) ,我发现基于这种bean结构的功能很吸引人,比servlet要好,肤浅之见

源码如下:db.java

package rkind;
import java.net.*;
import java.sql.*;
import java.lang.*;
import java.io.*;
import java.util.*;
public class db {
//成员变量初始化
Connection conn = null; //数据库连接
ResultSet rs = null; //记录集
String Username=""; //用户名
String Password=""; //密码
String Email=""; //email
String Homepage=""; //主页
String Signs=""; //签名
String url="jdbc:mysql://172.20.0.73/rk";

//db的构建器
public db() {
 try {
//注册数据库驱动程序为Oracle驱动
  String name="org.gjt.mm.mysql.Driver";
  Class.forName(name);
  conn = DriverManager.getConnection(url,"root","你的密码");
  System.out.println("success");
  }
 catch(Exception e) {
//这样写是为了方便调试程序,出错打印mydb()就知道在什么地方出错了
  System.err.println("mydb(): " + e.getMessage());
  
 }
 }

//executeQuery方法用于进行记录的查询操作

//入口参数为sql语句,返回ResultSet对象
 public ResultSet executeQuery(String sql) {
  rs = null;
  try {
//建立数据库连接,使用Oracle的一种thin连接方式,demo为主机名字,demodb为数据库,后面的两个
//demo为用户名和密码
  
  
  Statement stmt = conn.createStatement();
//执行数据库查询操作
  rs = stmt.executeQuery(sql);
  }
  catch(SQLException ex) {
   System.err.println("db.executeQuery: " + ex.getMessage());
  }
  return rs;
 }
//executeUpdate方法用于进行add或者update记录的操作

//入口参数为sql语句,成功返回true,否则为false
 public boolean executeUpdate(String sql) {
  boolean bupdate=false;
  rs = null;
  try {
//建立数据库连接,其它参数说明同上面的一样
  
  Statement stmt = conn.createStatement();
  int rowCount = stmt.executeUpdate(sql);
//如果不成功,bupdate就会返回0
  if(rowCount!=0)bupdate=true;
  }
  catch(SQLException ex) {
//打印出错信息
   System.err.println("db.executeUpdate: " + ex.getMessage());
  }
 return bupdate;
 }

//toChinese方法用于将一个字符串进行中文处理

//否则将会是???这样的字符串
 public static String toChinese(String strvalue) {
  try{
   if(strvalue==null)
  {
  return null;
  }
  else {
   strvalue = new String(strvalue.getBytes("ISO8859_1"), "GBK");
   return strvalue;
  }
  }catch(Exception e){
   return null;
  }
 }

}

adduser.java

package rkind;
import java.sql.*;
import java.lang.*;
import java.util.Date;
//adduser由db派生出来,拥有db的成员变量和方法
 public class adduser extends db {
//构建器
 public boolean addNewUser(){
 boolean boadduser=false;
 try {
//进行用户注册的记录添加操作,生成sql语句
 
  String sSql=new String("insert into demo(username,password,email,homepage, signs)");
  sSql=sSql+ " values('"+Username+"','"+Password+"','"+Email+"','"+Homepage +"','"+Signs+"')";
//一种调试的方法,可以打印出sql语句,以便于查看错误
  System.out.println(sSql);
//调用父类的executeUpdate方法,并根据成功以否来设置返回值
  if(super.executeUpdate(sSql))boadduser=true;
  }
 catch(Exception ex) {
//出错处理
  System.err.println("adduser.addNewUser: " + ex.getMessage());
 }finally{
//无论是否出错,都要返回值
 return boadduser;
 }
}

//checkUser()方法用来检查用户名是否重复

//如果重复返回一个false
 public boolean checkUser(){
  boolean boadduser=false;
  try {
//构建sql查询语句
   String sSql="select * from demo where username='"+Username+"'";
//调用父类的executeQuery方法
   if((super.executeQuery(sSql)).next()){
//查询出来的记录集为空
   boadduser=false;
   }else{
    boadduser=true;
   }
  }
  catch(Exception ex) {
//出错处理
   System.err.println("adduser.addNewUser: " + ex.getMessage());
  }finally{
//返回值
   return boadduser;
  }
 }
 public String getUsername(){ return Username;}
 public void setUsername(String newUsername){
//用户名有可能是中文,需要进行转换
  Username =db.toChinese(newUsername);}
//属性密码Password的get/set方法
  public String getPassword(){
  return Password;}
  public void setPassword(String newPassword){ Password = newPassword;}
//属性Email的get/set方法
  public String getEmail(){ return Email;}
  public void setEmail(String newEmail){ Email = newEmail;}
//属性主页Homepage的get/set方法
  public String getHomepage(){ return Homepage;}
  public void setHomepage(String newHomepage){ Homepage = newHomepage;}
//属性主页Signs的get/set方法
  public String getSigns(){ return Signs;}
  public void setSigns(String newSigns){
//签名有可能是中文,需要进行转换
  Signs = db.toChinese(newSigns);}
}
newuser.jsp

<%@ page contentType="text/html;charset=gb2312"%>
<% response.setHeader("Expires","0"); %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>新用户注册 </title>
</head>
<body bgcolor="#FFFAD9">
<script language="JavaScript">

function valid(form)

{
    if(form.username.value.length==0)
   {
        alert("Please enter username!");
        form.username.focus();
        return false;
    }
    if(form.Password.value==form.password1.value){
     alert("你输入的验证密码不正确");
     form.password1.focus(); 
    }
}
</script>
<p align="center"><font color="#8484FF"><strong><big>新个人
用户注册 </font>
<form onsubmit="return valid(this)" method="POST"  name="formreg" action="donewuser.jsp">
<div align="center"><center> 
<table width="49%" height="281"
border="1"
cellspacing="0">
    <tr>
      <td width="27%" bgcolor="#DDDDFF" align="center">用户名:
        <td width="73%" bgcolor="#DDDDFF"><input type="text"
name="username" size="20" >
                <font color="#00CCFF"><b>* </b></font>        
    </tr>
    <tr>
      <td width="27%" bgcolor="#DDDDFF" align="center">输入密码:
        <td width="73%" bgcolor="#DDDDFF"><input type="password" name="password" size="20"
>
                <font color="#FF0000"><b>* </b></font>        
    </tr>
    <tr>
      <td width="27%" bgcolor="#DDDDFF" align="center">校验密码:
        <td width="73%" bgcolor="#DDDDFF"><input type="password" name="password1" size="20"
>
                <font color="#FF0000"><b>* </b></font>        
    </tr>
    <tr>
      <td width="27%" bgcolor="#DDDDFF" align="center">E-mail
        <td width="73%" bgcolor="#DDDDFF"><input type="text" name="email" size="20" >
                <font color="#FF0000">* </font>        
    </tr>
    <tr>
      <td width="27%" bgcolor="#DDDDFF" align="center">主页地址:
        <td width="73%" bgcolor="#DDDDFF"><input type="text" name="homepage" size="20"
 value="http://">
      </tr>
    <tr>
      <td width="100%" height="20" colspan="2" bgcolor="#DDDDFF"><br>
          <center>
            <font color="red"><b>介绍自己: (介绍自己,不能超过120字)</span></b></font>
        </center>    </tr>
  <td width="70%">
  <tr>
    <td><textarea rows="6"
name="signs" cols="30" ></textarea>
  </tr>
  <tr>
    <td width="30%" bgcolor="#DDDDFF" colspan="2"><center>
        <p>
          <input
type="submit" value="递交" onClick="return checkmsg();" name="B1" >
          <input type="reset" value="清除" name="B2" >
      </center>
  </tr>
  </table>
  </div>

</form>

<hr size="1" color="#FF0000">
<p align="center">Better View:800*600 Best View:1024x768
为了本系统能够更好的为您服务,请使用IE4.0或以上版本浏览器
<font color="#000000"></font><a href="javascript:%20newGuide("copyright.htm")"
target="_self">版权所有 </a>


</body>
</html>

listuser.jsp

<%@ page contentType="text/html;charset=gb2312"%>
<% response.setHeader("Expires","0"); %>
<%@ page import="java.sql.ResultSet" %>
<%@ page import="org.gjt.mm.mysql.Driver.*" %>
<!--生成一个JavaBean:lyf.db的实例-->
<jsp:useBean id="db" class="rkind.db" scope="request"/>
<jsp:setProperty name="db" property="*"/>
<%

java.lang.String strSQL; //SQL语句

int intPageSize; //一页显示的记录数
int intRowCount; //记录总数
int intPageCount; //总页数
int intPage; //待显示页码
java.lang.String strPage;
int i,j,k;
//设置一页显示的记录数
intPageSize = 15;
//取得待显示页码
strPage = request.getParameter("page");
if(strPage==null){//表明在QueryString中没有page这一个参数,此时显示第一页数据
intPage = 1;
}
else{//将字符串转换成整型
intPage = java.lang.Integer.parseInt(strPage);
if(intPage<1) intPage = 1;
}
//获取记录总数
strSQL = "select count(*) from demo";
ResultSet result = db.executeQuery(strSQL); //执行SQL语句并取得结果集
result.next(); //记录集刚打开的时候,指针位于第一条记录之前
intRowCount = result.getInt(1);
result.close(); //关闭结果集
//记算总页数
intPageCount = (intRowCount+intPageSize-1) / intPageSize;
//调整待显示的页码
if(intPage>intPageCount) intPage = intPageCount;
strSQL="select * from demo ";
//执行SQL语句并取得结果集
result = db.executeQuery(strSQL);
//将记录指针定位到待显示页的第一条记录上
i = (intPage-1) * intPageSize;
for(j=0;j<i;j++) result.next();
%>
<html>
<head>
<meta http-equiv="Content-Language" content="zh-cn">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 3.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>用户列表</title>
</head>
<body bgcolor="#FFEBBD">
<div align="center"><center>
<table border="1"
borderColorDark="#FFFFFF" borderColorLight="#000000" cellspacing="0" height="22"
width="100%">
<tr bgcolor="#FFEBAD">
<td height="1" width="691" class="main">
第<%=intPage%>页 共<%=intPageCount%>页
<a href="listuser.jsp?page=0">首页</a>
<%if(intPage>1){%><a href="listuser.jsp?page=<%=intPage-1%>">上一页</a><%}%>
<%if(intPage<=1){%>上一页<%}%>
<%if(intPage<intPageCount){%><a href="listuser.jsp?page=<%=intPage+1%>">下一页</a><%}%>
<%if(intPage>=intPageCount){%>下一页<%}%>
<a href="listuser.jsp?page=<%=intPageCount%>">尾页</a>
第<input type="text" class="main" name="page" size="3" value="<%=intPage%>" tabindex="1">页<input type="submit" class="main" value="go" name="B1" tabindex="2"><class="main">
</td></tr></table></form>


<table border="1" width="100%" cellspacing="0" bordercolorlight="#000000"
bordercolordark="#FFFFFF" class="main">
<tr bgcolor="#FFEBAD">
<td >
<div align="left">用户名</div>
</td>
<td >
<p align="center">Email
</td>
<td >
<p align="center">主页
</td>
<td>
<p align="center">登记时间
</td>
<td>
<p align="center">说明
</td>
</tr>
<%
//显示数据
i = 0;
while(i<intPageSize && result.next()){
%>
<tr bgcolor="#FFEBAD">
<td>
<div align="left"><%=result.getString("username") %></div></td>
<td><div align="center"><%=result.getString("email") %></a></div></td>
<td><div align="center"><font color="#0000CC"><%=result.getString("homepage") %></font></div></td>
<td><div align="center"><font color="#FF6666"><%=result.getDate("regtime") %></font></div></td>
<td><div align="center"><font color="#0000FF"><%=result.getString("signs") %></font></div></td></tr>
<%
i++;
}
%>
</table>
<% result.close(); //关闭结果集%>
</body>
</html>

donewuser.jsp

<%@ page contentType="text/html;charset=gb2312"%>
<% response.setHeader("Expires","0"); %>
<!--生成一个JavaBean:lyf.adduser的实例,id为adduser,生存范围为page-->
<jsp:useBean id="adduser" class="rkind.adduser" scope="page"/>

   <!--设置JavaBean中各个属性的值,这会调用JavaBean中各个属性的set方法,以便JavaBean得到正确的属性值,”*”代表进行所有属性的匹配-->

<jsp:setProperty name="adduser" property="*"/>
<html>
<head>
<meta http-equiv="Content-Language" content="zh-cn">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 3.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>用户添加</title>
</head>
<body bgcolor="#FFEBBD">
<div align="center"><center>
<%
//调用lyf.adduser的checkUser()方法检查是否有重复的用户名

//如果有重复就显示对应的信息

if(!adduser.checkUser())
{
//页面文字输出信息,使用jsp内置对象out的println方法,相当于asp中的response.write方法

out.println("对不起,这个用户名"+adduser.getUsername()+"已经被申请了,请重新选择!");
//return代表返回,运行时候碰到return就不会进行下面的处理了,功能相当于asp中的response.end

return;
}
%>
<%
//如果没有用户名重复的问题,调用lyf.adduser的addNewUser()方法来将用户数据添加到数据库中,并根据数据添加成功否来显示对应的信息
if(adduser.addNewUser()){
%>
<H2>添加用户成功!</P>
<%}else{%>
<H2>添加用户失败,请和管理员联系!</P>
<%}%>
</BODY>
</HTML>

posted @ 2005-10-27 12:56 rkind 阅读(1249) | 评论 (0)编辑 收藏

今天在用java实现远程连接mysql数据库后,我打算做一个用servlet实现登录注册功能,

平台是xp+mysql+tomcat4

从网上搜了一下:从一篇叫::::<<<Servlet学习笔记(四)-----使用Servlet处理用户注册和登陆>>

中搜到了一些源代码,它有两个html页面:分别是login.html和register.html

然后分别调用了两个servlet:LoginForm.java用来实现用户和密码的验证,

和RegisterForm.java用来实现注册,住数据库中添加字段

由于加载的jdbc驱动不同,我加载的是mm.mysql-2.0.4-bin.jar稍微做了修改

遇到的问题

1,给的源码中login页面中的按纽用的是图片,我都把其换成按纽,可是跳转到reigster页面的按钮点击时没有任何反应,换了N次链接地址后,还是不管用,于是把type换成文字结果就OK了,用dreamweaver打开以后发现在表单里button只有提交和重置的功能,而不能用来实现链接页面,

这说明我的html知识太过匮乏,因为主要做的是servlet,就凑合着用吧,以后还得加强html的学习

2在配置好web.xml后,发现点击submit跳转到正确的url,但是servlet并没有起任何作用,

这时有点困惑,不知道从什么地方入手,还是先修改servlet加点print看看执行到哪一步才出的问题,

可是加入以后在ie中还是没有反应,后来才想起来print应该是在tomcat的窗口中输出,一看exception

是连接数据库失败,可是连接没有问题,这点我比较肯定,那肯定是tomcat的jdbc驱动没有加载

于是把mm.mysql-2.0.4-bin.jar拷到tomcat目录下comman/lib目录下,

一测试数据库没问题了,但是抛出一个nullpointer的异常,检查了一下解决了

在这次做的过程中发现自己的基础知识相当缺乏,尤其是html和sql语句,以后要加强学习,同时感觉自己效率太低了.

posted @ 2005-10-27 12:56 rkind 阅读(550) | 评论 (0)编辑 收藏
仅列出标题
共8页: 上一页 1 2 3 4 5 6 7 8 下一页