用Jsp的兄弟们,我想比较Asp.Net与Jsp读取数据库并显示的方法,请给出Java代码,谢谢!

屡败屡战数马援 2005-07-06 10:02:50
首先说明,我是一个Asp.Net的开发者,有4年的经验,算得上比较有经验了。这里我不准备表明什么.Net好,Java好之类的废话,我完全是抱着技术交流的意思来的。

发这个贴子的意思是我从前年开始看Think In Java第二版这本书。说实话,这本书太好了,我的OOP思想实际上就是从这本书上学来的,尤其是多态,非常有用。所以我一直对Java非常敬佩。故发此帖希望仔细了解一下Jsp的运行方式。

好,现在开始。

我说明的是要建立一个动态页面,这个页面就一个功能,访问某个数据库(哪个数据库并不重要)中的一个表,读取这个表内的所有记录,并显示在页面中的<table>中。很简单吧?我要建立的就是一个Asp.Net页面,实际上它包括两个文件,一个存放表示内容(即html代码和控件占位符)的.aspx文件和一个存放服务器端操作代码的文件。我将对所有Asp.Net方面的代码做详细注释。

首先是一个default.aspx文件,他负责放置html
代码开始:

<%@ Page language="c#" Codebehind="default.aspx.cs" AutoEventWireup="false" Inherits="MyWeb.SiteIndex" %>
/---------------------------
说明:
这是第一行代码,与Jsp一样,第一行代码是页面说明,以 <%@ 开始, %> 结束
language很简单,jsp中也有,指示页面使用的编码语言
Codebehind 就是指定保存后台的服务器操作代码的文件,一般后台代码文件以页面名+.cs组成
autoeventwireup 指定是否是把服务器操作代码与html混合,这是为了兼容asp而设的,如果是true,则与asp一样开发,可以让后台程序代码与html混合。
inherits 是继承类的全名,包括名称空间,具体解释在后面
//---------------------------

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<html>
<head>
......
</head>
<body>
<asp:DataGrid id="myData" runat="server" />
</body>
</html>

//---------------------------
上面的代码很简单,一大堆html,就是一行asp.net专用代码:
<asp:DataGrid id="myData" runat="server" />
这个实际上是一个网格控件,它的功能就是生成一个<table></table>表。数据网格实际上Java肯定有,任何开发平台上都有。这个控件的具体操作在后台代码中。
关键是id属性,他引用了父类的一个字段,id中的内容必须与父类的字段名相同。
//---------------------------


好,default.aspx写完了,现在开始后台的具体操作代码了,(使用语言C#),代码开始:
using System; // using 是引用名称空间,类似于Java中的import java.util.*
using System.Data; // 引用专门处理数据的名称空间
using System.Data.SqlServer; // 数据库使用Ms SqlServer,所以用这个,当然可以用别的
using System.Web.UI.WebControls; // 引用Web服务器控件空间

namespace MyWeb // 定义自己的名称空间
{
// 下行代码定义类,类名是SiteIndex,加上名称空间后这个类的全名就是MyWeb.SiteIndex
// 冒号表示继承,类中的冒号代表Java中的extends
// 表示SiteIndex类继承System.Web.UI名称空间中的Page类
// 必须直接或间接继承这个类,与Java写Applet继承JApplet一样
public class SiteIndex : System.Web.UI.Page
{
// 页面中使用的DataGrid控件引用
protected DataGrid myData; // 必须与页面的控件占位符id相同

// 重写基类的OnInit事件处理方法,表示初始化
// override 关键字表示这是一个重写基类的方法
// EventArgs 是传递事件数据的类,系统自带
protected override void OnInit(System.EventArgs e)
{
// 添加事件处理,这个事件表示当页面每次载入时执行的方法,
// 类似于Applet中的start
// Load 是基类定义的一个事件,使用委托指定当事件发生时执行的方法
this.Load += new EventHandler(this.Page_Load);
}

// 正式方法定义,读数据库什么的都在这里
private void Page_Load(object sender, EventArgs e)
{
// 建立一个字符串变量,保存数据库连接字符串
// 这个字符串可以不写,内容略
string connstring = ".....";

// 建立数据库连接对象,建立连接
// 构造器参数就是上面的那个数据库连接串
SqlConnection conn = new SqlConnection(connstring);

// 建立sql命令字符串
stirng sql = "Select * From ....";

// 建立Sql命令对象,必须把连接对象与sql命令传递进去
SqlCommand command = new SqlCommand(sql, conn);

// 这时,实际上已经可以访问数据库了,
// 但为了清晰,再使用两个对象

// 建立执行数据填充的对象,它是一个数据适配器
// 它可以执行数据库查询,数据库更新操作
// 这里仅用它来操作数据库查询
SqlDataAdapter adapter = new SqlDataAdapter(command);

// 建立数据存放的容器,它是接收到数据库返回的数据后
// 绑定数据到界面前临时存放数据的地方
// 而且可以接受数据修改等,在C/S中就是客户端放数据的地方
DataSet data = new DataSet();

// 正式打开数据库连接
// 开启错误处理
try
{
conn.Open(); // 打开连接
// 执行数据库命令,并把数据填充到DataSet中
// table1 表示DataSet中的一个表名称
// DataSet可以放多个表
adapter.Fill(data, "Table1");
}
catch(Exception ex) // 捕获错误,错误发生后处理
{
myData.Visible = false; // DataGrid取消显示

// 使用Response.Write输出错误信息
// 使用Exception 异常类的引用ex
// Message属性是错误信息
Response.Write(ex.Message);
// 不执行数据绑定,直接退出
return;
}
finally // 与Java的finally相同
{
// 无论是否发生错误,都关闭数据连接
conn.Close();
adapter.Dispose();
command.Dispose();
}

// 如果没有错误,就绑定数据
myData.DataSource = ds.Tables[0]; // 绑定DataSet的第0个表
myData.DataBind(); // 执行内部的数据绑定

// 清理DataSet
ds.Dispose();
}
}
}


****************************************

好,asp.net 中执行数据库操作并显示在网页上的操作就写完了,如果是在开发环境下的话,直接编译后就可以显示了。

谁能给出一个Java开发Jsp的开发步骤,我参考一下。请给出详细注释,因为我对Java中的对象一点也不懂。

请Java高手指教。
...全文
283 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
lilijr 2005-07-06
  • 打赏
  • 举报
回复
一个简单的例子,
<%@ page contentType="text/html;charset=GB2312"%>
<%@ page language="java" import="java.sql.*"%>
<%
String mySqlDriver = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://localhost/mysql";//数据库连接
Connection conn;
Class.forName(mySqlDriver);
conn = DriverManager.getConnection( url,"root","");//用户名与密码
if(conn==null){
System.out.println("get Conn Error");
}
Statement stmt=conn.createStatement();
ResultSet rs=null;
rs=stmt.executeQuery("select * from user");
while(rs.next())
{//循环显示记录
%>
<a href='display.jsp?id=<%=rs.getString("User")%>' target=_blank><%=rs.getString("Host")%></a>(<%=rs.getString("User")%>)
<%="<br>"%>
<%
}
rs.close();
stmt.close();
conn.close();
%>
dobly 2005-07-06
  • 打赏
  • 举报
回复
这是JSP最简单的连接数据库的方法:
<%@pagecontentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*"%>
<html>
<body>
<%Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
Stringurl="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs";
//pubs为你的数据库的
String user="sa";
String password="";
Connection conn= DriverManager.getConnection(url,user,password);
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from test";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) {%>
您的第一个字段内容为:<%=rs.getString(1)%>
您的第二个字段内容为:<%=rs.getString(2)%>
<%}%>
<%out.print("数据库操作成功,恭喜你");%>
<%rs.close();
stmt.close();
conn.close();
%>
</body>
</html>

这段程序没有实现html跟java代码的分离。
通过自定义控件+Bean可以实现部分分离。
纯JAVA没有像.NET那样的DataGrid控件,也没有.NET中绑定的概念。
Structs可以实现JAVA代码跟HTML分离。
xuyang821225 2005-07-06
  • 打赏
  • 举报
回复
这个实际上是一个网格控件,它的功能就是生成一个<table></table>表。数据网格实际上Java肯定有,任何开发平台上都有。这个控件的具体操作在后台代码中。


我没有用什么控件,也不知道是否有,我都是自己做个标签来做的,不过思想都是一样的,很简单
lohool 2005-07-06
  • 打赏
  • 举报
回复
Think In Java书上应该有JDBC方法连数据库的吧,还是去翻翻书吧

81,094

社区成员

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

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