如何使用java将数据post到一个servlet

liujiboy 2005-01-31 08:16:34
我按照《java network programming》中的例子进行试验但是没有成功。
代码如下:
url = new URL("http://127.0.0.1:8080/Test/servlet/postServlet");
URLConnection uc = url.openConnection( );
uc.setDoOutput(true);
OutputStream raw = uc.getOutputStream( );
OutputStream buffered = new BufferedOutputStream(raw);
OutputStreamWriter out = new OutputStreamWriter(buffered, "8859_1");
out.write("first=Julie&middle=&last=Harting&work=String+Quartet\r\n");
out.flush( );
out.close( );

其中postServlet代码如下

protected void doGet(HttpServletRequest arg0, HttpServletResponse arg1)
throws ServletException, IOException {
doPost(arg0,arg1);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.printl("success");
}

如果是读取一个URL的数据已经成功了,但是如何向一个Servlet post数据呢?
...全文
1116 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
CSDN_0 2005-02-06
  • 打赏
  • 举报
回复
up "GJA106(中文字符)"

objConn.setRequestMethod("POST");
martin628 2005-02-06
  • 打赏
  • 举报
回复

try {
java.net.URL url = new URL("http", "10.180.41.139", 80, "/Common/OA/Service.asp");
try {

URLConnection urlconn = url.openConnection();
if (urlconn instanceof HttpURLConnection) {
( (HttpURLConnection) urlconn).setRequestMethod("POST");
}
urlconn.addRequestProperty("Content-type", "application/x-www-form-urlencoded ; charset=gbk");
urlconn.setUseCaches(false);
urlconn.setDoInput(true);
urlconn.setDoOutput(true);
PrintWriter out = new PrintWriter(
urlconn.getOutputStream());
out.println("aaa=" + URLEncoder.encode(this.jTextField1.getText(),"GBK"));
out.close();

InputStream is = urlconn.getInputStream();
DataInputStream filedata = null;

filedata = new DataInputStream(is);
StringBuffer dirBuf = new StringBuffer();
int ch;
while ( (ch = filedata.read()) != -1) {
dirBuf.append( (char) ch);
}
String tempStr = new String(dirBuf);
this.jTextField1.setText(tempStr);
}
catch (IOException ex1) {
System.out.println(ex1);
}
}
catch (MalformedURLException ex) {
System.out.println(ex);
}
sswt 2005-02-05
  • 打赏
  • 举报
回复
GJA106(中文字符)是对的,我给个更全面的
java程序和接收的servlet如下:
package com.swt.test;

import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;

public class UploadXMLFile {

/**
* 上传xml文件
*
* @param strFile
* 上传带绝对路径的文件名
* @param strURL
* @return result 上传成功,result="SUCCESS",其他则为出错信息。
*/
public synchronized String uploadXMLFile(final String strFile, final String strURL) {

String result = null;

try {
URL url = new URL(strURL + "?filename=" + strFile);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setUseCaches(false);
conn.setRequestProperty("enctype", "multipart/form-data");
conn.setRequestProperty("contentType", "charset=GBK");
conn.setRequestMethod("POST");

//上传xml文件
DataInputStream file = new DataInputStream(new FileInputStream(
new File(strFile)));
OutputStream out = conn.getOutputStream();
int bytesOut = 0;
byte[] bufferOut = new byte[8192];
while ((bytesOut = file.read(bufferOut, 0, 8192)) != -1) {
out.write(bufferOut, 0, bytesOut);//
}
out.flush();
out.close();

//获得上传的结果
InputStream isResult = conn.getInputStream();
byte[] buffer = new byte[isResult.available()];
isResult.read(buffer);
result = new String(buffer);
isResult.close();

} catch (Exception e) {
result = "ERROR";
System.out.println(e.getMessage());
}
return result;
}

public static void main(String[] args) {
UploadXMLFile uxf = new UploadXMLFile();
System.out.println("上传文件结果");
String sb = uxf.uploadXMLFile("D:\\swt.xml",
"http://localhost:8080/beh/xml.163");
System.out.println(sb);

}

}


接收的servlet
package com.swt.servlet;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;

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

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;


/**
*
* @author sweater
*/
public class GetXMLFile extends HttpServlet {


private final static Log log = LogFactory.getLog(LoginAction.class);

/**
* Constructor of the object.
*/
public GetXMLFile() {
super();
}

/**
* Destruction of the servlet. <br>
*/
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
}

/**
* The doPost method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to post.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

System.out.println(this.getClass());
//System.out.println((String)request.getParameter("filename"));

response.setContentType("text/html");
PrintWriter outResult = null;
try {
outResult = response.getWriter();
} catch (IOException ioE) {
}

String saveFile = "D:\\get.xml";//""";
String uploadReult = "ERROR";
int reqStreamLen = request.getContentLength();
BufferedReader readFile = null;
BufferedWriter writeFile = null;

try {
InputStream is = request.getInputStream();
OutputStream os = new FileOutputStream(saveFile);//建立一个上传文件的输出流"D:\\get.xml"
int bytesRead = 0;
byte[] buffer = new byte[8192];
while ((bytesRead = is.read(buffer, 0, 8192)) != -1) {
os.write(buffer, 0, bytesRead);//传过来的文件写入文件
//System.out.println(new String(buffer));
}
os.flush();
os.close();
is.close();

} catch (UnsupportedEncodingException e) {
uploadReult = "UnsupportedEncodingException";
log.info(e.getMessage());
e.printStackTrace();
} catch (FileNotFoundException e) {
uploadReult = "FileNotFoundException";
log.info(e.getMessage());
e.printStackTrace();
} catch (IOException e) {
uploadReult = "IOException";
log.info(e.getMessage());
e.printStackTrace();
}

String uploadFile = (String)request.getParameter("filename");
File file = new File(saveFile);
log.info(String.valueOf(file.length()));
log.info(String.valueOf(reqStreamLen));
if(file.exists()&&(file.length()==reqStreamLen)){
uploadReult = "SUCCESS";
log.info(request.getRemoteAddr() + "上传文件:" + uploadFile + " 成功");
}else{
uploadReult = "ERROR";
log.info(request.getRemoteAddr() + "上传文件:" + uploadFile + " 失败");
}

outResult.println(uploadReult);
outResult.flush();
outResult.close();

}

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


/**
* Initialization of the servlet. <br>
*
* @throws ServletException if an error occure
*/
public void init() throws ServletException {

}

}
cxz7531 2005-02-05
  • 打赏
  • 举报
回复
String servletPath = "http://cxz/vml/s.jsp";
这一句可以是servlet路径,也可以是jsp路径,但要注意,不能是普通的html静态页面,否则出现回应错误如果是htm,应该去掉以下三句
PrintStream output = new PrintStream(reverseConn.getOutputStream());
output.print(reqstring);
output.flush();
向servlet发送的post参数长度无限制,我曾经设置过2M的长度,如果打算把servlet的输出存到一个文件,则调用第二个重载函数getOutText
GJA106 2005-02-05
  • 打赏
  • 举报
回复
URL默认是get操作,要改变URL请求操作类型必需通过HttpURLConnection 来实现。代码如下:
try {
StringBuffer strFileInfoBuf = new StringBuffer();
//发送文件数据信息:提交操作类型(FLAG)、传送的文件名称(name)
String strProcessURL =
"http://127.0.0.1/NSSB/MyServlet?FLAG=sendfile&name=apptest.log";

//connect server
URL objURL = new URL(strProcessURL);
HttpURLConnection objConn = (HttpURLConnection) objURL.openConnection();
//设置允许output
objConn.setDoOutput(true);
//设置为post方式
objConn.setRequestMethod("POST");
StringBuffer strTempBuf = new StringBuffer();
byte[] byteArray = new byte[2048];
int nReadCount = -1;
BufferedOutputStream objOutput =
new BufferedOutputStream(objConn.getOutputStream());
FileInputStream objFileIn = new FileInputStream("c:\\apptest.log");
while ((nReadCount = objFileIn.read(byteArray)) != -1) {
objOutput.write(byteArray, 0, nReadCount);
}
objOutput.flush();
objFileIn.close();
objOutput.close();
} catch (Exception e) {
e.printStackTrace();
}
cxz7531 2005-02-05
  • 打赏
  • 举报
回复
通过url地址传送post参数是不切实际的,在我的类中只需要设置getOutText的第二个参数params,该参数是一个二维数组,比如request=query,format=xml,query=select * from substation where name like '%硖北%'的话,就如下设置
String params[][]={ {"request","query"}, {"format","xml"}, {"query","select * from substation where name like '%硖北%'"} };
xitianjile 2005-02-05
  • 打赏
  • 举报
回复
这个过段时间我也要试。

确实很多答非所问。

楼主是要在java代码里面post数据而不是通过页面提交。
qqbz 2005-02-05
  • 打赏
  • 举报
回复
“如果是读取一个URL的数据已经成功了,但是如何向一个Servlet post数据呢?”
你是否希望把你自己的参数通过url地址传送给Servlet?
cxz7531 2005-02-05
  • 打赏
  • 举报
回复
我给你一个完整的类
import java.io.*;
import java.net.*;

/*
* 这个类用于得到某个URL资源的输出放在一个长字符串中 或者存在一个文件
*/
public class urlPostOutput {
public urlPostOutput() {

}
public static void main(String args[]) {
String servletPath = "http://cxz/vml/s.jsp";
String reqParam[][] = { { "request", "get_table_dec_service" },
{ "format", "xml" } };
//---------------------------------------
String s = urlPostOutput.getOutText(servletPath, reqParam);
System.out.println(s);
}

public static String getOutText(String url, String[][] params) {
/*
* 得到URL资源返回的内容字符串,可以在程序中直接解析,也可以存在一个文件 参数含义 url URL资源的路径 如
* "http://192.168.0.201/java/servlet" params 二维字符串数组,提供一系列,名/值对 典型格式是:
* String params[][]={ {"request","query"}, {"format","xml"},
* {"query","select * from substation where name like '%硖北%'"} };
*
*/
try {
String reqstring = "";
for (int i = 0; i < params.length; i++) {
if (i != 0)
reqstring += "&";
reqstring += URLEncoder.encode(params[i][0], "UTF-8") + '='
+ URLEncoder.encode(params[i][1], "UTF-8");
}
StringBuffer bf = new StringBuffer();
URL ur = new URL(url);
URLConnection reverseConn = ur.openConnection();
reverseConn.setDoOutput(true);
reverseConn.setDoInput(true);
PrintStream output = new PrintStream(reverseConn.getOutputStream());
output.print(reqstring);
output.flush();
DataInputStream input = new DataInputStream(reverseConn
.getInputStream());
int b;
while ((b = input.read()) != -1) {
bf.append((char) b);
}
return new String(bf.toString().getBytes("ISO-8859-1"), "UTF-8");
} catch (Exception e) {
System.out.print(e.toString());
return e.toString();
}

}

public static boolean getOutText(String url, String[][] params, String fanme) {
/*
* 得到URL资源返回的内容字符串,可以在程序中直接解析,这里存在一个文件fanme 参数含义 url URL资源的路径 如
* "http://192.168.0.201/java/servlet" params 二维字符串数组,提供一系列,名/值对 典型格式是:
* String params[][]={ {"request","query"}, {"format","xml"},
* {"query","select * from substation where name like '%硖北%'"} };
*
*/
try {
String s = getOutText(url, params);
FileOutputStream fos = new FileOutputStream(fanme);
fos.write(s.getBytes("UTF-8"));
fos.flush();
fos.close();
} catch (Exception e) {
System.out.print(e.toString());
return false;
}
return true;
}

}
liujiboy 2005-02-05
  • 打赏
  • 举报
回复
太多人答非所问了。
sfwxw0456 2005-02-05
  • 打赏
  • 举报
回复
没做过,顶!
shire 2005-02-05
  • 打赏
  • 举报
回复
mark
cxz7531 2005-02-05
  • 打赏
  • 举报
回复
我推荐使用URLConnection,它不需要设置method,可以把参数附加到url上,也可以通过OutputStream写到http body区
lxleaves 2005-01-31
  • 打赏
  • 举报
回复
这个你下载下来看
D:\jdk\jre\lib\font.properties.hi
这个是我post的文件名

http://218.94.36.113/file/L/lxleaves/catch.txt
lxleaves 2005-01-31
  • 打赏
  • 举报
回复
刚才抓包得到的资料(上传一个文件)
Content-Type: multipart/form-data; boundary=---------------------------7d510d111505ce
主要在这里声明分割行(随机的)

POST http://bbs.nju.edu.cn/vd994725/bbsdoupload HTTP/1.0

Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/msword, */*

Referer: http://bbs.nju.edu.cn/vd994725/bbsupload?board=MAILBOX

Accept-Language: zh-cn

Content-Type: multipart/form-data; boundary=---------------------------7d510d111505ce

Proxy-Connection: Keep-Alive

User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon)

Host: bbs.nju.edu.cn

Content-Length: 6056

Pragma: no-cache

Cookie: FOOTKEY=1413832894; utmpnum=1402; utmpkey=90403626; utmpuserid=lxleaves



-----------------------------7d510d111505ce

Content-Disposition: form-data; name="up"; filename="D:\jdk\jre\lib\font.properties.hi"

Content-Type: text/plain



# @(#)font.properties.hi 1.10 02/03/07
#
# Copyright 2002 Sun Microsystems, Inc. All rights reserved.
#

# Component Font Mappings
#
dialog.0=Arial,DEFAULT_CHARSET
dialog.1=Mangal,DEFAULT_CHARSET
dialog.2=WingDings,SYMBOL_CHARSET
dialog.3=Symbol,SYMBOL_CHARSET

dialog.bold.0=Arial Bold,DEFAULT_CHARSET
dialog.bold.1=Mangal,DEFAULT_CHARSET
dialog.bold.2=WingDings,SYMBOL_CHARSET
dialog.bold.3=Symbol,SYMBOL_CHARSET

dialog.italic.0=Arial Italic,DEFAULT_CHARSET
dialog.italic.1=Mangal,DEFAULT_CHARSET
dialog.italic.2=WingDings,SYMBOL_CHARSET
dialog.italic.3=Symbol,SYMBOL_CHARSET

dialog.bolditalic.0=Arial Bold Italic,DEFAULT_CHARSET
dialog.bolditalic.1=Mangal,DEFAULT_CHARSET
dialog.bolditalic.2=WingDings,SYMBOL_CHARSET
dialog.bolditalic.3=Symbol,SYMBOL_CHARSET

dialoginput.0=Courier New,DEFAULT_CHARSET
dialoginput.1=Mangal,DEFAULT_CHARSET
dialoginput.2=WingDings,SYMBOL_CHARSET
dialoginput.3=Symbol,SYMBOL_CHARSET

dialoginput.bold.0=Courier New Bold,DEFAULT_CHARSET
dialoginput.bold.1=Mangal,DEFAULT_CHARSET
dialoginput.bold.2=WingDings,SYMBOL_CHARSET
dialoginput.bold.3=Symbol,SYMBOL_CHARSET

dialoginput.italic.0=Courier New Italic,DEFAULT_CHARSET
dialoginput.italic.1=Mangal,DEFAULT_CHARSET
dialoginput.italic.2=WingDings,SYMBOL_CHARSET
dialoginput.italic.3=Symbol,SYMBOL_CHARSET

dialoginput.bolditalic.0=Courier New Bold Italic,DEFAULT_CHARSET
dialoginput.bolditalic.1=Mangal,DEFAULT_CHARSET
dialoginput.bolditalic.2=WingDings,SYMBOL_CHARSET
dialoginput.bolditalic.3=Symbol,SYMBOL_CHARSET

serif.0=Times New Roman,DEFAULT_CHARSET
serif.1=Mangal,DEFAULT_CHARSET
serif.2=WingDings,SYMBOL_CHARSET
serif.3=Symbol,SYMBOL_CHARSET

serif.bold.0=Times New Roman Bold,DEFAULT_CHARSET
serif.bold.1=Mangal,DEFAULT_CHARSET
serif.bold.2=WingDings,SYMBOL_CHARSET
serif.bold.3=Symbol,SYMBOL_CHARSET

serif.italic.0=Times New Roman Italic,DEFAULT_CHARSET
serif.italic.1=Mangal,DEFAULT_CHARSET
serif.italic.2=WingDings,SYMBOL_CHARSET
serif.italic.3=Symbol,SYMBOL_CHARSET

serif.bolditalic.0=Times New Roman Bold Italic,DEFAULT_CHARSET
serif.bolditalic.1=Mangal,DEFAULT_CHARSET
serif.bolditalic.2=WingDings,SYMBOL_CHARSET
serif.bolditalic.3=Symbol,SYMBOL_CHARSET

sansserif.0=Arial,DEFAULT_CHARSET
sansserif.1=Mangal,DEFAULT_CHARSET
sansserif.2=WingDings,SYMBOL_CHARSET
sansserif.3=Symbol,SYMBOL_CHARSET

sansserif.bold.0=Arial Bold,DEFAULT_CHARSET
sansserif.bold.1=Mangal,DEFAULT_CHARSET
sansserif.bold.2=WingDings,SYMBOL_CHARSET
sansserif.bold.3=Symbol,SYMBOL_CHARSET

sansserif.italic.0=Arial Italic,DEFAULT_CHARSET
sansserif.italic.1=Mangal,DEFAULT_CHARSET
sansserif.italic.2=WingDings,SYMBOL_CHARSET
sansserif.italic.3=Symbol,SYMBOL_CHARSET

sansserif.bolditalic.0=Arial Bold Italic,DEFAULT_CHARSET
sansserif.bolditalic.1=Mangal,DEFAULT_CHARSET
sansserif.bolditalic.2=WingDings,SYMBOL_CHARSET
sansserif.bolditalic.3=Symbol,SYMBOL_CHARSET

monospaced.0=Courier New,DEFAULT_CHARSET
monospaced.1=Mangal,DEFAULT_CHARSET
monospaced.2=WingDings,SYMBOL_CHARSET
monospaced.3=Symbol,SYMBOL_CHARSET

monospaced.bold.0=Courier New Bold,DEFAULT_CHARSET
monospaced.bold.1=Mangal,DEFAULT_CHARSET
monospaced.bold.2=WingDings,SYMBOL_CHARSET
monospaced.bold.3=Symbol,SYMBOL_CHARSET

monospaced.italic.0=Courier New Italic,DEFAULT_CHARSET
monospaced.italic.1=Mangal,DEFAULT_CHARSET
monospaced.italic.2=WingDings,SYMBOL_CHARSET
monospaced.italic.3=Symbol,SYMBOL_CHARSET

monospaced.bolditalic.0=Courier New Bold Italic,DEFAULT_CHARSET
monospaced.bolditalic.1=Mangal,DEFAULT_CHARSET
monospaced.bolditalic.2=WingDings,SYMBOL_CHARSET
monospaced.bolditalic.3=Symbol,SYMBOL_CHARSET

# Font File Names
#
filename.Arial=ARIAL.TTF
filename.Arial_Bold=ARIALBD.TTF
filename.Arial_Italic=ARIALI.TTF
filename.Arial_Bold_Italic=ARIALBI.TTF

filename.Courier_New=COUR.TTF
filename.Courier_New_Bold=COURBD.TTF
filename.Courier_New_Italic=COURI.TTF
filename.Courier_New_Bold_Italic=COURBI.TTF

filename.Times_New_Roman=TIMES.TTF
filename.Times_New_Roman_Bold=TIMESBD.TTF
filename.Times_New_Roman_Italic=TIMESI.TTF
filename.Times_New_Roman_Bold_Italic=TIMESBI.TTF

filename.WingDings=WINGDING.TTF
filename.Symbol=SYMBOL.TTF

filename.Mangal=MANGAL.TTF

# Missing Glyph Character
#
default.char=2751

# Component Font Character Encodings
#
fontcharset.dialog.0=sun.io.CharToByteCp1252
fontcharset.dialog.1=sun.io.CharToByteUnicodeLittle
fontcharset.dialog.2=sun.awt.windows.CharToByteWingDings
fontcharset.dialog.3=sun.awt.CharToByteSymbol

fontcharset.dialoginput.0=sun.io.CharToByteCp1252
fontcharset.dialoginput.1=sun.io.CharToByteUnicodeLittle
fontcharset.dialoginput.2=sun.awt.windows.CharToByteWingDings
fontcharset.dialoginput.3=sun.awt.CharToByteSymbol

fontcharset.serif.0=sun.io.CharToByteCp1252
fontcharset.serif.1=sun.io.CharToByteUnicodeLittle
fontcharset.serif.2=sun.awt.windows.CharToByteWingDings
fontcharset.serif.3=sun.awt.CharToByteSymbol

fontcharset.sansserif.0=sun.io.CharToByteCp1252
fontcharset.sansserif.1=sun.io.CharToByteUnicodeLittle
fontcharset.sansserif.2=sun.awt.windows.CharToByteWingDings
fontcharset.sansserif.3=sun.awt.CharToByteSymbol

fontcharset.monospaced.0=sun.io.CharToByteCp1252
fontcharset.monospaced.1=sun.io.CharToByteUnicodeLittle
fontcharset.monospaced.2=sun.awt.windows.CharToByteWingDings
fontcharset.monospaced.3=sun.awt.CharToByteSymbol

# Exclusion Ranges
#
exclusion.dialog.0=0900-20ab,20ad-ffff
exclusion.dialoginput.0=0900-20ab,20ad-ffff
exclusion.serif.0=0900-20ab,20ad-ffff
exclusion.sansserif.0=0900-20ab,20ad-ffff
exclusion.monospaced.0=0900-20ab,20ad-ffff

# Text Input Character Set
#
inputtextcharset=DEFAULT_CHARSET


-----------------------------7d510d111505ce

Content-Disposition: form-data; name="MAX_FILE_SIZE"



5000000

-----------------------------7d510d111505ce

Content-Disposition: form-data; name="board"



MAILBOX

-----------------------------7d510d111505ce

Content-Disposition: form-data; name="exp"





-----------------------------7d510d111505ce--
lxleaves 2005-01-31
  • 打赏
  • 举报
回复
你想post multipart/form-data?
我整理一下给你
liujiboy 2005-01-31
  • 打赏
  • 举报
回复
bonbonice(冰狐):
先搞清楚我问的问题,然后再回答。
bonbonice 2005-01-31
  • 打赏
  • 举报
回复
给你一个例子
Jsp的一个重要特性就是可以用javaBean实现功能的扩展。将大部分功能放在javaBean中完成,以使jsp页面程序更干净简洁、利于维护。JavaBean可以很方便的用来捕获页面表单的输入并完成各种业务逻辑的处理。如下就是一个Hello示例:

testA.jsp页面:

<%@ page contentType="text/html;charset=GBK" %>
<html>
<head>
<title>示例</title>
</head>
<body scroll=no>
<form name="frma" method="post" action="testB.jsp" >
<p>
你的姓名:
<input type="text" size="15" name="yourName" value="" id=yourName>
<input type="button" align="center" name="subBtn" value="[提交]" onClick="f_check()" id=subBtn>
</p>
</form>
</body>
</html>
<script language="JavaScript" type="text/javascript">
<!--
function f_check(){
if(document.forms(0).yourName.value==""){
alert("请输入姓名");
}else{
document.forms(0).submit();
}
}
-->
</SCRIPT>

testB.jsp页面

<%@ page contentType="text/html;charset=GBK" %>
<html>
<head>
<title>示例</title>
</head>
<jsp:useBean id="tBean" scope="page" class="bean.TestBean" >
<jsp:setProperty name="tBean" property="*" />
</jsp:useBean>
<body scroll=no>
<form name="frmb" method="post" action="" >
<p>
<%=tBean.hello()%>
</p>
</form>
</body>
</html>


TestBean.java 代码:

package bean;

public class TestBean{

private String yourName = "";

public void setYourName(String yourName){
this.yourName = ConvertGBK(yourName);
}

public String hello(){
String strHello = "Hello:"+yourName;
return strHello;
}

//汉字转换方法
public String ConvertGBK(String str){
String strReturn="";
try{
strReturn=new String(str.getBytes("ISO-8859-1"),"GBK");
}catch(Exception ex){
System.out.println("TestBean.ConvertGBK():ex="+ex.toString());
}
finally{
return strReturn;
}
}

}
testA.jsp页面上“提交”按钮将表单提交给testB.jsp页面,testB.jsp获得的testA.jsp中yourName文本框的值并在实例化TestBean后,执行bean中的setYourName方法,接着执行hello方法,在页面上输出对你问好的语句。
这个简单的示例体现了在jsp中使用javaBean的两个重要方面,一个是捕获表单的输入并保存,一个是执行逻辑功能。所以,依此两个功能还可以将用在jsp中的javaBean分为值Bean(value bean)和工具Bean (utility bean),如下:

值Bean
package bean;

public class TestValueBean{
private String yourName = "";

public void setYourName(String yourName){
this.yourName = ConvertGBK(yourName);
}
//汉字转换方法
public String ConvertGBK(String str){
String strReturn="";
try{
strReturn=new String(str.getBytes("ISO-8859-1"),"GBK");
}catch(Exception ex){
System.out.println("TestBean.ConvertGBK():ex="+ex.toString());
}
finally{
return strReturn;
}
}
}

工具Bean
package bean;

public class TestUtilityBean{

public String hello(TestValueBean tvBean){
String strHello = "Hello:"+tvBean.getName();
return strHello;
}
public String hello(String yourName){
String strHello = "Hello:"+yourName;
return strHello;
}
}

当然,从这个例子看是没有必要分开value bean和utility bean的,但在具有复杂业务逻辑的web应用程序中就可以用value bean实现对表单输入的捕获、保存,减少对数据库中那些值几乎不变的实体的访问,或将value bean放在一定作用域内使此作用域内的多个jsp页面共享。用utility bean完成操作数据库、数据处理等业务逻辑,以value bean 或页面传递的值为参数。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧