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的共享
1)在不同JSP网页间共享会话级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>
在5.5版本的Tomcat会出现错误“Attempted a bean operation on a null object”
此时需要在后续被访问网页(如result.jsp)中添加<jsp:useBean id="t1" class="mypack.Time" scope="session" />
2)在JSP网页和Servlet间共享会话级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="ActionServlet">点击</a>
</body>
</html>
ActionServlet.java文件:
package mypack;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class ActionServlet extends javax.servlet.http.HttpServlet implements
javax.servlet.Servlet {
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);
mypack.Time t1 = (mypack.Time) session.getAttribute("t1");
out.print(t1.getTime());
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
doGet(request, response);
}
}
3)在Servlet网页和JSP间共享会话级JavaBean
ActionServlet.java文件:
package mypack;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class ActionServlet extends javax.servlet.http.HttpServlet implements
javax.servlet.Servlet {
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);
Time t1=new Time(1,2,3);
session.setAttribute("t1", t1);
out.print("<p><a href='index.jsp'>点击继续...</a>");
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
doGet(request, response);
}
}
index.jsp文件:
<%@page c%>
<html>
<head>
</head>
<body>
<jsp:getProperty name="t1" property="time"/>
<a href="result.jsp">点击</a>
</body>
</html>
result.java文件:
<%@page c%>
<html>
<head>
</head>
<body>
时间为:<jsp:getProperty name="t1" property="time" />
</body>
</html>
4)在Servlet网页和JSP间共享请求级JavaBean
ActionServlet.java文件:
package mypack;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ActionServlet extends javax.servlet.http.HttpServlet implements
javax.servlet.Servlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
response.setContentType("text/html;charset=GB2312");
PrintWriter out = response.getWriter();
Time t1 = new Time(1, 2, 3);
request.setAttribute("t1", t1);
RequestDispatcher disp = request.getRequestDispatcher("index.jsp");
disp.forward(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
doGet(request, response);
}
}
index.jsp文件:
<%@page c%>
<html>
<head>
</head>
<body>
<jsp:getProperty name="t1" property="time" />
<%=((mypack.Time) (request.getAttribute("t1"))).getTime()%>
<a href="result.jsp">点击</a>
</body>
</html>
result文件(不能访问):
<%@page c%>
<html>
<head>
</head>
<body>
<%=((mypack.Time)(request.getAttribute("t1"))).getTime() %>
</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>
GET和POST区别:
1)GET方式存在长度上限,而POST没有
2)GET使用查询串重写方式,而POST不直接显示
3)根据设计,GET用于发送可以任意重发也不会对系统带来改变的数据,而POST往往会改变数据,另外,只要刷新页面也会自动POST一次
[此贴子已经被作者于2010-12-12 18:15:12编辑过]