首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

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  删除成功的页面