文档库 最新最全的文档下载
当前位置:文档库 › Ajax传值

Ajax传值

Ajax传值
Ajax传值

文件版次:

目录

一.利用ajax 传值的基本原理和步骤 (3)

二.解析类 (6)

三.接口 (7)

四.工厂类 (8)

五.解析类解析 (8)

六.Jdbc连接池 (10)

七.DBConnection 连接类 (12)

八.数据库操作类 (13)

九.打包J2EE程序………………………

利用ajax 传值的基本原理和步骤

原理:

第一步:通过网页获取数据并形成xml串传给服务器端,形成xml串的代码如下:var str="";//首先定义一个变量用来放形成的xml串

str=str+"com.hhsoft.work.InsertInfocx"+cx_bh_value+""//形成的xml串

创建xmlhttpRequest对象

function createxml(){

if(window.ActiveXobject){

xmlhttp=new ActiveXobject(“Microsoft.XMLHTTP”);

}

else if(window.XMLHttpRequest){

xmlhttp= new XMLHttpRequest();

}

}

首先浏览器版本分为两大类:ActiveXObject 对象(IE)和xmlhttpRequest对象(Internet Explorer 5.0+、Safari 1.2、Mozilla 1.0 / Firefox、Opera 8+ 以及Netscape 7)

同时IE浏览器分了很多版本,版本号是(Msxml2.XMLHTTP.3.0)(Msxml2.XMLHTTP.4.0);Msxml2.XMLHTTP.5.0;Msxml2.XMLHTTP;Microsoft.XMLHTTP)

try{

if( window.ActiveXObject ){

for( var i = 5; i; i-- ){

try{

if( i == 2 ){

xmlhttp_request = new

ActiveXObject( "Microsoft.XMLHTTP" ); }

else{

xmlhttp_request = new

ActiveXObject( "Msxml2.XMLHTTP." + i + ".0" );

xmlhttp_request.setRequestHeader("Content-Type","text/xml");

xmlhttp_request.setRequestHeader("Charset","gb2312"); }

break;

}

catch(e){

xmlhttp_request = false;

}

}

}else if( window.XMLHttpRequest ){

xmlhttp_request = new XMLHttpRequest();

if (xmlhttp_request.overrideMimeType) {

xmlhttp_request.overrideMimeType('text/xml');

}

}

}catch(e){ xmlhttp_request = false; }

xmlhttp_request.Open("POST","kk",false);

xmlhttp_request.setRequestHeader("Content-Type","application/x-ww

w-form-urlencoded")

xmlhttp_request.send(null);

if (http_request.readyState == 4)

{

// 收到完整的服务器响应

if (http_request.status == 200) {

//HTTP服务器响应的值OK

requestdoc = http_request.responseXML;

//获得服务器返回的字符串

}else {

requestdoc = http_request.status; //相当与错误标记,返回一个数值

}

}

打开到服务器的连接发送具体的请求

xmlhttp.Open("POST","mainServlet",false);

xmlhttp.Send(str);//该方法向服务器发送具体的请求这一步实际打开到服务器的连接

第二步:配置站点下的web.xml文件配置如下:

mainServlet

mainServlet

mainServlet

/mainServlet

第三步:构建主类(控制类)在web.xml文档标签中指定的类

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;

public class mainServlet extends HttpServlet {

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws IOException, ServletException {

String _str = "";

String _strReturn = "";

//

xmlDataProcess xmldata = new xmlDataProcess();

try {

_str = xmldata.getString(request.getInputStream());

xmldata.setStrXml(_str);

Search sear = new Search();

_strReturn = sear.search(_str);

response.setContentType("text/html;charset=GB2312");

PrintWriter out = response.getWriter();

out.println(_strReturn);

} catch (Exception e) {

System.out.println(e.toString());

}

}

}

-----------------------业务类查找类Search源码如下----------------

import com.sun.rowset.CachedRowSetImpl;

public class Search {

String realclass;

String strr;

public String search(String str) {

xmlDataProcess xmldata = new xmlDataProcess();

Db db = new Db();

try {

xmldata.setStrXml(str);

String clas = xmldata.getvalue("class");

String sql = "select * from dy where scname="+"'"+ clas+"'";

CachedRowSetImpl cs = db.dbquery(sql);

if (cs.next()) {

realclass= new String((new String(cs.getString("realname")+

"").trim()).getBytes("ISO-8859-1"), "GBK");

}

BaseInterface o1 = ObjectFactory.makeObject(realclass);

strr=o1.ywcl(str);

} catch (Exception e) {

e.printStackTrace();

}

return strr;

}

}

-------------------解析类----------------------------------------------------------------------------- import java.io.*;

import javax.xml.parsers.*;

import org.w3c.dom.*;

public class xmlDataProcess {

String _strxml = "";

Document doc = null;

public void setStrXml(String _str) throws Exception {

_strxml = _str;

doc = getDocument(_strxml);

}

public void setStrXml(InputStream is) throws Exception {

_strxml = this.getString(is);

doc = getDocument(_strxml);

}

public String getString(InputStream is) throws Exception {

BufferedInputStream buf = new BufferedInputStream(is);

byte[] buffer = new byte[1024];

int iRead;

String s = "";

while ((iRead = buf.read(buffer)) != -1) {

s += new String(buffer, 0, iRead, "utf-8");

}

return s;

}

public Document getDocument(String _str) throws Exception {

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

DocumentBuilder db = dbf.newDocumentBuilder();

_str = "" + _str

+ ""

ByteArrayInputStream bis = new ByteArrayInputStream(_str.getBytes());

doc = db.parse(bis);

// Element em=doc.getDocumentElement();

return doc;

}

public String getvalue(String _strtagname) throws Exception {

String _strreturnvalue = "";

NodeList nl = doc.getElementsByTagName(_strtagname);

Node n0 = nl.item(0);

_strreturnvalue = n0.getFirstChild().getNodeV alue();

return _strreturnvalue;

}

---------------------------------------接口-----------------------------------------------

为什么要写接口:是为了写一个所有业务类可以实现这个接口中的一个抽象方法,所以全部的业务类里面都有这个接口中的这一个抽象方法,业务类只需要重写接口中的方法干活就可以了。注:在使用这个接口的时候,只需要向上转型。

// Jk jk=(Jk)Class.forName(“业务类的路径”).new Instance();

public interface BaseOpr {

public String ywcl(String str);

}

-----------------------------工厂类-----------------------------------

public class mainFactory{

public static BaseOpr getObj(String _str) throws Exception

{

Class c=Class.forName(_str);

return (BaseOpr)c.newInstance();

}

}

public class Cr implements BaseOpr {

String xb;

String xh;

String id;

String bj;

public String ywcl(String str) {

xmlData jx=new xmlData();

try {

jx.setStrXml(str);

xh = jx.getvalue("xh");

xb = jx.getvalue("xb");

id=jx.getvalue("id");

bj=jx.getvalue("bj");

······················

db cr=new db();

String sql="insert into tt(xh,xb,id,bj) values('"+xh+"','"+xb+"','"+id+"','"+bj+"')";

cr.dbUpdate(sql);

······················

String ql="delete from tt where xh='"+xh+"'";

r. dbUpdate (sql);

······················

String sql="update tt set xb='"+xb+"',id='"+id+"',bj='"+bj+"' where xh='"+xh+"'";

cr. dbUpdate (sql);

} catch (Exception e) {

e.printStackTrace();

}

return "新增记录成功";

} ···············

------------------------查询方法-----------------------------------

db b=new db();

CachedRowSetImpl rs=b.dbquery("select * from 表");

while(rs.next())

Stringxjzt=new

String((rs.getString("xjzt")+"").trim().getBytes("ISO8859-1"),"GBK");}

···············································································对业务类的总结:

业务类的操作就是对数据库的操作。调用数据库方法,实现数据的增删改查

其中查询的方法较为繁琐。因为我做的不仅是要查询。而是返回数据,对数据进行操作。像形成数,形成表格。形成菜单。在6类1个接口中,我所做的就是写业务类。实现对数据的操作。。。

一.Jdbc连接池

1.为什么要用数据库连接池

为了避免每次访问数据库的时候都需要重新建立新的连接而影响运行速度,在实际的项目中必须使用数据库连接池来提高数据库的访问效率。

2.作用

数据库应用,在许多软件系统中经常用到,是开发中大型系统不可缺少的辅助。但如果对数据库资源没有很好地管理(如:没有及时回收数据库的游标(ResultSet)、Statement、连接

(Connection)等资源),往往会直接导致系统的稳定。这类不稳定因素,不单单由数据库或者系统本身一方引起,只有系统正式使用后,随着流量、用户的增加,才会逐步显露。

在基于Java开发的系统中,JDBC是程序员和数据库打交道的主要途径,提供了完备的数据库操作方法接口。但考虑到规范的适用性,JDBC只提供了最直接的数据库操作规范,对数据库资源管理,如:对物理连接的管理及缓冲,期望第三方应用服务器(Application Server)的提供。

3.连接池技术背景

JDBC是一个规范,遵循JDBC接口规范,各个数据库厂家各自实现自己的驱动程序(Driver),如下图所示:

4. JDBC连接池

在标准JDBC对应用的接口中,并没有提供资源的管理方法。所以,缺省的资源管理由应用自己负责。虽然在JDBC规范中,多次提及资源的关闭/回收及其他的合理运用。但最稳妥的方式,还是为应用提供有效的管理手段。所以,JDBC为第三方应

用服务器(Application Server)提供了一个由数据库厂家实现的管理标准接口:连接缓冲(connection pooling)。引入了连接池( Connection Pool )的概念,也就是以缓冲池的机制管理数据库的资源。

JDBC最常用的资源有三类:

— Connection: 数据库连接。

— Statement: 会话声明。

— ResultSet: 结果集游标。

分别存在以下的关系:

4.连接池的配置及应用

path="/caidan”

type="javax.sql.DataSource" //对象类型maxActive="20"

maxIdle="30"

maxWait="10000"

username="sa"//登陆数据库的用户名

password=""//登陆数据库的密码

二.DBConnection 连接类

public class DBConnection

{

{

Connection conn;

return conn;

}

}

数据库操作类(类名Db)

一、

数据库操作类内,创建数据库连接类(DBConnection)对象,调用getConnection();方法,获得与数据库的连接——Connection。

此类只用于业务类,满足业务类对数据库的增删改查。

二、

A、此类属于普通类,无继承关系、无构造方法、无属性。

B、此类有四个方法、分别针对数据库的增删改查。

三、方法。

A、public Connection getConnection() throws Exception {

DBConnection dbc = new DBConnection();

Connection conn = dbc.getConnection();

return conn;

}

备注:此方法只用于本类之间调用,节省代码。由于增删改查各方法中都需要获取连接对象,并在db操作结束后,关闭连接(close()),所以各类都要执行这几行代码。

B、public CachedRowSetImpl dbquery(String sqlstr)

throws SQLException,Exception

{

Connection conn = this.getConnection();//调用本类方法,获的连接对象

Statement stm=conn.createStatement(

ResultSet.TYPE_SCROLL_SENSITIVE,

ResultSet.CONCUR_UPDATABLE);

// 创建一个 Statement 对象,该对象将生成具有给定类型和并发性的ResultSet 对象。

// ResultSet.TYPE_SCROLL_SENSITIVE 该常量指示可滚动并且通常受ResultSet 底层数据更改影响的

// ResultSet.CONCUR_UPDATABLE 该常量指示可以更新的 ResultSet 对象的并发模式。

ResultSet rs = stmt.executeQuery(sqlstr);

CachedRowSetImpl crs = null;

crs = new CachedRowSetImpl();

//crs实现CachedRowSet接口,CachedRowSet接口实现了ResultSet接口,所以crs对象可以理解为一个高级的ResultSet对象,实现了更多的功能

CachedRowSetImpl对象可以保存ResultSet对象中的数据,而且CachedRowSetImpl对象不依赖Connection对象,这意味着一旦把ResultSet对象中

的数据保存到CachedRowSetImpl对象中后,就可以关闭和数据库的连接

crs.populate(rs);

//由ResultSet对象的数据填充此CachedRowSet对象。

if (rs != null) {

rs.close();

stmt.close();

rs = null;

stmt = null;

}

//if判断关闭rs、stmt资源

conn.close();

return crs;

}

}

备注:此方法用于业务类执行select查询操作——a、参数——select查询语句

b、返回值——CachedRowSetImpl

c、select语句有误及、、,将抛出SQLException异常

C、public int dbUpdate(String sqlstr) {

int i = 0;

try {

Connection conn = this.getConnection();

Statement stmt = conn.createStatement(

ResultSet.TYPE_SCROLL_SENSITIVE,

ResultSet.CONCUR_UPDATABLE);

stmt.executeUpdate(sqlstr);

stmt.close();

conn.close();

i = 1;

} catch (Exception e) {

System.out.println(e.toString());

}

return i;

}

备注:此方法用于业务类updata更新操作、、如果更新数据成功则返回1;更新数据失败则返回0。

D、public int dbexe(String sqlstr) {

// int i = 0;

// try {

// Connection conn = this.getConnection();

// Statement stmt = conn.createStatement(

ResultSet.TYPE_SCROLL_SENSITIVE,

// ResultSet.CONCUR_UPDATABLE);

// stmt.execute(sqlstr);

// stmt.close();

// conn.close();

// i=1;

// } catch (Exception e) {

// System.out.println(e.toString());

// }

// return i;

// }

备注:上面方法是第四个方法,我实在找不出它与C方法之间的差异,我无法解析这个方法的用途,我认为完全可以隐掉、、、、、

execute(String sql) 返回类型boolean

执行给定的 SQL 语句,该语句可能返回多个结果(可能是多个ResultSet 对象或多个更新计数值或两者的组合)。主要指存储过程等sql语句,一般很少用executeQuery(String sql) 返回类型ResultSet

执行给定的 SQL 语句,该语句返回单个 ResultSet 对象主要执行select语句

executeUpdate(String sql) 返回类型int

执行给定 SQL 语句,返回值是一个整数(受影响的行数;不操作行的语句,返回值是零)。该语句可能为 INSERT、UPDATE 或 DELETE 语句,或者不返回任何内容的 SQL 语句(如 SQL DDL 语句)

四、如下是完整的代码、、

public class Db {

public Connection getConnection() throws Exception {

DBConnection dbc = new DBConnection();

Connection conn = dbc.getConnection();

return conn;

}

public CachedRowSetImpl dbquery(String sqlstr) throws Exception { CachedRowSetImpl crs = null;

crs = new CachedRowSetImpl();

Connection conn = this.getConnection();

Statement stmt =

conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,

ResultSet.CONCUR_UPDATABLE);

ResultSet rs = stmt.executeQuery(sqlstr);

crs.populate(rs);

if (rs != null) {

rs.close();

stmt.close();

rs = null;

stmt = null;

}

conn.close();

return crs;

}

public int dbUpdate(String sqlstr) {

int i = 0;

try {

Connection conn = this.getConnection();

Statement stmt = conn

.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,

ResultSet.CONCUR_UPDATABLE);

stmt.executeUpdate(sqlstr);

stmt.close();

conn.close();

i = 1;

} catch (Exception e) {

System.out.println(e.toString());

}

return i;

}

// public int dbexe(String sqlstr) {

// int i = 0;

// try {

// Connection conn = this.getConnection();

// Statement stmt = conn

// .createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, // ResultSet.CONCUR_UPDATABLE);

// stmt.execute(sqlstr);

// stmt.close();

// conn.close();

// i = 1;

// } catch (Exception e) {

// System.out.println(e.toString());

// }

// return i;

// }

}

打包J2EE程序

1.在eclipse中右击export J2EE war file

2.next 选择路径finish

3.将打包好的文件放入Tomcat下的webapps目录下

4.启动Tomcat,找到站点名为保存的文件名的站点。

5.

C笔试题目:将"引用"作为函数返回值类型的格式、好处和需要.doc

C++笔试题目:将”引用”作为函数返回值类型的格式、好处和需要格式:类型标识符函数名(形参列表及类型说明){//函数体} 好处:在内存中不产生被返回值的副本;(注意:正是因为这点原因,所以返回一个局部变量的引用是不可取的因为随着该局部变量生存期的结束,相应的引用也会失效产生runtimeerror! 注意事项: (1)不能返回局部变量的引用。这条可以参照EffectiveC++[l]的Item31。主要原因是局部变量会在函 返回后被销毁,因此被返回的引用就成为了”无所指”的引用,程序会进入未知状态。 (2 )不能返回函数内部ne w分配的内存的引用。这条可以参照Effect i veC++[l]的I tem31。虽然不存在局部变量的被动销毁问题,可对于这种情况(返回函数内部new分配内存的引用),又面临其它尴尬局面。例如,被函数返回的引用只是作为一个临时变量出现,而没有被赋予一个实际的变量,那么这个引用所指向的空间(由n ew分配)就无法释放,造成memoryl eak。 (3)可以返回类成员的引用,但最好是const。这条原则可以参照Eff ect iveC++[l]的I tem30。主要原因是当对

象的属性是与某种业务规则(busines sru le)相关联的时候,其赋值常常与某些其它属性或者对象的状态有关,因此有必要将赋值操作封装在一个业务规则当中。 如果其它对象可以获得该属性的非常量引用(或指针),那么对该属性的单纯赋值就会破坏业务规则的完整性。 (4)流操作符重载返回值申明为“引用”的作用: 流操作符〉,这两个操作符常常希望被连续使用,例如: cout对于返回一个流指针则不能连续使用这个操作符象流操作符一样,是可以连续使用的,例如:x=j=10;或者(x=10)=100 :赋值操作符的返回值必须是一个左值,以便可以被继续赋值。因此引用成了这个操作符的惟一返回值选择。 例3 ^include in tp ut (intn); in tvals [10]: i nter ror=-l; voi dmain() { put (0)=10 ://以put (0)函数值作为左值,等价于V als[0]二10 ; put (9) =20;//以put (9)函数值作为左值,等价于va ls[9]=20;

JAVA常见返回类型

JAVA常见返回类型 Java是Sun公司推出的一种编程语言。它是一种通过解释方式来执行的语言,语法规则和C++类似。同时,Java也是一种跨平台的程序设计语言。用Java语言编写的程序叫做“Applet”(小应用程序),用编译器将它编译成类文件后,将它存在WWW页面中,并在HTML 档上作好相应标记,用户端只要装上Java的客户软件就可以在网上直接运行“Applet”。Java非常适合于企业网络和Internet环境,现在已成为Internet中最受欢迎、最有影响的编程语言之一。 Java有许多值得称道的优点,如简单、面向对象、分布式、解释性、可靠、安全、结构中立性、可移植性、高性能、多线程、动态性等。Java摈弃了C++中各种弊大于利的功能和许多很少用到的功能。 Jave可以运行与任何微处理器,用Java开发的程序可以在网络上传输,并运行于任何客户机上。那么什么是JAVA常见返回类型呢? 基本数据类型又可以分为3小类: 整型数据类型,布尔数据类型,浮点型数据类型 整型数据类型: byte(1个字节)----字节型 short(2个字节)-----短整型 char(2个字节)----字符型 int(4个字节)----整型 long(8个字节)-----长整型 布尔类型:boolean(1个字节)----布尔型 浮点型:float(4个字节)----单精度浮点型 double(8个字节)----双精度浮点型 2、对象类型: 1)自定义的对象类型 2)类库类型 每一种返回类型都有默认值: int:0

byte:0 char:/u0000(在控制台显示为一个方格) short:0 long:0 boolean:false float:0.0 Double:0.0 Object:null (ps:本文章由北大青鸟广安门校区搜集自互联网)

C语言函数说明与返回值

在学习C语言函数以前,我们需要了解什么是模块化程序设计方法。 人们在求解一个复杂问题时,通常采用的是逐步分解、分而治之的方法,也就是把一个大问题分解成若干个比较容易求解的小问题,然后分别求解。程序员在设计一个复杂的应用程序时,往往也是把整个程序划分为若干功能较为单一的程序模块,然后分别予以实现,最后再把所有的程序模块像搭积木一样装配起来,这种在程序设计中分而治之的策略,被称为模块化程序设计方法。 在C语言中,函数是程序的基本组成单位,因此可以很方便地用函数作为程序模块来实现C 语言程序。 利用函数,不仅可以实现程序的模块化,程序设计得简单和直观,提高了程序的易读性和可维护性,而且还可以把程序中普通用到的一些计算或操作编成通用的函数,以供随时调用,这样可以大大地减轻程序员的代码工作量。 函数是C语言的基本构件,是所有程序活动的舞台。函数的一般形式是: type-specifier function_name(parameter list) parameter declarations { body of the function } 类型说明符定义了函数中return语句返回值的类型,该返回值可以是任何有效类型。如果没有类型说明符出现,函数返回一个整型值。参数表是一个用逗号分隔的变量表,当函数被调用时这些变量接收调用参数的值。一个函数可以没有参数,这时函数表是空的。但即使没有参数,括号仍然是必须要有的。参数说明段定义了其中参数的类型。 当一个函数没有明确说明类型时, C语言的编译程序自动将整型( i n t)作为这个函数的缺省类型,缺省类型适用于很大一部分函数。当有必要返回其它类型数据时,需要分两步处理: 首先,必须给函数以明确的类型说明符;其次,函数类型的说明必须处于对它的首次调用之前。只有这样,C编译程序才能为返回非整型的值的函数生成正确代码。 4.1.1 函数的类型说明 可将函数说明为返回任何一种合法的C语言数据类型。 类型说明符告诉编译程序它返回什么类型的数据。这个信息对于程序能否正确运行关系极大,因为不同的数据有不同的长度和内部表示。 返回非整型数据的函数被使用之前,必须把它的类型向程序的其余部分说明。若不这样做,C语言的编译程序就认为函数是返回整型数据的函数,调用点又在函数类型说明之前,编译程序就会对调用生成错误代码。为了防止上述问题的出现,必须使用一个特别的说明语句,通知编译程序这个函数返回什么值。下例示出了这种方法。

相关文档