2005年10月25日

使用环境:

Eclipse 3.1.0 + Download Java 2 Platform Standard Edition 5.0 + MyFaces 1.1.0 + Exadel Studio 3.0.5

  + Tomcat 5.5

所需要的jar:

commons-beanutils-1.6.1.jar
commons-codec-1.2.jar
commons-collections-3.0.jar
commons-digester-1.5.jar
commons-el.jar
commons-fileupload-1.0.jar
commons-logging.jar
commons-validator.jar
jakarta-oro.jar
jstl.jar
log4j-1.2.8.jar
myfaces-api.jar
myfaces-impl.jar
tiles.jar
tomahawk.jar

使用Exadel Studio建立JSF Project

File -> New ->Project… ->Exadel Studio -> JSF/JSF Project

填写Project Name ,JSF Environment 选择 MyFaces 1.1.0 ,然后按下一步,选择服务器。

选择好当前使用的TomCat服务器(tomcat5.5)按Finish结束。

到此为止,JSF Project建立完毕。

建立页面

在WebContent下面建立文件夹pages,然后在pages单击右键,新建->JSP File

每个jsf页的上面都要包含

<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>

而且,每新建一个页面都要在WebContent/WEB-INF/examples-config.xml这里注册。examples-config.xml这个名字可以在web.xml文件中修改,可以换成任意名字与之对应。

  <param-name>javax.faces.CONFIG_FILES</param-name>
  <param-value>/WEB-INF/examples-config.xml</param-value>

2005年03月27日

TOMCAT5配置JSP环境
在window2003假设你的JDK1.5安装在D:\jdk中,Tomcat5安装在D:\Tomcat中

第一步:

在我的电脑属性->高级->环境变量->Administrator的用户变量中新建以下用户变量

变量名:JAVA_HOME
变量值:D:\jdk

变量名:TOMCAT_HOME
变量值:D:\Tomcat

变量名:PATH
变量名:D:\jdk;D:\jdk\bin

变量名:CLASSPATH
变量值:.;D:\jdk\lib;D:\jdk\lib\dt.jar;D:\jdk\tools.jar;D:\Tomcat\common\lib\mysql-connector-java.jar;D:\jdk\jre\lib;D:\Tomcat\lib


第二步:

1> 修改D:\Tomcat\conf\Catalina\localhost\ROOT.xml文件的目录可以改变Tomcat根目录

以下是我把运行JSP文件的根目录绑在D:\www目录的ROOT.xml文件内容

<?xml version=’1.0′ encoding=’utf-8′?>
<Context displayName=”Welcome to Tomcat” docBase=”E:\www” path=”" debug=”0″>
</Context>

保存重启tomcat打开IE键入http://localhost:8080就能访问你指向根目录的jsp文件了

2> 新增一个虚拟目录只需要在D:\Tomcat\conf\Catalina\localhost\目录下
新建一个名为目录名的xml文件保存重启tomcat即可!

例如:在D:盘下新建一个名为www的虚拟目录,www.xml内容如下所示:

<?xml version=’1.0′ encoding=’utf-8′?>
<Context crossContext=”true” debug=”5″ docBase=”D:/www” path=”/www” reloadable=”true”>
</Context>

打开IE键入http://localhost:8080/www就能访问你指向虚拟目录的jsp文件


第三步:
其实Tomcat已经是一个JSP服务器了,但如果你想使用同一个端口就能同时执行asp/asp.net/jsp文件
请继续看如何把Tomcat5绑在IIS6上

Tomcat5和IIS6整合
花了很久时间,终于搞定了IIS6和Tomcat的整合。现在把步骤贴出来给各位一点参考,也免去了新手在Google上暴走和一次次的调试。开始吧!
  首先先说明我的系统,Windows 2003 Server中文版+IIS6+Tomcat5.0.14,JDK 1.4.2安装目录为C:\JDK,Tomcat安装目录为C:\Tomcat,环境变量JAVA_HOME和TOMCAT_HOME都已设置好并指向其各自的安装目录。(注意,接下来所有文件中涉及到tomcat路径的请自行修改为自己的Tomcat路径)
  Tomcat5和IIS6的安装我就不说了,网上的文档很多,假定此时我们已经安装好了Tomcat5和IIS6并都能独立运行,两者的默认网站均指向C:\web目录。
  
  现在我们要做的是到http://apache.linuxforum.net/dist/jakarta/tomcat-connectors/jk2/binaries/win32/jakarta-tomcat-connectors-jk2.0.2-win32-IIS.zip 去下载JK2,由JK2负责IIS和Tomcat的通讯,解开后得到isapi_redirector2.dll,我把它放在了C:\tomcat\iis下(目录随便)。
  接下来在Tomcat安装目录下的conf目录下建一个workers2.properties文件,把下面这段东东拷进去保存。注意file=”..”之中的路径要用”/”哦!


[shm]
file=c:/Tomcat/logs/jk2.log
size=1048576
[channel.socket:localhost:8009]
port=8009
host=localhost
[ajp13:localhost:8009]
channel=channel.socket:localhost:8009
[uri:/*.jsp]
[uri:/web/*]
worker=ajp13:localhost:8009
[status:status]
[uri:/jkstatus/*]
worker=status:status

 

  之后编辑jk2.properties文件,确认其中是否有此一句:

  request.tomcatAuthentication=false

  接下来开始编辑注册表,直接建一个iis.reg文件,把下面一段拷进去保存然后双击iis.reg把信息导入注册表。(注意,把涉及的Tomcat路径改成你的Tomcat的路径)

  Windows Registry Editor Version 5.00

  [HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Jakarta Isapi Redirector\2.0]
  ”serverRoot”=”D:\\Tomcat”
  ”extensionUri”=”/jakarta/isapi_redirector2.dll”
  ”workersFile”=”D:\\Tomcat\\conf\\workers2.properties”
  ”logLevel”=”INFO”


  然后打开“我的电脑->控制面板->管理工具->Internet信息服务管理器”,在里面选择“网站”中的默认网站(默认网站我假定指向C:\web),在其上点右键选“属性”,在弹出的页框里选择“ISAPI筛选器”,点“添加”,筛选器名称填jakarta,可执行文件中填入你的isapi_redirector2.dll的绝对路径。“确定”后点“确定”关闭属性页。再在“默认网站”上右键,选择“新建”->“虚拟目录”,别名填jakarta,下一步,路径选为你的isapi_redirector2.dll存放的目录,我的是C:\tomcat\iis,下一步,权限中记得把“执行”那项打勾,好了,完成。
  如果你用的是IIS5的话,到这里就可以结束了,但IIS6还没完,继续。
  在“Internet信息服务管理器”的“网站”中的“Web服务扩展”上点右键选择“添加一个新的Web服务扩展”,弹出的框中扩展名填Tomcat(其实无所谓的),“要求的文件”选“添加”然后找到你的isapi_redirector2.dll后“确定”。“设置扩展状态为允许”也打上勾,确定。
  好了,配置完了。现在我们启动Tomcat5,然后net start w3svc启动IIS6。键入http://localhost:8080/hello.jsp(这个文件是我放在c:\web下的)看看!然后在看看http://localhost/hello.jsp,如果两者执行结果一样,恭喜你,整合成功了!

  但或许此时还不行,这时你该确认以下几点:
  1.你的“Internet信息服务管理器”->“网站”->“默认网站”->“属性”->“ISAPI筛选器”中的jakarta是否是向上的绿色箭头?如果是红色的,检查一下你之前做的配置有没有少了或是写错了点什么,再重新配置一遍
  2.确认你的Tomcat安装目录下的common\lib目录中是否有tools.jar文件(Tomcat5好像是有的,但Tomcat4中是没有的,网上的文档很少提到这件事,致使我多次配置失败),没有的话从JDK的lib下拷一个过去。
  3.IIS指向的目录最好和Tomcat指向的目录一致,不然会发生找不到图像和其他资源文件的问题。(这点不影响执行,呵呵!)
  4.英文文档中还提到应该把IIS6设置为IIS5隔离模式,“Internet信息服务管理器”->“网站”->“属性”->“服务”,把“以IIS5.0隔离模式运行WWW服务”打上勾。不过我不打勾也能正常使用,如果你配置不成功也可以试试这个。

  还不行?好,我们来狠的,打开机箱,取出硬盘,扔到地上给我踩,踩,踩!看你还敢跟我顶^_^(开个玩笑,不过之前我配置多次失败后确实有些无奈和懊恼)

2005年03月22日

PHILIPS显示器,用了刚1年零一个月,高压包就烧了,真郁闷,刚刚过保。。。

2005年03月01日

基于角色管理的Forms验证(翻译)

原文地址:http://www.codeproject.com/aspnet/formsroleauth.asp

介绍

Forms验证是Asp.Net里面的一个非常强大的功能。能够用非常简练的代码构建一个简单的验证系统。对角色管理需要具有更高级的功能要求,也可以在这个简单的系统之上进行扩展,以达到更高更复杂的要求。Windows管理就是这样的一个复杂的管理,但是Internet Explorer使用的是NTLM,是不一致的,使微软私有的验证系统。现在必须选择怎样管理你的系统:对每个用户设置允许登陆的用户和访问的页面,或者设置一个组(角色)允许登陆的页面和访问的权限。很明显,我们要选择后者。

这篇教程从Forms验证开始讲起,然后怎么改变成基于角色管理的Forms验证,和怎么在你的网站里实现基于角色管理的Forms验证。

必备条件

这篇教程是关于基于角色管理的Forms验证,这篇教程将介绍使用标准Forms验证里的几乎所有的技术。

顺着这篇教程看,你将建立数据库、一个Web Application、几个目录和一些asp.net页面。

创建数据库

我们将建立一个包含一个表的简单的数据库。这个数据库的名字叫web,添加一个表名字叫users,在这个表里面我们添加三个字段,分别是username, password, roles 。设置username为表的主键。设置username和password两个字段为索引。下面是建立的SQL:

CREATE
DATABASE web

CREATE TABLE users
(
username nvarchar(64) CONSTRAINT users_PK PRIMARY KEY,
password nvarchar(128),
roles nvarchar(64)
)

CREATE INDEX credentials ON users
(
username,
password
)

然后往数据库的表里面添加一些信息

username|password|roles

“hstewart”|”codeproject”|”AdministratorUser”

“joe”|”schmoe”|”User”

创建登陆登陆页面

假如前面的工作都已经完成了。下面我们开始建立一个Web Application,或者在一个已存在的web application里编辑。在这篇教程里,我们设想程序建立在iis的根目录里(”/”)

在创建文件和编辑web.config文件之前,我们必须清楚一件事:login.aspx这个文件必须是允许任何人访问的,否则用户不能够用他进行登陆,就会无限的在登陆页面和显示页面中循环。所以把login.aspx这个页面放到根目录上。然后我们再建立两个目录:users 和administrators。

首先我们要创建一个Forms验证系统用来支撑基于角色管理的Forms验证,因为微软没有简单的提供,所以我们要自己创建和处理验证工作票!不要着急,这并不困难。需要我们做的是对一些信息进行拼凑,Cookies已经按照正确的名字进行存储,Cookies名字是在根目录下web.config文件里面匹配的。如果这个名字不匹配,Asp.Net在web application里找不到验证票,就将跳转到login.aspx页面。代码如下:

<%@ Page Language=”C#” %>
<%@ Import Namespace=”System.Data” %>
<%@ Import Namespace=”System.Data.SqlClient” %>
<html>
<head>
<title>Login</title>
</head>
<script runat=”server”>
// If you’re using code-behind, make sure you change “private” to
// “protected” since the .aspx page inherits from the .aspx.cs
// file’s class
private void btnLogin_Click(Object sender, EventArgs e)
{
// Initialize FormsAuthentication, for what it’s worth
FormsAuthentication.Initialize();

// Create our connection and command objects
SqlConnection conn =
new SqlConnection(“Data Source=localhost;Initial Catalog=web;”);
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = “SELECT roles FROM web WHERE username=@username ” +
“AND password=@password”;

// Fill our parameters
cmd.Parameters.Add(“@username”, SqlDbType.NVarChar, 64).Value =
Username.Value;
cmd.Parameters.Add(“@password”, SqlDbType.NVarChar, 128).Value =
FormsAuthentication.HashPasswordForStoringInConfigFile(
Password.Value, “md5″); // Or “sha1″

// Execute the command
conn.Open();
SqlDataReader reader = cmd.ExecuteReader();
if (reader.Read())
{
// Create a new ticket used for authentication
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
1, // Ticket version
Username.Value, // Username associated with ticket
DateTime.Now, // Date/time issued
DateTime.Now.AddMinutes(30), // Date/time to expire
true, // “true” for a persistent user cookie
reader.GetString(0), // User-data, in this case the roles
FormsAuthentication.FormsCookiePath);// Path cookie valid for

// Encrypt the cookie using the machine key for secure transport
string hash = FormsAuthentication.Encrypt(ticket);
HttpCookie cookie = new HttpCookie(
FormsAuthentication.FormsCookieName, // Name of auth cookie
hash); // Hashed ticket

// Set the cookie’s expiration time to the tickets expiration time
if (ticket.IsPersistent) cookie.Expires = ticket.Expiration;

// Add the cookie to the list for outgoing response
Response.Cookies.Add(cookie);

// Redirect to requested URL, or homepage if no previous page
// requested
string returnUrl = Request.QueryString["ReturnUrl"];
if (returnUrl == null) returnUrl = “/”;

// Don’t call FormsAuthentication.RedirectFromLoginPage since it
// could
// replace the authentication ticket (cookie) we just added
Response.Redirect(returnUrl);
}
else
{
// Never tell the user if just the username is password is incorrect.
// That just gives them a place to start, once they’ve found one or
// the other is correct!
ErrorLabel = “Username / password incorrect. Please try again.”;
ErrorLabel.Visible = true;
}

reader.Close();
conn.Close();
}
</script>
<body>
<p>Username: <input id=”Username” runat=”server”
type=”text”/><br />
Password: <input id=”Password” runat=”server” type=”password”/><br
/>
<asp:Button id=”btnLogin” runat=”server” OnClick=”btnLogin_Click”
Text=”Login”/>
<asp:Label id=”ErrorLabel” runat=”Server” ForeColor=”Red”
Visible=”false”/></p>
</body>
</html>

上面对数据库里面password进行了md5加密,如果不需要进行md5加密则FormsAuthentication.HashPasswordForStoringInConfigFile(
Password.Value, “md5″); // Or “sha1″  替换为PassWord.Value

接下来,我们编辑Global.asax 这个文件。首先确保using System.Security.Principal 和 System.Web.Security,然后找到叫Application_AuthenticateRequest的这个事件输入如下代码:

protected void Application_AuthenticateRequest(Object sender, EventArgs e)
{
if (HttpContext.Current.User != null)
{
if (HttpContext.Current.User.Identity.IsAuthenticated)
{
if (HttpContext.Current.User.Identity is FormsIdentity)
{
FormsIdentity id =
(FormsIdentity)HttpContext.Current.User.Identity;
FormsAuthenticationTicket ticket = id.Ticket;

// Get the stored user-data, in this case, our roles
string userData = ticket.UserData;
string[] roles = userData.Split(’,’);
HttpContext.Current.User = new GenericPrincipal(id, roles);
}
}
}
}

(待续……)

2005年02月28日

好久没有来写东西了。

连培训差不多参加工作已经快4个月了,在这四个月里,有时候感觉过的比较空虚。有的时候真的有一种自己没有发挥自己的特长,理想和现实的差距好大的感觉。本来也是。学了好长时间的程序,回忆一下,c/asp/delphi/vb/c#简单的一算,也不少,而真正学得精通的又有哪个?!虽然都没学得精通,但是这也是自己奋斗的一个目标,经常做梦自己被评上MS 的 MVP,或者自己做的软件被大的软件公司收购,或者做开源软件在网上名声鹤起。虽然这只是梦,但是也是我的理想。

现在在供电公司,虽然同学或者朋友有很多人都羡慕我现在的工作,但是我知道,我也就是一个小合同工,我能摆清我的位置,虽然可以说是比较稳定,但是这么点工资,今后怎么才能在这个社会里面活得更好,怎么才可以让自己未来的老婆和孩子过的比别人幸福。因为我是男人,这些问题都是男人们都要面对的而且很困难的问题。

有的时候,机会来了,可能眨眼间就走了,有的时候缘分来了可能还没站稳就已经跑了。我承认我比较犹豫,在事情面临抉择的时候犹豫不决,估计想的东西实在是太多。我也承认我的胆子小,很多事情不敢去做。很可能就是这样,该有的机会没有把握住,该有的缘分没有抓住!可能错过了,这一辈子也就错过了。等到老了以后想起来,也是一个遗憾。不知道这样是好还是不好,可能遗憾也是一种心理的美,也是一种回忆。难道真的等到老了回忆这些残缺的遗憾?为什么现在不去努力地争取?这个问题我真的不知道,我真的很想去努力地争取!可是我不知道该怎么去争取该怎么去抓住即将逃走的机会和缘分。

其实人这一辈子也就这样,有的人风风光光,有的人默默无闻。可是我始终是觉得,无论是风光还是无闻,每个人都有他值得回忆的东西,虽然他风光,可能他的心理的遗憾会更多。反而相反。这些日子,听刘德华的《今天》颇有感触。已经把这首歌视做我的座右铭,时刻激励着我。不知道什么时候才可以到达我的那个《今天》。

我对我的未来非常好奇,真的想知道10年以后的我在干什么,过的是什么样的日子。在事业上是否有发展,是否还在现在的单位,是否去干我梦寐追求的事业,是否能养活老婆和孩子……这个时候如果我有机器猫该多好。我一定要去10年后,跟10年后的我促膝长谈,尽量弥补这10年来的遗憾。

瞎写了这么多,有很多都驴唇不对马嘴,语文水平有限。也不知道为啥今天就这么有感叹。自己想想,真的不能再这样混日子了,成天这样混,玩得时候比学习的时间还长。再这样下去,也就完了。要不时的激励自己,要为今后,要为10年后的我努力。

2005年02月27日

要用这首歌激励我。

走过歲月 我才发現世界多不完美
成功或失敗 都有一些错觉
沧海有多广 湖有多深 局中人才瞭解
生命开始 情不情愿总要过完一生
交出一片心不怕你誤解
谁沒受过伤 谁沒流过泪
何必要躲在黑暗里 自苦又自憐
我不断失望 不断希望
苦自己嘗 笑與你分享
如今站在台上 也难免心慌
如果要飞得高 就该把地平线忘掉
等了好久 终等到今天
梦了好久 终于把梦实現
前途漫漫任我闯 幸还有你在身旁
盼了好久 终于盼到今天
忍了好久 终于把梦实現
那些不变的风霜 早就无所谓 累也说不累

2005年01月16日

classpath

.;D:\j2sdk1.4.2_06\lib\dt.jar;D:\j2sdk1.4.2_06\lib\tools.jar

catalina_home

D:\Tomcat 5.0

java_home

D:\j2sdk1.4.2_06

2005年01月14日

或许有人觉得struts不容易学,似乎里面的一些概念让未接触过的人迷惑,MVC1、MVC2、模式……我写这篇文章是想让从来没有接触过struts的人,能有个简单的入门指引,当然,系统地学习struts是必要的,里面有很多让人心醉的东东,那是后话了。
  该案例包括首页,用户登陆、网站向导页面。就这么简单,没有深奥的struts概念,主要靠动手,然后用心体会。

  WEB Server用tomcat4。到 http://jakarta.apache.org 下载struts1.1,把zip文件释放到c:\struts,拷贝C:\struts\webapps\struts-example.war到c:\tomcat4\webapps中,启动tomcat,war包被释放为struts-example文件夹,删除war包,把struts-example文件夹更名为test。
   一、把WEB-INF\web.xml改成:

<?xml version=”1.0″ encoding=”ISO-8859-1″?>
<!DOCTYPE web-app PUBLIC “-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN” ” http://java.sun.com/j2ee/dtds/web-app_2_2.dtd “>

<web-app>
<!—这是struts中的Controller(控制器),系统的指令中转由其,既ActionServlet 类负责,它从struts-config.xml中读取配置信息,并在服务器后台自动启动一个线程。如果没有特别的要求(如添加语言编转功能),程序员可以不管这部分,照用就可以了。–>
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!–该系统的servlet可以映射成cool为后缀的文件,而不是常见的.jspdo等,后缀名可以改成任何名称,当然名字要健康#◎¥%!–>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.cool</url-pattern>
</servlet-mapping>
<!–该系统的默认首页是index.jsp,可以有多个,系统按次序找,类似IIS–>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>

  二、把test\WEB-INF\ struts-config.xml改成:

<?xml version=”1.0″ encoding=”ISO-8859-1″ ?>
<!DOCTYPE struts-config PUBLIC “-//Apache Software Foundation//DTD Struts Configuration 1.1//EN”
http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd “>

<struts-config>
<!–formBean是struts的一个概念,本质是JavaBean,用来自动存储页面表单中各个域的值,并在适当的时候回填表单域,不需要象传统那样request.getParameter(“fieldName”);,常被action-mappings中的action 使用–>
<form-beans>
<!—稍后我们会新增一个Userform类,用来存储用户信息。–>
<form-bean name=”userform” type=”test.Userform”/>
</form-beans>
<!–这里存放整个系统都可以使用的全局转向中转(Forward)地址,类似于javascript中的window.location(‘index.jsp’);,也类似于电视控制器上的各种按钮,可以转频道、调色等等是基于Struts的Web应用的控制流程流转。一般情况下,一个Action处理完毕后,会转发到一个JSP页面进行显示。这也是JSP中的MVC的实现的要点。–>
<global-forwards>
<!–failed.cool将被当成servlet请求,到action-mappings中寻找对应的action处理。–>
<forward name=”failed” path=”/failed.cool”/>
<forward name=”regist” path=”/regist.jsp”/>
</global-forwards>
<!–还记得web.xml中后缀为cool的请求吗?它们是转到这里处理的。这里相当于struts的Model部分,Model部分是struts中比较灵活的地方。–>
<action-mappings>
<!–处理regist.cools的请求,使用的formBean是userform,既test.Userform类,当处理过程发生错误时将返回index.jsp–>
<action path=”/regist” type=”test.RegistAction” name=”userform” scope=”request” input=”/index.jsp” />
<action path=”/overview” forward=”/hello.jsp”/>
<action path=”/failed” forward=”/wuwu.jsp” />
</action-mappings>
</struts-config>
   三、增加一个formBean,类路径为test.Userform,以下是这个类的内容:

package test;
import org.apache.struts.action.Actionform;
public class Userform extends Actionform
{
  private String name=”lpw”;//用户名
  private String ps=”1111″;//密码
  public Userform(){}
  public void setName(String s) {name=s;}
  public String getName() {return name;}
  public void setPs(String s) {ps=s;}
  public String getPs() {return ps;}
}


   四、增加一个Action的子类,类路径为test. RegistAction,以下是这个类的内容:

package test;
import java.lang.reflect.InvocationTargetException;
import java.util.Locale;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionError;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.Actionform;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.util.MessageResources;
import test.Userform;
public final class RegistAction extends Action
{
  public ActionForward execute(ActionMapping mapping,Actionform form, HttpServletRequest request, HttpServletResponse response)
  throws Exception
  {
   Locale locale = getLocale(request);
   MessageResources messages = getResources(request);
   HttpSession session = request.getSession();
   Userform userform = (Userform) form;
   //此处可以调用其他类来执行数据库写入或其他逻辑判断
   // 如果Userform传来的参数name的值为默认的lpw,将forward到failed,
   // 该名称将到struts-config.xml的<global-forwards>中寻找映射的url地址
   // (可以是绝对路径,也可以是相对路径),对于本例,是转到failed.cool,
   // 还记得吗?后缀为cool的请求全部到action-mappings中寻找
   // 对应的action处理,最终目录是wuwu.jsp*/
   if( “lpw”.equals(userform.getName()) )
    return (mapping.findForward(“failed”));
   else
    return (mapping.findForward(“regist”));
  }
}

  五、以下所有新增或修改的页面相当于struts的View部分,把首页index.jsp改成:

<%@ page contentType=”text/html;charset=GBK” language=”java” %>
<%@ page import = “test.*” %>
<a href=”overview.cool”>站点导航</a><br>
<form action=”regist.cool” method=”post”>
<!—表单中的域的名称要和Userform中的参数一样,就可以实现数据自动获取功能,不需要用request.getParameter(“param”);–>
用户:<input type=”text” name=”name”><br>
密码:<input type=”password” name=”ps”><br>
<input type=submit value=”新增用户”>
</form>

  六、增加hello.jsp,用于站点导航:

<h1>site map</h1>The following is content filling by reader

  七、增加wuwu.jsp,当没有新用户登陆时,将转到这个页面:

<%@ page contentType=”text/html;charset=GBK” language=”java” %>
<jsp:useBean id=”beanlpw” class=”test.Userform” scope=”session”/>
现有用户:<%=beanlpw.getName()%><br>
密码:<%=beanlpw.getPs()%><br>

  没有得到新的用户!

  八、增加regist.jsp,当有新用户登陆时,将转到这个页面:

<%@ page contentType=”text/html;charset=GBK” language=”java” %>
<jsp:useBean id=”beanlpw” class=”test.Userform” scope=”session”/>
新用户帐号:<%=beanlpw.getName()%><br>
密码:<%=beanlpw.getPs()%>

  九、启动tomcat4,浏览器中键入 http://localhost:8080/test/index.jsp ,操作一下,就可以看到结果,并初步理解struts的M、V、C各部分的协同工作原理,当然这是作者的良好意愿,如果读者看得一头雾水,欢迎指出错误在哪里 :)

Struts环境配置手册

1.Eclipse
 下载网址:  http://www.eclipse.org/

2.tomcat
 下载网址:  http://jakarta.apache.org/site/binindex.cgi

3.struts
 下载网址:  http://jakarta.apache.org/site/binindex.cgi

4.tomcat for Eclipse插件
 下载网址:  http://www.sysdeo.com/eclipse/tomcatPlugin.html

5.easy struts插件
 下载网址:  http://sourceforge.net/projects/easystruts

6.EJB开发工具lomboz(不是必需的)  
 下载网址:  http://www.objectlearn.com/

把上述4中的com.sysdeo.eclipse.tomcat_2.2.1和上述5中的com.cross.easystruts.eclipse_0.6.4分别COPY到
eclipse\plugins\,然后进行以下设置

1.Tomcat的初始化设置:启动Eclipse,通过菜单Windows->Preferences打开设置窗口
 选择Tomcat并做配置
1.Easy Struts的初始化设置:启动Eclipse,通过菜单Windows->Preferences打开设置窗口
 选择struts 1.1并在struts 1.1所需的库文件中找到并添加struts.jar文件
3.在struts 1.1所需的类型库描述文件中建议至少加入前面提到的三个描述文件分别是:
 struts_html.tld、struts_bean.tld、struts_logic.tld,这三个文件会在创建struts应用项目时自动拷贝到项目的WEB-INF目录下。
4.新建一个Tomcat项目,然后右击project->Properties->Libraries,把struts 1.1中的包全部加入
5.新建Add Easy Struts Support
6.把struts 1.1中的包全部COPY到project->WEB-INF\LIB\

用JAVA连接SQL Server 2000取得数据
1.下载JDBC FOR SQLSERVER 的驱动:
http://www.microsoft.com/downloads/details.aspx?FamilyID=4f8f2f01-1ed7-4c4d-8f7b-3d47969e66ae&DisplayLang=en#filelist
点击setup.exe下载驱动
2.下载后开始安装,就用默认设置安装,会被安装到:
  C:\Program Files\Microsoft SQL Server 2000 Driver for JDBC
3.把C:\Program Files\Microsoft SQL Server 2000 Driver for JDBC\lib
 下面的mssqlserver.jar,msbase.jar,msutil.jar三个文件拷贝到你的
  JDK主目录\jre\lib\ext下面,现在JDBC驱动就算配置好了
4.编译运行测试程序:
       String driverName = “com.microsoft.jdbc.sqlserver.SQLServerDriver”;
       String connURL = “jdbc:microsoft:sqlserver://BLUESKY:1433;
                                       User=sa;Password=sa;DatabaseName=sitedb”;
       try{
       Class.forName(driverName);
       Connection conn = DriverManager.getConnection(connURL);
       Statement stmt = conn.createStatement();
       StringBuffer strsql = new StringBuffer();
       strsql.append(“select * from USERTABLE where username =’” + username + “‘”);
       ResultSet rs = stmt.executeQuery(strsql.toString());
       if(!rs.next() ||!password.equals(NulltoString(rs.getString(“password”)).trim())){
           DBmsg = “对不起,您所输入的用户不存在或用户密码不正确”;
       }else{
           username = NulltoString(rs.getString(“username”));
           selectright = NulltoString(rs.getString(“selectright”));
           deleteright = NulltoString(rs.getString(“deleteright”));
           updateright = NulltoString(rs.getString(“updateright”));
       }

       }catch (ClassNotFoundException ex){
            ex.printStackTrace();
       }catch (SQLException ex){
            ex.printStackTrace();
       }

2004年12月30日

firstname

lastname

email