4.9 使用打包好的jar开发一个实现用户注册的示例
下面将通过实现用户注册的示例来演示在一个新的项目中,如何使用打包好的jar来开发MVC应用程序。实现思路是:首先建立新的项目开发环境,然后实现用户注册、注册成功和修改用户密码的页面,以及相关的业务逻辑,最后验证程序。
4.9.1 在Eclipse中建立Tomcat工程项目myMVC并配置开发环境
在Eclipse中建立Tomcat工程项目myMVC并配置开发环境的步骤如下。
运行Eclipse,单击菜单栏中的“File”菜单,Eclipse将显示“File”菜单项。
将鼠标移动到“New”上,在出现的子菜单中单击“Project”,Eclipse将弹出“New Project”对话框,如图4-16所示。
用鼠标选择列表框中“Java”下的“Tomcat Project”,然后单击“Next”按钮,将弹出“New Tomcat Project”对话框,如图4-17所示。
在“New Tomcat Project”对话框中,在“Project name”文本框中输入“myMVC”,然后单击“Finish”按钮,项目即建立成功,myMVC的目录结构如图4-18所示。
在myMVC上单击鼠标右键,在弹出的右键菜单中选择“New”下子菜单中的“Package”,将弹出“New Java Package”对话框,如图4-19所示。

图4-16 “New Project”对话框 图4-17 “New Tomcat Project”对话框

图4-18 myApp的目录结构 图4-19 “New Java Package”对话框
在“New Java Package”对话框中,在“Name”文本框中输入“com.mymvc. action”,然后单击“Finish”按钮,即可建立com.mymvc.action包。
在myMVC上单击鼠标右键,在弹出的右键菜单中选择“New”下子菜单中的“Folder”,将弹出“New Folder”对话框,如图4-20所示。

图4-20 “New Folder”对话框
在“New Folder”对话框中在“Folder name”文本框中输入“mymvc/jsp”,然后单击“Finish”按钮,即可建立mymvc/jsp文件夹。
将上节生成的nancy.jar复制到myMVC下WEB-INF的lib文件夹下。
在myMVC上单击鼠标右键,Eclipse将弹出右键菜单。
在弹出的右键菜单中,单击“Properties”,将弹出“Properties for myMVC”对话框,如图4-21所示。
在“Properties for myMVC”对话框中,选择对话框左边列表框中的“Java Build
Path”。
选择“Properties for myMVC”对话框中间的“Libraries”选项卡。
在“Libraries”选项卡中,单击“Add JARs…”按钮,弹出“JAR Selection”对话框,如图4-22所示。

图4-21 “Properties for myMVC”对话框 图4-22 “JAR Selection”对话框
在“JAR Selection”对话框中,展开“myMVC”一直到lib目录下出现nancy.jar。
选中这个jar,然后单击“OK”按钮,返回“Properties for myMVC”对话框,如图4-23所示。
在“Properties for myMVC”对话框中,单击“OK”按钮,即可完成对本书中Web框架的配置。
最终配置好的myMVC项目的目录结构如图4-24所示。

图4-23 返回“Properties for myMVC”对话框 图4-24 配置好的myMVC项目的目录结构
4.9.2 编写实现用户注册的页面regedit.jsp
用户注册页面regedit.jsp放在\mymvc\jsp文件夹下。regedit.jsp的示例代码如下:
<%@ page contentType="text/html; charset=GBK" language="java" import=
"java.sql.*" errorPage="" %>
<%@ page import="java.sql.*,java.util.*,javax.servlet.*,
javax.servlet.http.*,java.text.*,java.math.*"
%>
<%! public static final String _AppId = "regedit"; %>
<%
HashMap infoOut = (request.getAttribute("infoOut") == null) ? new
HashMap() : (HashMap)request.getAttribute("infoOut");
String msg = infoOut.get("msg") == null ? "" : (String)infoOut.get("msg");
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>采用新的框架实现用户登录验证</title>
<style type="text/css">
<!—
<!--设定body的css属性-->
body {
background-color: #FFFFFD;
font-family: Verdana, "宋体";
font-size: 12px;
font-style: normal;
}
-->
</style>
<script language=Javascript>
<!--表单提交的方法-->
function submit(target, action) {
form1.target = target;
form1.action.value = action;
form1.submit();
}
<!--打开窗口-->
function openWin(name, url, width, height) {
var screenWidth = screen.width;
var screenHeight = screen.height;
var w;
<!--设定窗口的属性-->
w=window.open(url,name, "width="+width+",height="+height+",
menubar= no,resizable=yes,toolbar=no,directories=no,
location=no,scrollbars=yes,status=yes,copyhistory=0");
w.moveTo((screenWidth-width)/2, (screenHeight-height)/2);
w.focus();
}
<!--退出页面-->
function goExit() {
window.close();
}
<!--表单的登录动作-->
function check() {
form1.forwardJsp.value = "regedit";
form1.logicName.value = "RegeditAction";
submit('<%="regedit_"+session.getId()%>','regedit');
}
</script>
</head>
<body leftmargin="0" topmargin="0">
<form name="form1" action="/myMVC/mymvc/regedit.do" method="post">
<H3><font color='red'><%=msg%></font><H3>
用户名:<input type="text" name="username" value=""><br>
密码: <input type="password" name="password" value=""><br>
<input type="button" name="button" value="注册" onClick="return check()">
<input type="reset" name="button" value="重置">
<!--表单中隐藏的元素-->
<input type="hidden" name="action" value="">
<input type="hidden" name="forwardJsp" value="">
<input type="hidden" name="logicName" value="">
</form>
<!--设定页面的名称-->
<script language=Javascript>
window.name = "<%="regedit_"+session.getId()%>";
</script>
</body>
</html>
4.9.3 编写注册成功的页面success.jsp
注册成功页面success.jsp放在\mymvc\jsp文件夹下。success.jsp的示例代码如下:
<%@ page contentType="text/html; charset=GBK" language="java" import=
"java.sql.*" errorPage="" %>
<%@ page import="java.sql.*,java.util.*,javax.servlet.*,
javax.servlet.http.*,java.text.*,java.math.*"
%>
<%! public static final String _AppId = "success"; %>
<%
HashMap infoOut = (request.getAttribute("infoOut") == null) ? new
HashMap() : (HashMap)request.getAttribute("infoOut");
String msg = infoOut.get("msg") == null ? "" : (String)infoOut.get("msg");
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>采用新的框架实现用户注册验证</title>
<style type="text/css">
<!--
<!--设定body的css属性-->
body {
background-color: #FFFFFD;
font-family: Verdana, "宋体";
font-size: 12px;
font-style: normal;
}
-->
</style>
<script language=Javascript>
<!--表单提交的方法-->
function submit(target, action) {
form1.target = target;
form1.action.value = action;
form1.submit();
}
<!--打开窗口-->
function openWin(name, url, width, height) {
var screenWidth = screen.width;
var screenHeight = screen.height;
var w;
<!--设定窗口的属性-->
w=window.open(url,name, "width="+width+",height="+height+",
menubar=no,resizable=yes,toolbar=no,directories=no,location=
no,scrollbars=yes,status=yes,copyhistory=0");
w.moveTo((screenWidth-width)/2, (screenHeight-height)/2);
w.focus();
}
<!--退出页面-->
function goExit() {
window.close();
}
<!--表单的登录动作-->
function check() {
form1.forwardJsp.value = "login";
form1.logicName.value = "LoginAction";
submit('<%="success_"+session.getId()%>','login');
}
</script>
</head>
<body leftmargin="0" topmargin="0">
<form name="form1" action="/myMVC/do" method="post">
<H3><font color='red'><%=msg%></font><H3>
<a href='/myMVC/mymvc/updatePaswor.do?logicName=RegeditAction&forwardJsp
=updatePassword'>进入修改画面</a>
<!--表单中隐藏的元素-->
<input type="hidden" name="action" value="">
<input type="hidden" name="forwardJsp" value="">
<input type="hidden" name="logicName" value="">
</form>
<!--设定页面的名称-->
<script language=Javascript>
window.name = "<%="success_"+session.getId()%>";
</script>
</body>
</html>
4.9.4 编写修改用户密码的页面updatePassword.jsp
修改用户密码的页面updatePassword.jsp放在\mymvc\jsp文件夹下。updatePassword. jsp的示例代码如下:
<%@ page contentType="text/html; charset=GBK" language="java" import=
"java.sql.*" errorPage="" %>
<%@ page import="java.sql.*,java.util.*,javax.servlet.*,
javax.servlet.http.*,java.text.*,java.math.*"
%>
<%! public static final String _AppId = "updatePassword"; %>
<%
HashMap infoOut = (request.getAttribute("infoOut") == null) ? new
HashMap() : (HashMap)request.getAttribute("infoOut");
String msg = infoOut.get("msg") == null ? "" : (String)infoOut. get("msg");
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>采用新的框架实现用户注册验证</title>
<style type="text/css">
<!--
<!--设定body的css属性-->
body {
background-color: #FFFFFD;
font-family: Verdana, "宋体";
font-size: 12px;
font-style: normal;
}
-->
</style>
<script language=Javascript>
<!--表单提交的方法-->
function submit(target, action) {
form1.target = target;
form1.action.value = action;
form1.submit();
}
<!--打开窗口-->
function openWin(name, url, width, height) {
var screenWidth = screen.width;
var screenHeight = screen.height;
var w;
<!--设定窗口的属性-->
w=window.open(url,name, "width="+width+",height="+height+",
menubar= no,resizable=yes,toolbar=no,directories=no,location=no,
scrollbars=yes,status=yes,copyhistory=0");
w.moveTo((screenWidth-width)/2, (screenHeight-height)/2);
w.focus();
}
<!--退出页面-->
function goExit() {
window.close();
}
<!--表单的登录动作-->
function check(action) {
form1.forwardJsp.value = "updatePassword";
form1.logicName.value = "RegeditAction";
submit('<%="updatePassword_"+session.getId()%>',action);
}
</script>
</head>
<body leftmargin="0" topmargin="0">
<form name="form1" action="/myMVC/mymvc/regedit.do" method="post">
<H3><font color='red'><%=msg%></font><H3>
用户名:<input type="text" name="username" value=""><br>
密码: <input type="password" name="password" value=""><br>
<input type="button" name="button" value="修改" onClick="return
check('update')">
<input type="button" name="button" value="删除" onClick="return
check('delete')">
<!--表单中隐藏的元素-->
<input type="hidden" name="action" value="">
<input type="hidden" name="forwardJsp" value="">
<input type="hidden" name="logicName" value="">
</form>
<!--设定页面的名称-->
<script language=Javascript>
window.name = "<%="updatePassword_"+session.getId()%>";
</script>
</body>
</html>
4.9.5 编写业务逻辑RegeditAction.java
在包com.mymvc.action上建立业务逻辑RegeditAction.java。RegeditAction.java的示例代码如下:
//******* RegeditAction.java**************
package com.mymvc.action;
import java.util.HashMap;
import com.gd.action.Action;
public class RegeditAction implements Action {
//根据请求,进行页面动作转换
public HashMap doAction(HashMap infoIn) {
String action = (infoIn.get("action") == null) ? "" : (String)
infoIn.get("action");
HashMap infoOut = new HashMap();
if (action.equals("")) infoOut = this.doInit (infoIn);
else if (action.equals("regedit")) infoOut = this.doRegedit (infoIn);
else if (action.equals("query")) infoOut = this.doQuery (infoIn);
else if (action.equals("update")) infoOut = this.doUpdate (infoIn);
else if (action.equals("delete")) infoOut = this.doDelete (infoIn);
return infoOut;
}
/**该方法用来实现没有传入动作时要处理的内容
* @param infoIn
* @return HashMap
*/
private HashMap doInit(HashMap infoIn) {
HashMap infoOut = infoIn;
try {
infoOut.put("msg", "请输入用户名和密码");
} catch(Exception e) {
e.printStackTrace();
} finally {
return infoOut;
}
}
/**该方法用来实现注册
* @param infoIn
* @return HashMap
*/
private HashMap doRegedit(HashMap infoIn) {
HashMap infoOut = infoIn;
String username = (infoIn.get("username") == null) ? "" :
(String)infoIn.get("username");
String password = (infoIn.get("password") == null) ? "" :
(String)infoIn.get("password");
try {
if ("gd".equals(username) && "123456".equals(password)) {
infoOut.put("forwardJsp", "success");
infoOut.put("msg", "注册成功");
} else if ("".equals(username) || "".equals(password)) {
infoOut.put("msg", "请输入用户名或密码");
}
} catch(Exception e) {
e.printStackTrace();
} finally {
return infoOut;
}
}
/**该方法用来实现查询
* @param infoIn
* @return HashMap
*/
private HashMap doQuery(HashMap infoIn) {
HashMap infoOut = infoIn;
String username = (infoIn.get("username") == null) ? "" :
(String)infoIn.get("username");
String password = (infoIn.get("password") == null) ? "" :
(String)infoIn.get("password");
try {
if ("gd".equals(username) && "123456".equals(password)){
infoOut.put("msg", "登录成功");
} else if("gd".equals(username)&& !"123456".equals (password)){
infoOut.put("msg", "密码错误");
} else if(!"gd".equals(username)&& "123456".equals (password)){
infoOut.put("msg", "用户名错误");
} else if(!"gd".equals(username)&& !"123456".equals (password)){
infoOut.put("msg", "用户名和密码都输入错误");
} else if ("".equals(username) && "".equals(password)){
infoOut.put("msg", "请输入用户名和密码");
}
} catch(Exception e) {
e.printStackTrace();
} finally {
return infoOut;
}
}
/**该方法用来实现修改
* @param infoIn
* @return HashMap
*/
private HashMap doUpdate(HashMap infoIn) {
HashMap infoOut = infoIn;
String username = (infoIn.get("username") == null) ? "" :
(String)infoIn.get("username");
String password = (infoIn.get("password") == null) ? "" :
(String)infoIn.get("password");
try {
if ("gd".equals(username) && "123456".equals(password)){
infoOut.put("msg", "修改成功");
} else if ("gd".equals(username)&& !"123456".equals (password)){
infoO ut.put("msg", "密码错误");
} else if (!"gd".equals(username)&& "123456".equals (password)){
infoOut.put("msg", "用户名错误");
} else if(!"gd".equals(username)&& !"123456".equals (password)){
infoOut.put("msg", "用户名和密码都输入错误");
} else if ("".equals(username) && "".equals(password)){
infoOut.put("msg", "请输入用户名和密码");
}
} catch(Exception e) {
e.printStackTrace();
} finally {
return infoOut;
}
}
/**该方法用来实现删除
* @param infoIn
* @return HashMap
*/
private HashMap doDelete(HashMap infoIn) {
HashMap infoOut = infoIn;
String username = (infoIn.get("username") == null) ? "" :
(String)infoIn.get("username");
String password = (infoIn.get("password") == null) ? "" :
(String)infoIn.get("password");
try {
if ("gd".equals(username) && "123456".equals(password)) {
infoOut.put("msg", "删除成功");
} else if (!"gd".equals(username)) {
infoOut.put("msg", "删除失败,请填写正确的用户名");
}
} catch(Exception e) {
e.printStackTrace();
} finally {
return infoOut;
}
}
}
4.9.6 配置web.xml文件
将web.xml文件放在myMVC的WEB-INF文件夹下。web.xml文件的示例代码如下:
<?xml version="1.0" encoding="GBK"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>web.xml的示例</display-name>
<description>
使用Servlet实现注册的例子
</description>
<!--过滤器-->
<servlet>
<servlet-name>Servlet</servlet-name>
<servlet-class>com.gd.action.GdServlet</servlet-class>
</servlet>
<!--拦截.do的请求-->
<servlet-mapping>
<servlet-name>Servlet</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>
4.9.7 运行并验证示例
启动Tomcat,然后在浏览器的地址栏中输入http://localhost:8080/myMVC/mymvc/ regedit.do?logicName=RegeditAction&forwardJsp=regedit,然后按回车键,即可看到注册页面,如图4-25所示。
如果用户只输入用户名“gf”,然后单击“注册”按钮,即可看到页面显示“请输入用户名或密码”的提示信息,如图4-26所示。
输入用户名“gd”,密码“123456”,单击“注册”按钮,即可看到注册成功的页面,如图4-27所示。

图4-25 注册页面

图4-26 显示“请输入用户名或密码”的提示信息

图4-27 注册成功的页面
单击“进入修改画面”的链接,进入修改页面,如图4-28所示。

图4-28 修改页面
输入用户名“gf”,密码“12345”,单击“修改”按钮,即可看到显示“用户名和密码都输入错误”的提示页面,如图4-29所示。

图4-29 显示“用户名和密码都输入错误”的提示页面
输入用户名“gd”,密码“12345”,单击“修改“按钮,即可看到修改成功的页面,如图4-30所示。

图4-30 修改成功的页面
输入用户名“gf”,密码“12345”,单击“删除”按钮,即可看到删除失败的页面,如图4-31所示。
输入用户名“gd”,密码“12345”,单击“删除”按钮,即可看到删除成功的页面,如图4-32所示。

图4-31 删除失败的页面

图4-32 删除成功的页面






