﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-雅典之夏的小站-随笔分类-JSP&amp;Servlet</title><link>http://www.blogjava.net/rkind/category/4179.html</link><description>&lt;font size=5 align=right&gt;知人者智  自知者明
Fighting!!&lt;/font&gt;</description><language>zh-cn</language><lastBuildDate>Wed, 28 Feb 2007 07:51:03 GMT</lastBuildDate><pubDate>Wed, 28 Feb 2007 07:51:03 GMT</pubDate><ttl>60</ttl><item><title>js简单入门</title><link>http://www.blogjava.net/rkind/archive/2006/10/26/77374.html</link><dc:creator>rkind</dc:creator><author>rkind</author><pubDate>Thu, 26 Oct 2006 04:09:00 GMT</pubDate><guid>http://www.blogjava.net/rkind/archive/2006/10/26/77374.html</guid><wfw:comment>http://www.blogjava.net/rkind/comments/77374.html</wfw:comment><comments>http://www.blogjava.net/rkind/archive/2006/10/26/77374.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rkind/comments/commentRss/77374.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rkind/services/trackbacks/77374.html</trackback:ping><description><![CDATA[
		<p>
				<strong>1、插入和包含</strong>
				<br />   1）   js,一般都放在head之间、注释的作用是当客户端浏览器版本过低时，不能识别而发生错误<br /><font size="2"><font face="Verdana"><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">script </span><span style="COLOR: #ff0000">language</span><span style="COLOR: #0000ff">="JavaScript"</span><span style="COLOR: #0000ff">&gt;</span></font></font><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br /></span><font size="2"><font face="Verdana"><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&lt;!--</span></font></font><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br /><font face="Verdana" size="2">document.write( </font></span><font size="2"><font face="Verdana"><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><font color="#000000">Hello</font> World!</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span></font></font><font size="2"><font face="Verdana"><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">);<br /></span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">//</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">--&gt;</span></font></font><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5"><br /></span><font size="2"><font face="Verdana"><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">script</span><span style="COLOR: #0000ff">&gt;<br /><font color="#000000"><font size="3"> 2）另外你也可以编辑.js文件，然后在页面里面直接引用就可以了</font><br /></font>&lt;head&gt;<br />&lt;meta http-equiv="Content-Type" content="text/html; charset=gb2312"&gt;<br />&lt;title&gt;javascript&lt;/title&gt;&lt;script language="javascript"src="Untitled-2.js"&gt;&lt;/script&gt;</span></font></font><font size="2"><font face="Verdana"><span style="COLOR: #0000ff">&lt;/head&gt;<br /><hr /></span></font></font></p>
		<p>
		</p>
		<strong>2、write</strong>
		<br />  在js中要显示字符，需要用document.write()的形式，writeln区别就是再write的基础上加入了换行<br /><hr />
3、如例<br />document.write("Hello World!");<br />document.write("test"+document.lastModified);<br />document.bgColor = " black " <br />其中，document是对象，write是method,输出字符可以用加的形式，,可以在js里面设定页面的背景<br /><hr />
4、提示框<br />   1）window.alert("testtesttest")<br />    弹出窗口<br />   2）window.confirm("test")<br />   3)有输入框的提示框<br />        window.prompt("test")<br />一不小心双击了标签了，写的全都没了！！！后面的不写了，写js时一定要注意“”   ’号的运用！<br /><br />js的功能是超级强大的，运用还是要靠脑筋的，<img src ="http://www.blogjava.net/rkind/aggbug/77374.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rkind/" target="_blank">rkind</a> 2006-10-26 12:09 <a href="http://www.blogjava.net/rkind/archive/2006/10/26/77374.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>实现在jsp中的文件下载</title><link>http://www.blogjava.net/rkind/archive/2006/02/21/31810.html</link><dc:creator>rkind</dc:creator><author>rkind</author><pubDate>Tue, 21 Feb 2006 07:58:00 GMT</pubDate><guid>http://www.blogjava.net/rkind/archive/2006/02/21/31810.html</guid><wfw:comment>http://www.blogjava.net/rkind/comments/31810.html</wfw:comment><comments>http://www.blogjava.net/rkind/archive/2006/02/21/31810.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rkind/comments/commentRss/31810.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rkind/services/trackbacks/31810.html</trackback:ping><description><![CDATA[一直以来，认为实现这种上传要比下载简单的多，可是等到真正去实现的时候，才发现原来挺麻烦的<BR>遇到的问题有：<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1中文文件名的问题。<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2文件没有下载提示直接就打开，包括rar的。<BR><BR>就这么两个小问题却让我花了三天的时间，不得不汗一下我的效率。<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;首先来说中文链接的问题，tomcat默认是不支持中文URL的，但是可以在Sever.xml中把&nbsp;Connector 的属性加上一条：&nbsp;&nbsp;&nbsp;URIEncoding="GBK"；然后在传递之前，链接的中文还要先encode一下<BR>例如：java.net.URLEncoder.encode（“测试.txt”）;&nbsp;&nbsp;&nbsp;这样中文就会变成％D％F之类的，总之就可以正常传递了。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;而关于点击文件直接就打开了是比较郁闷，查找了些资料，也试了网上的一些方法，一直不行<BR>，最后采用的文件流的方式，才顺利解决。代码大致如下：<BR><BR><BR>while(rs.next()){<BR>&nbsp;&nbsp;try{<BR>&nbsp;&nbsp;OutputStream o=response.getOutputStream();<BR>&nbsp;&nbsp;byte b[]=new byte[500];<BR>&nbsp;&nbsp;filename=rs.getString("filename");//rs.为从数据库查找到的结果集<BR>&nbsp;&nbsp;filename=java.net.URLEncoder.encode(filename).trim();<BR>&nbsp;&nbsp;File file=new File("d:/upload/20060221/",rs.getString("filename"));<BR>&nbsp;&nbsp;// <BR>&nbsp;&nbsp;response.setHeader("Content-Disposition","attachment; filename="+filename);&nbsp;<BR>&nbsp;&nbsp;response.setContentType("APPLICATION/OCTET-STREAM");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;long fileLength=file.length();<BR>&nbsp;&nbsp;&nbsp; &nbsp;String length=String.valueOf(fileLength);<BR>&nbsp;&nbsp;&nbsp; &nbsp;response.setHeader("Content_Length",length);<BR>&nbsp;&nbsp;&nbsp; &nbsp;java.io.FileInputStream in = new java.io.FileInputStream(file);<BR>&nbsp;&nbsp;int n=0;<BR>&nbsp;&nbsp;&nbsp;while ((n=in.read(b)) != -1) { <BR>&nbsp; &nbsp;&nbsp;&nbsp;o.write(b,0,n); <BR>&nbsp;&nbsp;&nbsp;} <BR>&nbsp;&nbsp;&nbsp;in.close();<BR>&nbsp;&nbsp;o.close();<BR>&nbsp;&nbsp;}catch(Exception e){<BR>&nbsp;&nbsp;&nbsp;System.out.print(e);<BR>&nbsp;&nbsp;}<BR>&nbsp;}<BR>&nbsp;rs.close();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>这样的话，中英文文件都能正常下载并使用，但是中文文件用Ie直接下载下来后文件名还是乱码，用下载工具则一切正常。<img src ="http://www.blogjava.net/rkind/aggbug/31810.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rkind/" target="_blank">rkind</a> 2006-02-21 15:58 <a href="http://www.blogjava.net/rkind/archive/2006/02/21/31810.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用图片做submit提交</title><link>http://www.blogjava.net/rkind/archive/2006/01/04/26546.html</link><dc:creator>rkind</dc:creator><author>rkind</author><pubDate>Wed, 04 Jan 2006 05:58:00 GMT</pubDate><guid>http://www.blogjava.net/rkind/archive/2006/01/04/26546.html</guid><wfw:comment>http://www.blogjava.net/rkind/comments/26546.html</wfw:comment><comments>http://www.blogjava.net/rkind/archive/2006/01/04/26546.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rkind/comments/commentRss/26546.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rkind/services/trackbacks/26546.html</trackback:ping><description><![CDATA[<P>&lt;form action="submit_1.html" method=post&gt;<BR>&lt;input type=image src="exa.gif" name="sub1"&gt;<BR>&lt;/form&gt;<BR><BR>就是这简单</P><img src ="http://www.blogjava.net/rkind/aggbug/26546.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rkind/" target="_blank">rkind</a> 2006-01-04 13:58 <a href="http://www.blogjava.net/rkind/archive/2006/01/04/26546.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>滚动公告栏的实现</title><link>http://www.blogjava.net/rkind/archive/2005/11/02/17751.html</link><dc:creator>rkind</dc:creator><author>rkind</author><pubDate>Wed, 02 Nov 2005 00:43:00 GMT</pubDate><guid>http://www.blogjava.net/rkind/archive/2005/11/02/17751.html</guid><wfw:comment>http://www.blogjava.net/rkind/comments/17751.html</wfw:comment><comments>http://www.blogjava.net/rkind/archive/2005/11/02/17751.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rkind/comments/commentRss/17751.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rkind/services/trackbacks/17751.html</trackback:ping><description><![CDATA[<P>滚动公告栏的实现<BR>用到如下html标签：<BR>
《MARQUEE id=mar onmouseout=this.start(); direction=up height=150 name="mar" <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; onmouseover="this.stop();" scrollAmount="1" scrollDelay="0" <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; style="LINE-HEIGHT: 100%; PADDING-LEFT: 0px; PADDING-RIGHT:0px"width="100%"&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN class=style2><SPAN class=style3>1净化社会环境<BR><BR>2也是净化社会平步青云<BR><BR>3净化社会环境<BR><BR>4也是净化社会平步青云<BR><BR>5净化社会环境<BR><BR>6也是净化社会平步青云<BR><BR>7净化社会环境<BR><BR>8也是净化社会平步青云</SPAN> </SPAN><BR>&nbsp;&nbsp;&nbsp;</MARQUEE></P>
<P>其中marquee中height中的属性可以更改每次显示的行数，……</P>
<MARQUEE id=mar onmouseover=this.stop(); style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; LINE-HEIGHT: 100%" onmouseout=this.start(); scrollAmount=1 scrollDelay=0 direction=up width="100%" height=50 name="mar"><SPAN class=style2><SPAN class=style3>1净化社会环境<BR>2也是净化社会平步青云<BR>3净化社会环境<BR>4也是净化社会平步青云<BR>5净化社会环境<BR>6也是净化社会平步青云<BR>7净化社会环境<BR>8也是净化社会平步青云</SPAN> </SPAN></MARQUEE><img src ="http://www.blogjava.net/rkind/aggbug/17751.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rkind/" target="_blank">rkind</a> 2005-11-02 08:43 <a href="http://www.blogjava.net/rkind/archive/2005/11/02/17751.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>解决JSP中rs.getString （）的换行问题及当一行中文过长时撑开表格的问题 </title><link>http://www.blogjava.net/rkind/archive/2005/10/27/17025.html</link><dc:creator>rkind</dc:creator><author>rkind</author><pubDate>Thu, 27 Oct 2005 05:04:00 GMT</pubDate><guid>http://www.blogjava.net/rkind/archive/2005/10/27/17025.html</guid><wfw:comment>http://www.blogjava.net/rkind/comments/17025.html</wfw:comment><comments>http://www.blogjava.net/rkind/archive/2005/10/27/17025.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rkind/comments/commentRss/17025.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rkind/services/trackbacks/17025.html</trackback:ping><description><![CDATA[<P><FONT size=4>最近用JSP做新闻发布时发现，用rs.getString()获得的字符串里面空格和换行都表现不出来，</FONT></P>
<P><FONT size=4>先分析原因，我用的是Mysql数据库，新闻内容采用的是Text类型，查看数据库中上传的新闻发现里面换行和空格都能表现出来，这就说明，肯定是用Rs.getstring时显示的问题，先查看了Java.sql.*的Api想用别的Get方法，试了几个结果都不行，</FONT></P>
<P><FONT size=4>网上也有这样类似的问题，但大多是在Servlet里面或者Bean里面专门的做一个函数解决的，我觉得这样做很复杂</FONT></P>
<P><FONT size=4>最后终于找到了的解决方法，在调用Rs.getstring的页面里面的表格中加入style="word-break:break-all"</FONT></P>
<P><FONT size=4>并用<STRONG>&lt;pre&gt;rs.getString()&lt;&gt;</STRONG>标签来显示就解决了换行的问题。其中<STRONG>&lt;pre&gt;&lt;/pre&gt;</STRONG>这句话一定不能少</FONT></P>
<P><FONT size=4>然而加入这些以后，当一行内容过长时，表格依然会被撑开，需要在表格胡Style属性修改成</FONT><FONT size=2><STRONG>style="table-layout: fixed; word-wrap: break-word" 这样才能真正解决中文撑开表格的问题。</STRONG></FONT></P><BR><img src ="http://www.blogjava.net/rkind/aggbug/17025.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rkind/" target="_blank">rkind</a> 2005-10-27 13:04 <a href="http://www.blogjava.net/rkind/archive/2005/10/27/17025.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>解决当FORM的ENCTYPE="multipart/form-data" 时request.getParameter()获取不到值的方法 </title><link>http://www.blogjava.net/rkind/archive/2005/10/27/17019.html</link><dc:creator>rkind</dc:creator><author>rkind</author><pubDate>Thu, 27 Oct 2005 05:01:00 GMT</pubDate><guid>http://www.blogjava.net/rkind/archive/2005/10/27/17019.html</guid><wfw:comment>http://www.blogjava.net/rkind/comments/17019.html</wfw:comment><comments>http://www.blogjava.net/rkind/archive/2005/10/27/17019.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rkind/comments/commentRss/17019.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rkind/services/trackbacks/17019.html</trackback:ping><description><![CDATA[<P>今天在原来上传文件页面的基础上，想添加一段文件的简介</P>
<P>因为同时要上传文件，所以ENCTYPE="multipart/form-data" 必须要加在form里面</P>
<P>可是这样的话，我再servlet里面用request.getParameter()方法无论如何都只是获得null值，</P>
<P>不是一般的郁闷，百度了一下，有人出现了同样的问题可是它用的是jspsmartupload组件实现文件上传的，</P>
<P>而我用的commons fileupload组件，仔细看了一下这个组件的api，可是英语太差了，没有发现相关的信息</P>
<P>我又尝试用session传递参数，可是发现有点麻烦，因为在表单提交之时你就得赋给session表单上它的数值，</P>
<P>这似乎要javascript，可是偶也不会，</P>
<P>后来只有google了，搜索了一些中文网页，也没有找到资料，试试不限制语言，呵呵呵，一大片，后来被俺发</P>
<P>现了这个</P>
<P><FONT face=Verdana size=2>I cannot read the submitter using request.getParameter("submitter") (it returns null). ] </FONT></P><PRE>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.
</PRE><PRE>说是不详细，接着往下看，另一种解决方法</PRE><PRE><FONT face=Verdana size=2>&gt; Solution B:<BR>&gt; 1. download <BR>&gt; http://jakarta.apache.org/commons/sandbox/fileupload/<BR>&gt; 2. invoke readHeaders() in <BR>&gt; org.apache.commons.fileupload.MultipartStream<BR><BR>The Solution B as given by my dear friend is a bit hectic and a bit complex :(<BR>We can try the following solution which I found much simpler (at least in usage).<BR><BR>1. Download one of the versions of UploadFile from http://jakarta.apache.org/commons/fileupload/<BR>2. Invoke parseRequest(request) on org.apache.commons.fileupload.FileUploadBase which returns list of org.apache.commons.fileupload.FileItem objects. <BR>3. Invoke isFormField() on each of the FileItem objects. This determines whether the file item is a form paramater or stream of uploaded file. <BR>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. </FONT><BR></PRE><PRE>按照上面的步骤来，果然一切都ok，ＧＯＯＧＬＥ真不错，主要是getFieldName和getString，</PRE><PRE>虽然说这种做法有一点麻烦，但稍微判断加工一下，总比获取不到强<BR></PRE><img src ="http://www.blogjava.net/rkind/aggbug/17019.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rkind/" target="_blank">rkind</a> 2005-10-27 13:01 <a href="http://www.blogjava.net/rkind/archive/2005/10/27/17019.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用servlet实现登录注册功能时遇到的问题和解决方法 </title><link>http://www.blogjava.net/rkind/archive/2005/10/27/17011.html</link><dc:creator>rkind</dc:creator><author>rkind</author><pubDate>Thu, 27 Oct 2005 04:56:00 GMT</pubDate><guid>http://www.blogjava.net/rkind/archive/2005/10/27/17011.html</guid><wfw:comment>http://www.blogjava.net/rkind/comments/17011.html</wfw:comment><comments>http://www.blogjava.net/rkind/archive/2005/10/27/17011.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rkind/comments/commentRss/17011.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rkind/services/trackbacks/17011.html</trackback:ping><description><![CDATA[<P>今天在用java实现远程连接mysql数据库后,我打算做一个用servlet实现登录注册功能，</P>
<P>平台是xp+mysql+tomcat4</P>
<P>从网上搜了一下:从一篇叫::::&lt;&lt;&lt;<SPAN id=ArticleTitle1_ArticleTitle1_lblTitle><STRONG>Servlet学习笔记(四)-----使用Servlet处理用户注册和登陆&gt;&gt;</STRONG></SPAN></P>
<P><SPAN>中搜到了一些源代码,它有两个html页面:分别是login.html和register.html</SPAN></P>
<P><SPAN>然后分别调用了两个servlet:<STRONG>LoginForm.java</STRONG>用来实现用户和密码的验证,</SPAN></P>
<P><SPAN>和RegisterForm.java用来实现注册,住数据库中添加字段</SPAN></P>
<P><SPAN>由于加载的jdbc驱动不同,我加载的是mm.mysql-2.0.4-bin.jar稍微做了修改</SPAN></P>
<P><SPAN><STRONG><FONT size=4>遇到的问题</FONT></STRONG></SPAN></P>
<P><SPAN>1,给的源码中login页面中的按纽用的是图片，我都把其换成按纽，可是跳转到reigster页面的按钮点击时没有任何反应，换了Ｎ次链接地址后，还是不管用，于是把type换成文字结果就ＯＫ了，用dreamweaver打开以后发现在表单里button只有提交和重置的功能，而不能用来实现链接页面，</SPAN></P>
<P><SPAN>这说明我的html知识太过匮乏，因为主要做的是servlet，就凑合着用吧，以后还得加强html的学习</SPAN></P>
<P><SPAN>２在配置好web.xml后，发现点击submit跳转到正确的url，但是servlet并没有起任何作用，</SPAN></P>
<P><SPAN>这时有点困惑，不知道从什么地方入手，还是先修改servlet加点print看看执行到哪一步才出的问题，</SPAN></P>
<P><SPAN>可是加入以后在ie中还是没有反应，后来才想起来print应该是在tomcat的窗口中输出，一看exception</SPAN></P>
<P><SPAN>是连接数据库失败，可是连接没有问题，这点我比较肯定，那肯定是tomcat的jdbc驱动没有加载</SPAN></P>
<P><SPAN>于是把mm.mysql-2.0.4-bin.jar拷到tomcat目录下comman/lib目录下，</SPAN></P>
<P><SPAN>一测试数据库没问题了，但是抛出一个nullpointer的异常，检查了一下解决了</SPAN></P>
<P><SPAN>在这次做的过程中发现自己的基础知识相当缺乏，尤其是html和sql语句，以后要加强学习，同时感觉自己效率太低了．</SPAN></P><img src ="http://www.blogjava.net/rkind/aggbug/17011.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rkind/" target="_blank">rkind</a> 2005-10-27 12:56 <a href="http://www.blogjava.net/rkind/archive/2005/10/27/17011.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用jsp+javabean实现用户注册和查看的功能 </title><link>http://www.blogjava.net/rkind/archive/2005/10/27/17012.html</link><dc:creator>rkind</dc:creator><author>rkind</author><pubDate>Thu, 27 Oct 2005 04:56:00 GMT</pubDate><guid>http://www.blogjava.net/rkind/archive/2005/10/27/17012.html</guid><wfw:comment>http://www.blogjava.net/rkind/comments/17012.html</wfw:comment><comments>http://www.blogjava.net/rkind/archive/2005/10/27/17012.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rkind/comments/commentRss/17012.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rkind/services/trackbacks/17012.html</trackback:ping><description><![CDATA[<P>本文主要参考了,<STRONG>JSP+javabean循序渐进</STRONG></P>
<P>开发平台:winxp+tomcat4+mysql+javabean</P>
<P>在实现在了用servlet注册还有登录以后，打算做一个注册页面</P>
<P>首先创建一个表：username VARCHAR2(20) 用户名 <BR>password VARCHAR2(20) 密码 <BR>email VARCHAR2(30) Email地址 <BR>homepage VARCHAR2(50) 主页 <BR>signs VARCHAR2(200) 签名 <BR>regtime DATE 注册时　　　／／这个date我没有实现</P>
<P>主要有三个jsp页面：</P>
<P>addnewuser.jsp，主要用来实现注册用户的界面，</P>
<P>doadduser.jsp 实现填加到数据库中的具体功能</P>
<P>listuser.jsp 来实现显示所有用户信息</P>
<P>两个bean：</P>
<P>db.java实现数据库的操作，主要有两个方法public ResultSet executeQuery(sql)返回rs用来进行记录的查询</P>
<P>public boolean executeUpdate(String sql)用来进行记录的更新</P>
<P>adduser.java继承了db类用来提供所需更新和查询的sql语句;</P>
<P>我直接调用原文的代码时后发现调用了span什么，不太懂，而且有很多字符不对，所以调试时的问题基本上都是html代码的问题.这是一个仅有基本功能，很多方面还需进一步完善，比如实现注册时间（虽然这不难，可是我还没看util.date和sql.date&nbsp;区别），email地址的识别，连登录都没有做　：）　，我发现基于这种bean结构的功能很吸引人，比servlet要好，肤浅之见</P>
<P><STRONG>源码如下：db.java</STRONG></P>
<P>package rkind;<BR>import java.net.*; <BR>import java.sql.*; <BR>import java.lang.*; <BR>import java.io.*; <BR>import java.util.*; <BR>public class db { <BR>//成员变量初始化 <BR>Connection conn = null; //数据库连接 <BR>ResultSet rs = null; //记录集 <BR>String Username=""; //用户名 <BR>String Password=""; //密码 <BR>String Email=""; //email <BR>String Homepage=""; //主页 <BR>String Signs=""; //签名 <BR>String url="jdbc:mysql://172.20.0.73/rk";</P>
<P>//db的构建器 <BR>public db() { <BR>&nbsp;try { <BR>//注册数据库驱动程序为Oracle驱动 <BR>&nbsp;&nbsp;String name="org.gjt.mm.mysql.Driver";<BR>&nbsp;&nbsp;Class.forName(name); <BR>&nbsp;&nbsp;conn = DriverManager.getConnection(url,"root","你的密码");<BR>&nbsp;&nbsp;System.out.println("success");<BR>&nbsp;&nbsp;} <BR>&nbsp;catch(Exception e) { <BR>//这样写是为了方便调试程序，出错打印mydb()就知道在什么地方出错了 <BR>&nbsp;&nbsp;System.err.println("mydb(): " + e.getMessage()); <BR>&nbsp;&nbsp;<BR>&nbsp;} <BR>&nbsp;} </P>
<P>//executeQuery方法用于进行记录的查询操作 </P>
<P>//入口参数为sql语句，返回ResultSet对象 <BR>&nbsp;public ResultSet executeQuery(String sql) { <BR>&nbsp;&nbsp;rs = null; <BR>&nbsp;&nbsp;try { <BR>//建立数据库连接，使用Oracle的一种thin连接方式，demo为主机名字，demodb为数据库，后面的两个 <BR>//demo为用户名和密码 <BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp; <BR>&nbsp;&nbsp;Statement stmt = conn.createStatement(); <BR>//执行数据库查询操作 <BR>&nbsp;&nbsp;rs = stmt.executeQuery(sql); <BR>&nbsp;&nbsp;} <BR>&nbsp;&nbsp;catch(SQLException ex) { <BR>&nbsp;&nbsp;&nbsp;System.err.println("db.executeQuery: " + ex.getMessage()); <BR>&nbsp;&nbsp;} <BR>&nbsp;&nbsp;return rs; <BR>&nbsp;} <BR>//executeUpdate方法用于进行add或者update记录的操作 </P>
<P>//入口参数为sql语句，成功返回true，否则为false <BR>&nbsp;public boolean executeUpdate(String sql) { <BR>&nbsp;&nbsp;boolean bupdate=false; <BR>&nbsp;&nbsp;rs = null; <BR>&nbsp;&nbsp;try { <BR>//建立数据库连接，其它参数说明同上面的一样 <BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;Statement stmt = conn.createStatement(); <BR>&nbsp;&nbsp;int rowCount = stmt.executeUpdate(sql); <BR>//如果不成功，bupdate就会返回0 <BR>&nbsp;&nbsp;if(rowCount!=0)bupdate=true; <BR>&nbsp;&nbsp;} <BR>&nbsp;&nbsp;catch(SQLException ex) { <BR>//打印出错信息 <BR>&nbsp;&nbsp;&nbsp;System.err.println("db.executeUpdate: " + ex.getMessage()); <BR>&nbsp;&nbsp;} <BR>&nbsp;return bupdate; <BR>&nbsp;} </P>
<P>//toChinese方法用于将一个字符串进行中文处理 </P>
<P>//否则将会是???这样的字符串 <BR>&nbsp;public static String toChinese(String strvalue) { <BR>&nbsp;&nbsp;try{ <BR>&nbsp;&nbsp;&nbsp;if(strvalue==null) <BR>&nbsp;&nbsp;{ <BR>&nbsp;&nbsp;return null; <BR>&nbsp;&nbsp;} <BR>&nbsp;&nbsp;else { <BR>&nbsp;&nbsp;&nbsp;strvalue = new String(strvalue.getBytes("ISO8859_1"), "GBK"); <BR>&nbsp;&nbsp;&nbsp;return strvalue; <BR>&nbsp;&nbsp;} <BR>&nbsp;&nbsp;}catch(Exception e){ <BR>&nbsp;&nbsp;&nbsp;return null; <BR>&nbsp;&nbsp;} <BR>&nbsp;} </P>
<P>}</P>
<P><STRONG>adduser.java</STRONG></P>
<P>package rkind;<BR>import java.sql.*; <BR>import java.lang.*; <BR>import java.util.Date;<BR>//adduser由db派生出来，拥有db的成员变量和方法 <BR>&nbsp;public class adduser extends db { <BR>//构建器 <BR>&nbsp;public boolean addNewUser(){ <BR>&nbsp;boolean boadduser=false; <BR>&nbsp;try { <BR>//进行用户注册的记录添加操作，生成sql语句 <BR>&nbsp;<BR>&nbsp;&nbsp;String sSql=new String("insert into demo(username,password,email,homepage, signs)"); <BR>&nbsp;&nbsp;sSql=sSql+ " values('"+Username+"','"+Password+"','"+Email+"','"+Homepage +"','"+Signs+"')"; <BR>//一种调试的方法，可以打印出sql语句，以便于查看错误 <BR>&nbsp;&nbsp;System.out.println(sSql); <BR>//调用父类的executeUpdate方法，并根据成功以否来设置返回值 <BR>&nbsp;&nbsp;if(super.executeUpdate(sSql))boadduser=true; <BR>&nbsp;&nbsp;} <BR>&nbsp;catch(Exception ex) { <BR>//出错处理 <BR>&nbsp;&nbsp;System.err.println("adduser.addNewUser: " + ex.getMessage()); <BR>&nbsp;}finally{ <BR>//无论是否出错，都要返回值 <BR>&nbsp;return boadduser; <BR>&nbsp;} <BR>} </P>
<P>//checkUser()方法用来检查用户名是否重复 </P>
<P>//如果重复返回一个false <BR>&nbsp;public boolean checkUser(){ <BR>&nbsp;&nbsp;boolean boadduser=false; <BR>&nbsp;&nbsp;try { <BR>//构建sql查询语句 <BR>&nbsp;&nbsp;&nbsp;String sSql="select * from demo where username='"+Username+"'";<BR>//调用父类的executeQuery方法 <BR>&nbsp;&nbsp;&nbsp;if((super.executeQuery(sSql)).next()){ <BR>//查询出来的记录集为空 <BR>&nbsp;&nbsp;&nbsp;boadduser=false; <BR>&nbsp;&nbsp;&nbsp;}else{ <BR>&nbsp;&nbsp;&nbsp;&nbsp;boadduser=true; <BR>&nbsp;&nbsp;&nbsp;} <BR>&nbsp;&nbsp;} <BR>&nbsp;&nbsp;catch(Exception ex) { <BR>//出错处理 <BR>&nbsp;&nbsp;&nbsp;System.err.println("adduser.addNewUser: " + ex.getMessage()); <BR>&nbsp;&nbsp;}finally{ <BR>//返回值 <BR>&nbsp;&nbsp;&nbsp;return boadduser; <BR>&nbsp;&nbsp;} <BR>&nbsp;} <BR>&nbsp;public String getUsername(){ return Username;} <BR>&nbsp;public void setUsername(String newUsername){ <BR>//用户名有可能是中文，需要进行转换 <BR>&nbsp;&nbsp;Username =db.toChinese(newUsername);} <BR>//属性密码Password的get/set方法 <BR>&nbsp;&nbsp;public String getPassword(){ <BR>&nbsp;&nbsp;return Password;} <BR>&nbsp;&nbsp;public void setPassword(String newPassword){ Password = newPassword;} <BR>//属性Email的get/set方法 <BR>&nbsp;&nbsp;public String getEmail(){ return Email;} <BR>&nbsp;&nbsp;public void setEmail(String newEmail){ Email = newEmail;} <BR>//属性主页Homepage的get/set方法 <BR>&nbsp;&nbsp;public String getHomepage(){ return Homepage;} <BR>&nbsp;&nbsp;public void setHomepage(String newHomepage){ Homepage = newHomepage;} <BR>//属性主页Signs的get/set方法 <BR>&nbsp;&nbsp;public String getSigns(){ return Signs;} <BR>&nbsp;&nbsp;public void setSigns(String newSigns){ <BR>//签名有可能是中文，需要进行转换 <BR>&nbsp;&nbsp;Signs = db.toChinese(newSigns);} <BR>} <BR><STRONG>newuser.jsp</STRONG></P>
<P>&lt;%@ page contentType="text/html;charset=gb2312"%&gt; <BR>&lt;% response.setHeader("Expires","0"); %&gt; <BR>&lt;html&gt;<BR>&lt;head&gt;<BR>&lt;meta http-equiv="Content-Type" content="text/html; charset=gb2312"&gt; <BR>&lt;meta name="GENERATOR" content="Microsoft FrontPage 4.0"&gt; <BR>&lt;meta name="ProgId" content="FrontPage.Editor.Document"&gt; <BR>&lt;title&gt;新用户注册 &lt;/title&gt;<BR>&lt;/head&gt; <BR>&lt;body bgcolor="#FFFAD9"&gt; <BR>&lt;script language="JavaScript"&gt;</P>
<P>function valid(form)</P>
<P>{<BR>&nbsp;&nbsp;&nbsp; if(form.username.value.length==0)<BR>&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert("Please enter username!");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; form.username.focus();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return false;<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; if(form.Password.value==form.password1.value){<BR>&nbsp;&nbsp;&nbsp; &nbsp;alert("你输入的验证密码不正确");<BR>&nbsp;&nbsp;&nbsp; &nbsp;form.password1.focus();&nbsp;<BR>&nbsp;&nbsp;&nbsp; }<BR>}<BR>&lt;/script&gt;<BR>&lt;p align="center"&gt;&lt;font color="#8484FF"&gt;&lt;strong&gt;&lt;big&gt;新个人 <BR>用户注册 &lt;/font&gt;<BR>&lt;form onsubmit="return valid(this)" method="POST"&nbsp; name="formreg" action="donewuser.jsp"&gt; <BR>&lt;div align="center"&gt;&lt;center&gt;&nbsp; <BR>&lt;table width="49%" height="281" <BR>border="1" <BR>cellspacing="0"&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;tr&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td width="27%" bgcolor="#DDDDFF" align="center"&gt;用户名： <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td width="73%" bgcolor="#DDDDFF"&gt;&lt;input type="text" <BR>name="username" size="20" &gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;font color="#00CCFF"&gt;&lt;b&gt;* &lt;/b&gt;&lt;/font&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; &lt;/tr&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;tr&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td width="27%" bgcolor="#DDDDFF" align="center"&gt;输入密码： <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td width="73%" bgcolor="#DDDDFF"&gt;&lt;input type="password" name="password" size="20" <BR>&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;font color="#FF0000"&gt;&lt;b&gt;* &lt;/b&gt;&lt;/font&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; &lt;/tr&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;tr&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td width="27%" bgcolor="#DDDDFF" align="center"&gt;校验密码： <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td width="73%" bgcolor="#DDDDFF"&gt;&lt;input type="password" name="password1" size="20" <BR>&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;font color="#FF0000"&gt;&lt;b&gt;* &lt;/b&gt;&lt;/font&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; &lt;/tr&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;tr&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td width="27%" bgcolor="#DDDDFF" align="center"&gt;E-mail <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td width="73%" bgcolor="#DDDDFF"&gt;&lt;input type="text" name="email" size="20" &gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;font color="#FF0000"&gt;* &lt;/font&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; &lt;/tr&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;tr&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td width="27%" bgcolor="#DDDDFF" align="center"&gt;主页地址： <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td width="73%" bgcolor="#DDDDFF"&gt;&lt;input type="text" name="homepage" size="20" <BR>&nbsp;value="http://"&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/tr&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;tr&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td width="100%" height="20" colspan="2" bgcolor="#DDDDFF"&gt;&lt;br&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;center&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;font color="red"&gt;&lt;b&gt;介绍自己： （介绍自己，不能超过120字）&lt;/span&gt;&lt;/b&gt;&lt;/font&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/center&gt;&nbsp;&nbsp;&nbsp; &lt;/tr&gt;<BR>&nbsp; &lt;td width="70%"&gt;<BR>&nbsp; &lt;tr&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;td&gt;&lt;textarea rows="6" <BR>name="signs" cols="30" &gt;&lt;/textarea&gt;<BR>&nbsp; &lt;/tr&gt;<BR>&nbsp; &lt;tr&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;td width="30%" bgcolor="#DDDDFF" colspan="2"&gt;&lt;center&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;p&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;input <BR>type="submit" value="递交" onClick="return checkmsg();" name="B1" &gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;input type="reset" value="清除" name="B2" &gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/center&gt;<BR>&nbsp; &lt;/tr&gt;<BR>&nbsp; &lt;/table&gt;<BR>&nbsp; &lt;/div&gt;</P>
<P>&lt;/form&gt; </P>
<P>&lt;hr size="1" color="#FF0000"&gt; <BR>&lt;p align="center"&gt;Better View:800*600 Best View:1024x768 <BR>为了本系统能够更好的为您服务，请使用IE4.0或以上版本浏览器 <BR>&lt;font color="#000000"&gt;&lt;/font&gt;&lt;a href="javascript:%20newGuide("copyright.htm")" <BR>target="_self"&gt;版权所有 &lt;/a&gt;</P>
<P><BR>&lt;/body&gt;<BR>&lt;/html&gt;</P>
<P><STRONG>listuser.jsp</STRONG></P>
<P>&lt;%@ page contentType="text/html;charset=gb2312"%&gt;<BR>&lt;% response.setHeader("Expires","0"); %&gt;<BR>&lt;%@ page import="java.sql.ResultSet" %&gt;<BR>&lt;%@ page import="org.gjt.mm.mysql.Driver.*" %&gt;<BR>&lt;!--生成一个JavaBean:lyf.db的实例--&gt;<BR>&lt;jsp:useBean id="db" class="rkind.db" scope="request"/&gt;<BR>&lt;jsp:setProperty name="db" property="*"/&gt;<BR>&lt;%</P>
<P>java.lang.String strSQL; //SQL语句 </P>
<P>int intPageSize; //一页显示的记录数 <BR>int intRowCount; //记录总数 <BR>int intPageCount; //总页数 <BR>int intPage; //待显示页码 <BR>java.lang.String strPage; <BR>int i,j,k; <BR>//设置一页显示的记录数 <BR>intPageSize = 15; <BR>//取得待显示页码 <BR>strPage = request.getParameter("page"); <BR>if(strPage==null){//表明在QueryString中没有page这一个参数，此时显示第一页数据 <BR>intPage = 1; <BR>} <BR>else{//将字符串转换成整型 <BR>intPage = java.lang.Integer.parseInt(strPage); <BR>if(intPage&lt;1) intPage = 1; <BR>} <BR>//获取记录总数 <BR>strSQL = "select count(*) from demo"; <BR>ResultSet result = db.executeQuery(strSQL); //执行SQL语句并取得结果集 <BR>result.next(); //记录集刚打开的时候，指针位于第一条记录之前 <BR>intRowCount = result.getInt(1); <BR>result.close(); //关闭结果集 <BR>//记算总页数 <BR>intPageCount = (intRowCount+intPageSize-1) / intPageSize; <BR>//调整待显示的页码 <BR>if(intPage&gt;intPageCount) intPage = intPageCount; <BR>strSQL="select * from demo "; <BR>//执行SQL语句并取得结果集 <BR>result = db.executeQuery(strSQL); <BR>//将记录指针定位到待显示页的第一条记录上 <BR>i = (intPage-1) * intPageSize; <BR>for(j=0;j&lt;i;j++) result.next(); <BR>%&gt; <BR>&lt;html&gt; <BR>&lt;head&gt; <BR>&lt;meta http-equiv="Content-Language" content="zh-cn"&gt; <BR>&lt;meta http-equiv="Content-Type" content="text/html; charset=gb2312"&gt; <BR>&lt;meta name="GENERATOR" content="Microsoft FrontPage 3.0"&gt; <BR>&lt;meta name="ProgId" content="FrontPage.Editor.Document"&gt; <BR>&lt;title&gt;用户列表&lt;/title&gt; <BR>&lt;/head&gt; <BR>&lt;body bgcolor="#FFEBBD"&gt; <BR>&lt;div align="center"&gt;&lt;center&gt; <BR>&lt;table border="1" <BR>borderColorDark="#FFFFFF" borderColorLight="#000000" cellspacing="0" height="22" <BR>width="100%"&gt; <BR>&lt;tr bgcolor="#FFEBAD"&gt; <BR>&lt;td height="1" width="691" class="main"&gt; <BR>第&lt;%=intPage%&gt;页 共&lt;%=intPageCount%&gt;页 <BR>&lt;a href="listuser.jsp?page=0"&gt;首页&lt;/a&gt; <BR>&lt;%if(intPage&gt;1){%&gt;&lt;a href="listuser.jsp?page=&lt;%=intPage-1%&gt;"&gt;上一页&lt;/a&gt;&lt;%}%&gt; <BR>&lt;%if(intPage&lt;=1){%&gt;上一页&lt;%}%&gt; <BR>&lt;%if(intPage&lt;intPageCount){%&gt;&lt;a href="listuser.jsp?page=&lt;%=intPage+1%&gt;"&gt;下一页&lt;/a&gt;&lt;%}%&gt; <BR>&lt;%if(intPage&gt;=intPageCount){%&gt;下一页&lt;%}%&gt; <BR>&lt;a href="listuser.jsp?page=&lt;%=intPageCount%&gt;"&gt;尾页&lt;/a&gt; <BR>第&lt;input type="text" class="main" name="page" size="3" value="&lt;%=intPage%&gt;" tabindex="1"&gt;页&lt;input type="submit" class="main" value="go" name="B1" tabindex="2"&gt;&lt;class="main"&gt; <BR>&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/form&gt; </P>
<P><BR>&lt;table border="1" width="100%" cellspacing="0" bordercolorlight="#000000" <BR>bordercolordark="#FFFFFF" class="main"&gt; <BR>&lt;tr bgcolor="#FFEBAD"&gt; <BR>&lt;td &gt; <BR>&lt;div align="left"&gt;用户名&lt;/div&gt; <BR>&lt;/td&gt; <BR>&lt;td &gt; <BR>&lt;p align="center"&gt;Email <BR>&lt;/td&gt; <BR>&lt;td &gt; <BR>&lt;p align="center"&gt;主页 <BR>&lt;/td&gt; <BR>&lt;td&gt; <BR>&lt;p align="center"&gt;登记时间 <BR>&lt;/td&gt; <BR>&lt;td&gt; <BR>&lt;p align="center"&gt;说明 <BR>&lt;/td&gt; <BR>&lt;/tr&gt; <BR>&lt;% <BR>//显示数据 <BR>i = 0; <BR>while(i&lt;intPageSize &amp;&amp; result.next()){ <BR>%&gt; <BR>&lt;tr bgcolor="#FFEBAD"&gt; <BR>&lt;td&gt; <BR>&lt;div align="left"&gt;&lt;%=result.getString("username") %&gt;&lt;/div&gt;&lt;/td&gt; <BR>&lt;td&gt;&lt;div align="center"&gt;&lt;%=result.getString("email") %&gt;&lt;/a&gt;&lt;/div&gt;&lt;/td&gt; <BR>&lt;td&gt;&lt;div align="center"&gt;&lt;font color="#0000CC"&gt;&lt;%=result.getString("homepage") %&gt;&lt;/font&gt;&lt;/div&gt;&lt;/td&gt; <BR>&lt;td&gt;&lt;div align="center"&gt;&lt;font color="#FF6666"&gt;&lt;%=result.getDate("regtime") %&gt;&lt;/font&gt;&lt;/div&gt;&lt;/td&gt; <BR>&lt;td&gt;&lt;div align="center"&gt;&lt;font color="#0000FF"&gt;&lt;%=result.getString("signs") %&gt;&lt;/font&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt; <BR>&lt;% <BR>i++; <BR>} <BR>%&gt; <BR>&lt;/table&gt; <BR>&lt;% result.close(); //关闭结果集%&gt; <BR>&lt;/body&gt; <BR>&lt;/html&gt; <BR></P>
<P><STRONG>donewuser.jsp</STRONG></P>
<P>&lt;%@ page contentType="text/html;charset=gb2312"%&gt; <BR>&lt;% response.setHeader("Expires","0"); %&gt; <BR>&lt;!--生成一个JavaBean:lyf.adduser的实例，id为adduser，生存范围为page--&gt; <BR>&lt;jsp:useBean id="adduser" class="rkind.adduser" scope="page"/&gt; </P>
<P>　　 &lt;!--设置JavaBean中各个属性的值，这会调用JavaBean中各个属性的set方法，以便JavaBean得到正确的属性值，”*”代表进行所有属性的匹配--&gt; </P>
<P>&lt;jsp:setProperty name="adduser" property="*"/&gt; <BR>&lt;html&gt; <BR>&lt;head&gt; <BR>&lt;meta http-equiv="Content-Language" content="zh-cn"&gt; <BR>&lt;meta http-equiv="Content-Type" content="text/html; charset=gb2312"&gt; <BR>&lt;meta name="GENERATOR" content="Microsoft FrontPage 3.0"&gt; <BR>&lt;meta name="ProgId" content="FrontPage.Editor.Document"&gt; <BR>&lt;title&gt;用户添加&lt;/title&gt; <BR>&lt;/head&gt; <BR>&lt;body bgcolor="#FFEBBD"&gt; <BR>&lt;div align="center"&gt;&lt;center&gt; <BR>&lt;% <BR>//调用lyf.adduser的checkUser()方法检查是否有重复的用户名 </P>
<P>//如果有重复就显示对应的信息 </P>
<P>if(!adduser.checkUser()) <BR>{ <BR>//页面文字输出信息，使用jsp内置对象out的println方法，相当于asp中的response.write方法 </P>
<P>out.println("对不起，这个用户名"+adduser.getUsername()+"已经被申请了，请重新选择！"); <BR>//return代表返回，运行时候碰到return就不会进行下面的处理了，功能相当于asp中的response.end </P>
<P>return; <BR>} <BR>%&gt; <BR>&lt;% <BR>//如果没有用户名重复的问题，调用lyf.adduser的addNewUser()方法来将用户数据添加到数据库中，并根据数据添加成功否来显示对应的信息 <BR>if(adduser.addNewUser()){ <BR>%&gt; <BR>&lt;H2&gt;添加用户成功！&lt;/P&gt; <BR>&lt;%}else{%&gt; <BR>&lt;H2&gt;添加用户失败，请和管理员联系！&lt;/P&gt; <BR>&lt;%}%&gt; <BR>&lt;/BODY&gt; <BR>&lt;/HTML&gt;</P><img src ="http://www.blogjava.net/rkind/aggbug/17012.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rkind/" target="_blank">rkind</a> 2005-10-27 12:56 <a href="http://www.blogjava.net/rkind/archive/2005/10/27/17012.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用servlet编写的文件上传程序</title><link>http://www.blogjava.net/rkind/archive/2005/10/27/16998.html</link><dc:creator>rkind</dc:creator><author>rkind</author><pubDate>Thu, 27 Oct 2005 04:43:00 GMT</pubDate><guid>http://www.blogjava.net/rkind/archive/2005/10/27/16998.html</guid><wfw:comment>http://www.blogjava.net/rkind/comments/16998.html</wfw:comment><comments>http://www.blogjava.net/rkind/archive/2005/10/27/16998.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rkind/comments/commentRss/16998.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rkind/services/trackbacks/16998.html</trackback:ping><description><![CDATA[<P>采用了tomcat发布,调用了jarkarta的一个common-fileup组件,</P>
<P>着先配置好classpath,加上servlet.jar和commons-fileupload-1.0.jar,</P>
<P>然后把commons-fileupload-1.0.jar放到root下的web-inf/lib/下</P>
<P>编写up.java并编绎,放到web-inf/classes目录下</P>
<P>import javax.servlet.*;<BR>import javax.servlet.http.*;<BR>import java.io.*;<BR>import java.util.*;<BR>import java.util.regex.*;<BR>import org.apache.commons.fileupload.*;</P>
<P><BR>public class up extends HttpServlet {<BR>&nbsp; private static final String CONTENT_TYPE = "text/html; charset=GB2312";<BR>&nbsp; //Process the HTTP Post request<BR>&nbsp; public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {<BR>&nbsp;&nbsp;&nbsp; response.setContentType(CONTENT_TYPE);<BR>&nbsp;&nbsp;&nbsp; PrintWriter out=response.getWriter();<BR>&nbsp;&nbsp;&nbsp; try {<BR>&nbsp;&nbsp;&nbsp; DiskFileUpload fu = new DiskFileUpload();<BR>&nbsp;// 设置允许用户上传文件大小,单位:字节，这里设为2m<BR>&nbsp;fu.setSizeMax(2*1024*1024);<BR>&nbsp;// 设置最多只允许在内存中存储的数据,单位:字节<BR>&nbsp;fu.setSizeThreshold(4096);<BR>&nbsp;// 设置一旦文件大小超过getSizeThreshold()的值时数据存放在硬盘的目录<BR>&nbsp;fu.setRepositoryPath("c:\\windows\\temp");<BR>&nbsp;//开始读取上传信息<BR>&nbsp;List fileItems = fu.parseRequest(request);<BR>&nbsp;// 依次处理每个上传的文件<BR>&nbsp;&nbsp; Iterator iter = fileItems.iterator();</P>
<P>//正则匹配，过滤路径取文件名<BR>&nbsp;&nbsp; String regExp=".+\\\\(.+)$";</P>
<P>//过滤掉的文件类型<BR>String[] errorType={".exe",".com",".cgi",".asp"};<BR>&nbsp;&nbsp; Pattern p = Pattern.compile(regExp);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (iter.hasNext()) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FileItem item = (FileItem)iter.next();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //忽略其他不是文件域的所有表单信息<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!item.isFormField()) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String name = item.getName();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; long size = item.getSize();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if((name==null||name.equals("")) &amp;&amp; size==0)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; continue;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Matcher m = p.matcher(name);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; boolean result = m.find();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (result){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int temp=0;temp&lt;errorType.length;temp++){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (m.group(1).endsWith(errorType[temp])){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw new IOException(name+": wrong type");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try{</P>
<P>//保存上传的文件到指定的目录</P>
<P>//在下文中上传文件至数据库时，将对这里改写<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; item.write(new File("d:\\" + m.group(1)));</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.print(name+"&amp;nbsp;&amp;nbsp;"+size+"&lt;br&gt;");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch(Exception e){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.println(e);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw new IOException("fail to upload");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp; }<BR>}<BR>&nbsp;catch (IOException e){<BR>&nbsp;&nbsp; out.println(e);<BR>&nbsp;}<BR>&nbsp;catch (FileUploadException e){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.println(e);<BR><BR>&nbsp;}<BR>&nbsp;<BR>&nbsp; }<BR>}</P>
<P>然后布署好web.xml,在其中加入</P>
<P>&lt;servlet&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;servlet-name&gt;up&lt;/servlet-name&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;servlet-class&gt;up&lt;/servlet-class&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;/servlet&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;servlet-mapping&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;servlet-name&gt;up&lt;/servlet-name&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;url-pattern<STRONG>&gt;/fileup</STRONG>&lt;/url-pattern&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;/servlet-mapping&gt;</P>
<P>好了现在再编写一个htm测试一下就ok了,注意url-pattern里面的路径必须跟表格中action的属性一样.</P>
<P>&lt;html&gt;<BR>&nbsp;&lt;h1&gt;文件上传演示&lt;/h1&gt;</P>
<P>&lt;form name="uploadform" method="POST" <STRONG>action="/fileup</STRONG>" ENCTYPE="multipart/form-data"&gt;</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;table border="1" width="450" cellpadding="4" cellspacing="2" bordercolor="#9BD7FF"&gt;</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;tr&gt;&lt;td width="100%" colspan="2"&gt;</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 文件1：&lt;input name="x" size="40" type="file"&gt;</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/td&gt;&lt;/tr&gt;</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;tr&gt;&lt;td width="100%" colspan="2"&gt;</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 文件2：&lt;input name="y" size="40" type="file"&gt;</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/td&gt;&lt;/tr&gt;</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;tr&gt;&lt;td width="100%" colspan="2"&gt;</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 文件3：&lt;input name="z" size="40" type="file"&gt;</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/td&gt;&lt;/tr&gt;</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/table&gt;</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;br/&gt;&lt;br/&gt;</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;table&gt;</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;tr&gt;&lt;td align="center"&gt;&lt;input name="upload" type="submit" value="开始上传"/&gt;&lt;/td&gt;&lt;/tr&gt;</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/table&gt;</P>
<P>&lt;/form&gt;</P>
<P><BR>&lt;/html&gt;</P><img src ="http://www.blogjava.net/rkind/aggbug/16998.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rkind/" target="_blank">rkind</a> 2005-10-27 12:43 <a href="http://www.blogjava.net/rkind/archive/2005/10/27/16998.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>