MyEclipse6Java开发中文教程 attribute= userloginForm input="/userLogin. jsp name="userLoginForm path="/userLogin scope="request type="com yourcompany. struts action. UserloginAction"> <forward name="failed"path="/userLogin. jsp"/> <forward name="success" path="/userLoginSuccess jsp"/ </action </action-mappings> <message-resources parameter=com yourcompany. struts. ApplicationResources </struts-config> 以及加入了硬编码的登录身份验证功能(粗斜体代码,通过简单的字符串比较来判断) 的Acon类 com. yourcompany. struts. action. UserLoginAction的代码(控制器层): package com yourcompany. struts action importjavax.servlethttpHttpservletreques importjavax.servlet.http.HttpservletresponsE import org. apache struts action Action import org. apache struts action.ActionForm; import org. apache struts action. ActionForward; import org. apache struts action. ActionMappingi import com yourcompany. struts form. UserLoginForm public class UserLoginAction extends Act public ActionForward execute(ActionMapping mapping, ActionForm form, Uge attpservletrequest request Httpservletresponse response)( ginForm userLoginForm =(UserLoginForm) form;//TODO Auto-genenated method stub eif( Form. getUserName(equals(myeclipse"&& userLogin Form. getPassword0 equals("myeclipse")) ∥用户登录的一般做法是把信息放入 session(会话)中 request getSession(true). setAttribute("loginedUseruserLogin Form); return mapping. findForward("success return mapping find Forward( failed); 刘长炯著
MyEclipse 6 Java 开发中文教程 6 刘长炯著 attribute="userLoginForm" input="/userLogin.jsp" name="userLoginForm" path="/userLogin" scope="request" type="com.yourcompany.struts.action.UserLoginAction"> <forward name="failed" path="/userLogin.jsp" /> <forward name="success" path="/userLoginSuccess.jsp" /> </action> </action-mappings> <message-resources parameter="com.yourcompany.struts.ApplicationResources" /> </struts-config> 以及加入了硬编码的登录身份验证功能(粗斜体代码,通过简单的字符串比较来判断) 的 Action 类 com.yourcompany.struts.action. UserLoginAction 的代码(控制器层): package com.yourcompany.struts.action; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import com.yourcompany.struts.form.UserLoginForm; public class UserLoginAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { UserLoginForm userLoginForm = (UserLoginForm) form;// TODO Auto-generated method stub if(userLoginForm.getUserName().equals("myeclipse") && userLoginForm.getPassword().equals("myeclipse")) { // 用户登录的一般做法是把信息放入session(会话)中 request.getSession(true).setAttribute("loginedUser", userLoginForm); return mapping.findForward("success"); } return mapping.findForward("failed"); } }
MyEclipse6Java开发中文教程 注意代码中的粗斜体部分就是硬编码的登录判断和流程跳转。 对应的 FormBean类 com. yourcompany. struts. form. UserLoginForn的代码(严格来说 算是表示层的部分) package com. yourcompany. struts. form import org. apache struts action. ActionForm public class UserLoginForm extends ActionForm /* password property * private String password /* userName property * private string userName ★ Generated Methods Returns the password @return String public string getPassword( return password; Set the pa param password The password to set public, void setPassword(string password)I thispassword ★ Returns the userName return string public string getUserName() return username ★★ 刘长炯著
MyEclipse 6 Java 开发中文教程 7 刘长炯著 注意代码中的粗斜体部分就是硬编码的登录判断和流程跳转。 对应的 FormBean 类 com.yourcompany.struts.form.UserLoginForm 的代码(严格来说 算是表示层的部分): package com.yourcompany.struts.form; import org.apache.struts.action.ActionForm; public class UserLoginForm extends ActionForm { /** password property */ private String password; /** userName property */ private String userName; /* * Generated Methods */ /** * Returns the password. * @return String */ public String getPassword() { return password; } /** * Set the password. * @param password The password to set */ public void setPassword(String password) { this.password = password; } /** * Returns the userName. * @return String */ public String getUserName() { return userName; } /**
MyEclipse6Java开发中文教程 ★ Set the userName x @param userName The userName to set public void setUserName(String userName) i this. userName userName 另外,作为实际项目会遇到的问题,建议按照944调整生成的代码一节加入解决中文 字符编码的过滤器。 最后,以前我们所做的应用都是没对首页 index jsp做任何修改,而是让用户通过地址 栏来手工输入登录页面的地址,很显然这样的应用是对用户很不友好的,大家看到长串的 地址要我来记,本能的就会抵触,觉得你的东西做的不好。因此我们将在首页做登录的判断, 如果已经登录了,则显示退出系统和重新登录链接:否则,就显示登录链接。 index jsp页 面的代码如下所示: bg page pageEncoding="GBK"8> St String basePath request. getscheme()+":7/ request getServerName()+":"+request. getServerPort( < DOCTYPE HTML PUBLIC #-//W3C//DTD HTMI401 Transitional//EN"> < base href="<各= basepath各> tit1e>用户自服务系统</tit1e> <metahttp-equivapragma"content="no-cache"> metahttp-equiv=cache-controlcontent=no-cache"> <metahttp-equiv=expirescontent=0> 检查 session判断是否登录 if (session. getAttribute("logineduser")!= null)[ 欢迎您,${1 ogineduser. username}。您现在可以:<a href=" userlogin.jsp">重新登录</a> 或者< a href="1 gout.jsp">退出系统</a> F else 游客,欢迎您,请< a href=" userlogin.jsp">登录</a> 刘长炯著
MyEclipse 6 Java 开发中文教程 8 刘长炯著 * Set the userName. * @param userName The userName to set */ public void setUserName(String userName) { this.userName = userName; } } 另外,作为实际项目会遇到的问题,建议按照 9.4.4 调整生成的代码一节加入解决中文 字符编码的过滤器。 最后,以前我们所做的应用都是没对首页 index.jsp 做任何修改,而是让用户通过地址 栏来手工输入登录页面的地址,很显然这样的应用是对用户很不友好的,大家看到一长串的 地址要我来记,本能的就会抵触,觉得你的东西做的不好。因此我们将在首页做登录的判断, 如果已经登录了,则显示退出系统和重新登录链接;否则,就显示登录链接。index.jsp 页 面的代码如下所示: <%@ page pageEncoding="GBK"%> <% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>用户自服务系统</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> </head> <body> <% // 检查session判断是否登录 if (session.getAttribute("loginedUser") != null) { %> 欢迎您,${loginedUser.userName}。您现在可以:<a href="userLogin.jsp">重新登录</a> 或者<a href="logout.jsp">退出系统</a>。 <% } else { %> 游客,欢迎您,请<a href="userLogin.jsp">登录</a>。 <% }
MyEclipse6Java开发中文教程 </body> </html> 退出系统的页面对应的功能就是使 session失效,然后重定向到首页,代码清单如下: logout. jsp e pageEncoding="GBK"8> //退出登录页面 session. invalidate ( //重定向到首页 response. sendRedirect ("index. jsp") 最后,不要忘了参考944调整生成的代码一节的内容,在 Tomcat下开发的时候加入 那个解决表单提交中文问题的过滤器。实际开发中千万不要漏了这步,否则用户输入信息 的时候用不了汉字岂不是很光火。 到此为止,这个小项目的第一阶段就算开发完毕了,下图显示了这个小项目第一阶段的 文件列表(没有包含过滤器部分的类文件) 日患 白申 m your comp any. struts. action t-n UserLoginActionjava E-IB com. your company. struts. form I userloginF E JRE System Library [M tJav⊥EE5 Libraries +a Struts 1.2 Libraries 日 Webroot ±MTA-IWF t-智EB-F j index. jsp 了 userLogin. j5p J userLoginSuccess jsp 模型.umr 图1.2登录项目的目录结构 那么在实际的开发中,到了这一阶段通常会做代码的正确性验证。怎么验证?把项目发 布,运行,并在浏览器中测试,就可以了。在 Package Explorer视图中选中项目节点ssh1 然后选择菜单Run> Run As>3 MyEclipse Server Application,之后 MyEclipse可能会显 示一个可用的服务器列表,选中其中的服务器之一例如 MyEclipse Tomca并点击OK按钮后 项目就会自动发布,对应的服务器会启动。好了,现在让我们在浏览器(可以用 MyEclipse 自带的,或者用, Firefox, Opera等都可以)键入地址htt/ localhost:8080/sh1,首 页显示会像这样: 游客,欢迎您,请登录 接着点击首页的登录链接,然后用户名和密码中都输入 myeclipse,之后点击登录按钮调用 刘长炯著
MyEclipse 6 Java 开发中文教程 9 刘长炯著 %> </body> </html> 退出系统的页面对应的功能就是使 session 失效,然后重定向到首页,代码清单如下: logout.jsp <%@ page pageEncoding="GBK"%> <% // 退出登录页面 session.invalidate(); // 重定向到首页 response.sendRedirect("index.jsp"); %> 最后,不要忘了参考 9.4.4 调整生成的代码一节的内容,在 Tomcat 下开发的时候加入 那个解决表单提交中文问题的过滤器。实际开发中千万不要漏了这一步,否则用户输入信息 的时候用不了汉字岂不是很光火。 到此为止,这个小项目的第一阶段就算开发完毕了,下图显示了这个小项目第一阶段的 文件列表(没有包含过滤器部分的类文件): 图 11.2 登录项目的目录结构 那么在实际的开发中,到了这一阶段通常会做代码的正确性验证。怎么验证?把项目发 布,运行,并在浏览器中测试,就可以了。在Package Explorer视图中选中项目节点 ssh1, 然后选择菜单Run > Run As > 3 MyEclipse Server Application,之后MyEclipse可能会显 示一个可用的服务器列表,选中其中的服务器之一例如MyEclipse Tomcat并点击OK按钮后, 项目就会自动发布,对应的服务器会启动。好了,现在让我们在浏览器(可以用MyEclipse 自带的,或者用IE,Firefox,Opera等都可以)键入地址 http://localhost:8080/ssh1/ ,首 页显示会像这样: 游客,欢迎您,请 登录。 接着点击首页的登录链接,然后用户名和密码中都输入 myeclipse,之后点击登录按钮调用
MyEclipse6Java开发中文教程 后台的 Struts Action类进行登录: 用户名: myeclipse 密码:****树 噔录陬消 登录成功后显示下面的页面: 你好 myeclipse,你已经登录成功! 返回首页 再点击“返回首页”这个链接,可以注意到这时候显示的首页内容有所不同 欢迎您, myeclipse。您现在可以:重新登录或者退出系统 点击退出系统就可以取消登录状态并重返首页。 好了,可以看到很成功,接下来我们会把后台的身份验证改成用 Hibernate访问数据库 来实现。 113添加 Hibernate功能 现在我们要把 Hibernate功能添加到当前项目,但是这步不会再反向工程生成DAO了, 因为我们最终的目的是使用Spng整合的 Hibernate DAO类。现在您可以参考743添加 Hibernate Capabilities到现有项目一章的内容来进行操作。使用 Hibernate可以大大加快 首先在 Package Explorer中选择 Hibernate demo项目,接下来,从 MyEclipse单 栏选择 My Eclipse> Project Capabilities Add Hibernate Capabilities∴.启动Add Hibernate Capabilities向导。然后在向导的第一页的 JAR Library Installati(JAR类 库安装)处点击选中单选钮 Copy checked Library Jars to project folder and add to build-path(选中的类库的AAR文件将会被复制到项目目录并添加到构造路径中去)然后 再在此单选钮下方的 Library Folder会自动选中 Web rootEB-NF目录,此过程如下 图所示。 JAR Library Installati O Add checked Libraries to project build-path O Copy checked Library Jars to project folder and add to buildpath Library folder: /webRoot/WEB-INF/libl Browse 图113添加 Hibernate类库时的选项 注意:如果您不选择这个选项,目前来说 MyEclipse自带的一些类库存在冲突现象, 这时候要修正这个问题将会非常困难,因为 MyEclipse自带的 Library定义是不能修改的 只能到发布后的 Tomcat的 webapps下面对应的应用的下 WEB-INF/mb来修改jar文件,而 且以后每次重新发布原有文件都被删掉重新复制,都要重新再修改一次才可以,非常不方便; 选中这个选择后,因为所有的jar文件都会出现在 Webroot EB-INFNIb,我们可以非常方 便的替换一次里面的jar文件就能解决冲突问题。 接着点击Next按钮,进入第二页,在这一页保持默认的选项来创建 Hibernate的全局 配置文件 hibemate. cfg. xm,然后再点击Next按钮进入第三页,点击 DB Driver右侧的现 有数据库连接列表,选择以前创建好的数据库连接例如mysq/5,然后再点击Next按钮进 刘长炯著
MyEclipse 6 Java 开发中文教程 10 刘长炯著 后台的 Struts Action 类进行登录: 用户名: myeclipse 密码: ********* 登录 取消 登录成功后显示下面的页面: 你好 myeclipse,你已经登录成功! 返回首页 再点击“返回首页”这个链接,可以注意到这时候显示的首页内容有所不同: 欢迎您,myeclipse。您现在可以:重新登录 或者 退出系统。 点击退出系统就可以取消登录状态并重返首页。 好了,可以看到很成功,接下来我们会把后台的身份验证改成用 Hibernate 访问数据库 来实现。 11.3 添加 Hibernate 功能 现在我们要把Hibernate功能添加到当前项目,但是这一步不会再反向工程生成DAO了, 因为我们最终的目的是使用Spring整合的Hibernate DAO 类。现在您可以参考 7.4.3 添加 Hibernate Capabilities 到现有项目一章的内容来进行操作。使用Hibernate可以大大加快 首先在 Package Explorer 中选择 HibernateDemo 项目,接下来, 从 MyEclipse 单 栏选择 MyEclipse > Project Capabilities > Add Hibernate Capabilities ... 来启动 Add Hibernate Capabilities 向导。然后在向导的第一页的 JAR Library Installation(JAR 类 库安装)处点击选中单选钮 Copy checked Library Jars to project folder and add to build-path(选中的类库的 JAR 文件将会被复制到项目目录并添加到构造路径中去)然后 再在此单选钮下方的 Library Folder 会自动选中/WebRoot/WEB-INF/lib 目录,此过程如下 图所示。 图 11.3 添加 Hibernate 类库时的选项 注意:如果您不选择这个选项,目前来说 MyEclipse 自带的一些类库存在冲突现象, 这时候要修正这个问题将会非常困难,因为 MyEclipse 自带的 Library 定义是不能修改的, 只能到发布后的 Tomcat 的 webapps 下面对应的应用的下 WEB-INF/lib 来修改 jar 文件,而 且以后每次重新发布原有文件都被删掉重新复制,都要重新再修改一次才可以,非常不方便; 选中这个选择后,因为所有的 jar 文件都会出现在/WebRoot/WEB-INF/lib,我们可以非常方 便的替换一次里面的 jar 文件就能解决冲突问题。 接着点击 Next 按钮,进入第二页,在这一页保持默认的选项来创建 Hibernate 的全局 配置文件 hibernate.cfg.xml,然后再点击 Next 按钮进入第三页,点击 DB Driver 右侧的现 有数据库连接列表,选择以前创建好的数据库连接例如 mysql5,然后再点击 Next 按钮进