课外天地 李树青学习天地JavaEE网站开发课件 → MVC的基本编程方法


  共有13148人关注过本帖树形打印复制链接

主题:MVC的基本编程方法

帅哥哟,离线,有人找我吗?
admin
  1楼 博客 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 管理员
等级:管理员 帖子:1938 积分:26572 威望:0 精华:34 注册:2003/12/30 16:34:32
MVC的基本编程方法  发帖心情 Post By:2009/3/3 23:38:52 [只看该作者]

1、基本方法
1、1 简单JavaBean的使用
package mypack;

public class Time {
        private int hour;
        private int minute;
        private int second;

        public Time() {
        }

        public Time(int h, int m, int s) {
                setTime(h, m, s);
        }

        public void setHour(int h) {
                if (h >= 0 && h <= 23)
                        hour = h;
                else
                        hour = 0;
        }

        public int getHour() {
                return hour;
        }

        public void setMinute(int m) {
                if (m >= 0 && m <= 59)
                        minute = m;
                else
                        minute = 0;
        }

        public int getMinute() {
                return minute;
        }

        public void setSecond(int s) {
                if (s >= 0 && s <= 59)
                        second = s;
                else
                        second = 0;
        }

        public int getSecond() {
                return second;
        }

        public void setTime(int h, int m, int s) {
                setHour(h);
                setMinute(m);
                setSecond(s);
        }

        public String getTime() {
                java.text.DecimalFormat df = new java.text.DecimalFormat("00");
                return df.format(hour % 12) + ":" + df.format(minute) + ":"
                                + df.format(second) + (hour < 12 ? "AM" : "PM");
        }

        public String toString() {
                return getTime();
        }
}

可以直接在servlet和JSP中使用,如在JSP中为:
<html>
<head>
</head>
<body>
<%
        mypack.Time t1 = new mypack.Time(13, 20, 30);
        out.print(t1);
%>
</body>
</html>

更为简单的方法为:
<%@page c%>
<%@page import="mypack.Time"%>
<html>
<head>
</head>
<body>
时间为:
<%
        Time t1 = new Time(13, 20, 30);
        out.print(t1);
%>
</body>
</html>

使用JavaBean的写法为:
<%@page c%>
<html>
<head>
</head>
<body>
时间为:
<jsp:useBean id="t1" class="mypack.Time" />
<jsp:setProperty name="t1" property="hour" value="13" />
<jsp:setProperty name="t1" property="minute" value="20" />
<jsp:setProperty name="t1" property="second" value="30" />
<jsp:getProperty name="t1" property="time" />
</body>
</html>

注意:
如果不存在对应的JavaBean属性,则运行JSP网页就会报错,如“Cannot find any information on property 'xxx' in a bean of type 'mypack.Time'(在Time类中找不到xxx 属性对应的信息)

1、2 在不同网页中共享JavaBean
index.jsp文件:
<%@page c%>
<html>
<head>
</head>
<body>
<jsp:useBean id="t1" class="mypack.Time" scope="session" />
<jsp:setProperty name="t1" property="hour" value="13" />
<jsp:setProperty name="t1" property="minute" value="20" />
<jsp:setProperty name="t1" property="second" value="30" />
<a href="result.jsp">点击</a>
</body>
</html>

result.jsp文件:
<%@page c%>
<html>
<head>
</head>
<body>
时间为:<jsp:getProperty name="t1" property="time" />
</body>
</html>

2、实例(猜数字)
1)系统产生随机整数,并提供一个接受用户输入猜数的网页(guess.jsp),
确认后,程序提交给另外一个网页(CompareControl.java)来处理。
2)处理网页(CompareControl.java)对用户猜数进行判断,并按照功能要求显示不同信息,并允许用户继续猜数。

基本方法:
CRandom.java文件:
package mypack;

public class CRandom {
        private int rand = 0;

        public CRandom() {
                rand = (int) (Math.random() * 100) + 1;
        }

        public int getRandom() {
                return rand;
        }
}

guess.jsp文件:
<%@page c%>
<html>
        <head>
        </head>
        <body>
                <jsp:useBean id="cr" class="mypack.CRandom" scope="session"/>
                <form method="POST" action="CompareControl">
                        猜数字:<input type="text" name="guessNumber" size="20">
                </form>
        </body>
</html>

CompareControl文件:
package mypack;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class CompareControl extends HttpServlet {
        public void doGet(HttpServletRequest request, HttpServletResponse response)
                        throws IOException, ServletException {
                response.setContentType("text/html;charset=GB2312");
                PrintWriter out = response.getWriter();
                HttpSession session = request.getSession(true);
                
                String s1 = request.getParameter("guessNumber");
                int num1 = Integer.parseInt(s1);
                mypack.CRandom cr = (mypack.CRandom) session.getAttribute("cr");
                int num2 = cr.getRandom();
                //out.print("系统产生的随机数为" + num2 + "<br>");
                if (num1 == num2)
                        out.print("成功!");
                else if (num1 < num2)
                        out.print("太小了<p><a href='guess.jsp'>点击继续...</a>");
                else
                        out.print("太大了<p><a href='guess.jsp'>点击继续...</a>");
        }

        public void doPost(HttpServletRequest request, HttpServletResponse response)
                        throws IOException, ServletException {
                doGet(request, response);
        }
}

可以设置猜数范围的方法:
CRandom文件:
package mypack;

public class CRandom {
        private int initialNumber = 0;
        private int rand = 0;

        public CRandom() {
        }

        public CRandom(int init) {
                setInitialNumber(init);
        }

        public void setInitialNumber(int num) {
                if (num < 0)
                        initialNumber = 0;
                else
                        initialNumber = num;
                generateRandom();
        }

        public void generateRandom() {
                rand = (int) (Math.random() * initialNumber) + 1;
        }

        public int getRandom() {
                return rand;
        }
}

guess.jsp文件:
<%@page c%>
<html>
<head>
</head>
<body>
<jsp:useBean id="cr" scope="session" class="mypack.CRandom">
        <jsp:setProperty name="cr" property="initialNumber" value="100" />
</jsp:useBean>
<form method="POST" action="CompareControl">猜数字:<input
        type="text" name="guessNumber" size="20"></form>
</body>
</html>

完整的MVC结构:
CompareControl.java文件:
package mypack;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class CompareControl extends HttpServlet {
        public void doGet(HttpServletRequest request, HttpServletResponse response)
                        throws IOException, ServletException {
                response.setContentType("text/html;charset=GB2312");
                PrintWriter out = response.getWriter();
                HttpSession session = request.getSession(true);

                String s1 = request.getParameter("guessNumber");
                int num1 = Integer.parseInt(s1);
                mypack.CRandom cr = (mypack.CRandom) session.getAttribute("cr");
                int num2 = cr.getRandom();
                // out.print("系统产生的随机数为" + num2 + "<br>");
                if (num1 == num2) {
                        RequestDispatcher disp = request
                                        .getRequestDispatcher("success.jsp");
                        disp.forward(request, response);
                } else if (num1 < num2) {
                        RequestDispatcher disp = request.getRequestDispatcher("less.jsp");
                        disp.forward(request, response);
                } else {
                        RequestDispatcher disp = request.getRequestDispatcher("more.jsp");
                        disp.forward(request, response);
                }
        }

        public void doPost(HttpServletRequest request, HttpServletResponse response)
                        throws IOException, ServletException {
                doGet(request, response);
        }
}

success.jsp文件:
<%@page c%>
<html>
        <head>
        </head>
        <body>
                成功!
        </body>
</html>

less.jsp文件:
<%@page c%>
<html>
        <head>
        </head>
        <body>
                太小了<p><a href='guess.jsp'>点击继续...</a>
        </body>
</html>

more.jsp文件:
<%@page c%>
<%@page c%>
<html>
        <head>
        </head>
        <body>
                太大了<p><a href='guess.jsp'>点击继续...</a>
        </body>
</html>

进一步合并这些目标jsp网页:
CInfo.java文件:
package mypack;

public class CInfo {
        private String info;

        public void setInfo(String str) {
                info = str;
        }

        public String getInfo() {
                return info;
        }
}

CompareControl
package mypack;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class CompareControl extends HttpServlet {
        public void doGet(HttpServletRequest request, HttpServletResponse response)
                        throws IOException, ServletException {
                response.setContentType("text/html;charset=GB2312");
                HttpSession session = request.getSession(true);

                String s1 = request.getParameter("guessNumber");
                int num1 = Integer.parseInt(s1);
                mypack.CRandom cr = (mypack.CRandom) session.getAttribute("cr");
                int num2 = cr.getRandom();
                // out.print("系统产生的随机数为" + num2 + "<br>");
                mypack.CInfo ci = (mypack.CInfo) session.getAttribute("ci");
                if (num1 == num2) {
                        RequestDispatcher disp = request
                                        .getRequestDispatcher("success.jsp");
                        disp.forward(request, response);
                } else {
                        if (num1 < num2)
                                ci.setInfo("太小了");
                        else
                                ci.setInfo("太大了");
                        RequestDispatcher disp = request.getRequestDispatcher("guess.jsp");
                        disp.forward(request, response);
                }
        }

        public void doPost(HttpServletRequest request, HttpServletResponse response)
                        throws IOException, ServletException {
                doGet(request, response);
        }
}

guess.jsp文件:
<%@page c%>
<html>
<head>
</head>
<body>
<jsp:useBean id="cr" scope="session" class="mypack.CRandom">
        <jsp:setProperty name="cr" property="initialNumber" value="10" />
</jsp:useBean>
<jsp:useBean id="ci" scope="session" class="mypack.CInfo">
        <jsp:setProperty name="ci" property="info" value="欢迎您!" />
</jsp:useBean>
<jsp:getProperty name="ci" property="info" /><br>
<form method="POST" action="CompareControl">猜数字:<input
        type="text" name="guessNumber" size="20"></form>
</body>
</html>

[此贴子已经被作者于2010-12-12 10:31:41编辑过]

 回到顶部