一个简单的Web登录程序 GET和POST的区别

一个简单的Web登录程序 GET和POST的区别,第1张

一、区别与应用: Form中的get和post方法,在数据传输过程中分别对应了HTTP协议中的GET和POST方法。二者主要区别如下: 1、Get是用来从服务器上获得数据,而Post是用来向服务器上传递数据。 2、Get将表单中数据的按照variable=value的形式,添加到action所指向的URL后面,并且两者使用“?”连接,而各个变量之间使用“&”连接;Post是将表单中的数据放在form的数据体中,按照变量和值相对应的方式,传递到action所指向URL。 3、Get是不安全的,因为在传输过程,数据被放在请求的URL中,而如今现有的很多服务器、代理服务器或者用户代理都会将请求URL记录到日志文件中,然后放在某个地方,这样就可能会有一些隐私的信息被第三方看到。另外,用户也可以在浏览器上直接看到提交的数据,一些系统内部消息将会一同显示在用户面前。Post的所有 *** 作对用户来说都是不可见的。 4、Get传输的数据量小,这主要是因为受URL长度限制;而Post可以传输大量的数据,所以在上传文件只能使用Post(当然还有一个原因,将在后面的提到)。 5、Get限制Form表单的数据集的值必须为ASCII字符;而Post支持整个ISO10646字符集。 6、Get是Form的默认方法。 二、从HTML中发送数据,在ASP中如何接收? 在form表单的action属性值里面有一个相对路径指向asp文件。就是用这个asp文件来接收和处理的。

要利用 NetBeans IDE 的 Java EE 5 功能,请使用完全符合 Java EE 5 规范的应用服务器,例如 GlassFish 2.1 UR2 应用服务器。如果使用的是其他服务器,请查阅发行说明和常见问题解答,了解已知问题和解决方法。有关支持的服务器和 Java EE 平台的详细信息,请参见发行说明。

如果需要将项目与工作解决方案进行比较,可以下载样例应用程序。

设置 Web 应用程序项目

从主菜单中选择“文件”>“新建项目”(Ctrl-Shift-N)。在“类别”下,选择“Java Web”。在“项目”下选择“Web 应用程序”,然后单击“下一步”。

在步骤 2 中,在“项目名称”文本框中输入 HelloWeb。

将“项目位置”指定为计算机上的任意目录。在本教程中,将此目录称为 $PROJECTHOME。

(可选)选中“使用专用文件夹存储库”复选框,并指定库文件夹的位置。有关此选项的详细信息,请参见共享项目库。

单击“下一步”。“服务器和设置”面板打开。选择要与应用程序一起使用的 Java EE 版本。

选择要在其中部署应用程序的服务器。这里仅列出了已在 IDE 中注册的服务器。请注意,服务器上的上下文路径将变为 /HelloWeb(基于您在上一步中为项目指定的名称)。

单击“下一步”。在“框架”面板中,单击“完成”以创建项目。

IDE 将创建 $PROJECTHOME/HelloWeb 项目文件夹。此项目文件夹包含所有源代码和项目 meta 数据,例如项目的 Ant 生成脚本。在 IDE 中,将打开 HelloWeb 项目。在主窗口的源代码编辑器中,将打开欢迎页 index.jsp。您可以在“文件”窗口 (Ctrl-2) 中查看项目的文件结构,在“项目”窗口 (Ctrl-1) 中查看其逻辑结构。

创建并编辑 Web 应用程序源文件

创建并编辑源文件是 IDE 所提供的最重要的功能。毕竟,这大概是您花费时间最多的工作。IDE 提供了各种工具来迎合任何开发者的个人风格,无论您是愿意手动编写所有代码,还是希望 IDE 为您生成大量代码。

创建 Java 包和 Java 源文件

在“项目”窗口中,展开“源包”节点。请注意,“源包”节点仅包含一个空的缺省包节点。

右键单击“源包”节点,然后选择“新建”>“Java 类”。在“类名”文本框中输入 NameHandler,并在“包”组合框中键入 org.mypackage.hello。单击“完成”。请注意,将在源代码编辑器中打开新的 NameHandler.java 文件。

在源代码编辑器中,通过在紧靠类声明的下方键入以下代码行来声明一个 String 变量。 String name

将以下构造函数添加到类中: public NameHandler()

在 NameHandler() 构造函数中添加以下代码行: name = null

生成 getter 和 setter 方法

在源代码编辑器中右键单击 name 字段,然后选择“重构”>“封装字段”。将打开“封装字段”对话框,其中列出 name 字段。请注意,缺省情况下将“字段的可视性”设置为 "private",将“存取方法的可视性”设置为 "public",这表示类变量声明的访问修饰符将被指定为 private,而 getter 和 setter 方法将分别以 public 和 private 修饰符生成。

单击“重构”。将为 name 字段生成 getter 和 setter 方法。类变量的修饰符将被设置为 private,而 getter 和 setter 方法将以 public 修饰符生成。

编辑缺省的 JavaServer Pages 文件

通过单击在源代码编辑器顶部显示的 "index.jsp" 文件标签以重新选中该文件。

在位于源代码编辑器右侧的组件面板 (Ctrl-Shift-8) 中,展开“HTML 表单”,然后将一个表单项拖至源代码编辑器中

标记后的某个位置。

将显示“插入表单”对话框。

请指定以下值:

*** 作:response.jsp

方法:GET

名称:Name Input Form

单击“确定”。将在 index.jsp 文件中添加一个 HTML 表单。

将一个文本输入项拖至紧靠 标记前面的位置,然后指定以下值:

名称:name

类型:文本

单击“确定”。将在 标记之间添加一个 HTML 标记。

将一个按钮项拖至紧靠 标记前面的位置。请指定以下值:

标签:OK

类型:提交

单击“确定”。将在 标记之间添加一个 HTML 按钮。

在紧靠第一个 标记前面的位置键入 Enter your name:,然后将

标记之间的缺省 Hello World! 文本更改为 Entry Form。

创建 JavaServer Pages 文件

在“项目”窗口中,右键单击 "HelloWeb" 项目节点,然后选择“新建”>"JSP"。将打开“新建 JSP 文件”向导。将文件命名为 response,然后单击“完成”。请注意,在“项目”窗口中的 "index.jsp" 下方将显示 "response.jsp" 文件节点,并且会在源代码编辑器中打开新文件。

在位于源代码编辑器右侧的组件面板中,展开 "JSP",然后将一个使用 Bean 项拖至源代码编辑器中紧靠 标记下方的位置。将打开“插入使用 Bean”对话框。指定下图中显示的值。

ID:mybean

类:org.mypackage.hello.NameHandler

范围:session

单击“确定”。请注意,将在 标记的下方添加 标记。

将一个设置 Bean 属性项从组件面板拖至紧靠 <h1>标记前面的位置,然后单击“确定”。在出现的 标记中,删除空的 value 属性,然后将其编辑为以下代码。如果 IDE 创建了 value = "" 属性,请将其删除!否则,它会覆盖传递到 index.jsp 中的 name 的值。

正如 文档中所述,可以通过各种方法来设置属性值。在本例中,index.jsp 页上的用户输入将成为传递至 request 对象的名称/值对。当使用 标记设置属性时,可以根据 request 对象中包含的属性名称来指定值。因此,通过将 property 设置为 name,可以检索由用户输入所指定的值。

更改 <h1>标记之间的文本,以使其如下所示: <h1>Hello, !

将一个获取 Bean 属性项从组件面板拖放到

标记之间的逗号后面。在“插入获取 Bean 属性”对话框中指定以下值:

Bean 名称:mybean

属性名称:name

单击“确定”。请注意,此时将在 <h1>标记之间添加 <jsp:getProperty>标记。

在开始下面这个例子之前,你的系统需要:

1、WIN2000 + IIS;

2、VS.Net;

3、SQL Server(我这里用的是SQL数据库);

这个Web Service的例子用的是MS大吹的C#写的,如果你喜欢VB,那么用VB也是一样的哦,只不过语法上一些小的差别而已,道理都是一样的,不过即然MS都鼓吹C#,如果你能够用C#写还是用这为好哦。

下面是写的步骤:

一、打开VS。NET的集成开发环境,FILE菜单上选择New,新建一个C#的ASP.NET Web Service工程,工程名为WebServiceDemo(完整的是http://localhost/WebServiceDemo)。这是VS就在你的Web系统目录下生成了相应的文件,我的服务目录是默认的c:\Inetpub\wwwroot,生成的文件就在c:\Inetpub\wwwroot\webserviceDemo下,就不多说了。

二、打开与生成工程对应的C#源文件,这里是Service1.asmx.cs,VS.Net集成环境已经为你生成了相应的代码如下:

// =============================================================================

// 文件: Service1.asmx.cs

// 描述: 架构一个Web Service来对数据库进行互访

//

//

// ============================================================================

using System

using System.Collections

using System.ComponentModel

using System.Data

using System.Diagnostics

using System.Web

using System.Web.Services

using System.Data.SqlClient

// 系统生成了与工程名相同的命名空间

namespace WebServiceDemo

{

/// <summary>

/// Summary description for Service1.

/// </summary>

// 所有的WEB服务都是派生于System.Web.Services.WebService的。

public class Service1 : System.Web.Services.WebService

{

public Service1()

{

//CODEGEN: This call is required by the ASP.NET Web Services Designer

InitializeComponent()

}

}

}

里面我添加了文件说明和相应的注释,接下来就是在里面编写相应的服务代码了。这里我想先把对数据库的 *** 作封装在同一命名空间的单独的一个类里,下面编写WEB方法时只用接调用这个类中的相应方法就可以了。下面是我写的这个类的代码:

// -------------------------------------------------------------------------

// 构建一个新类,用于对数据的访问

// -------------------------------------------------------------------------

public class DataAccess

{

// 连接字符串成员变量

private string m_szConn = ""

private SqlConnection m_sqlConn

private SqlDataAdapter m_sqlDa

// 构造函数

public DataAccess(string szConnectionString)

{

m_szConn = szConnectionString

}

// 返回一个记录集

public DataSet GetDataset(string szCommandText)

{

DataSet sqlDs

try

{

m_sqlConn = new SqlConnection(m_szConn)

m_sqlConn.Open()

m_sqlDa = new SqlDataAdapter(szCommandText,m_sqlConn)

sqlDs = new DataSet()

m_sqlDa.Fill(sqlDs)

m_sqlConn.Close()

return sqlDs

}

catch

{

return null

}

}

// 重载上述方法

public DataSet GetDataset(string szCommandText, string szTableName)

{

DataSet sqlDs

try

{

m_sqlConn = new SqlConnection(m_szConn)

m_sqlConn.Open()

m_sqlDa = new SqlDataAdapter(szCommandText,m_sqlConn)

sqlDs = new DataSet()

m_sqlDa.Fill(sqlDs,szTableName)

m_sqlConn.Close()

return sqlDs

}

catch

{

return null

}

}

}

这些就不多说了,与创建一般的C#类是一样的。类中有三个函数,其中一个为构造函数,调用时传入连接字符串。另外两个函数都是一样的作用,返回用户需要的记录集,只不是调用时传的参数不一样,实质都是一样的。

下面就是在Service1类中添加真正用于WEB调用的代码了,这部分才是给WEB应用程序调用的东西。在编写这个类的代码之前,应该先申请一个服务命令空间,设置相应的属性,这一句可万万不能少哦,呵呵~,它告诉了WEB服务存放的路径等相关的信息。如下:

// 声明一个服务空间

[WebService(

Namespace = "http://localhost/WebServiceDemo/", //其实这个才是最重要的啦~,其它的都可以不要哦

Name= "Web Service Demo",

Description = "Web Service Demo"

)]

下面是Service1的代码:

public class Service1 : System.Web.Services.WebService

{

public Service1()

{

//CODEGEN: This call is required by the ASP.NET Web Services Designer

InitializeComponent()

}

#region Component Designer generated code

//Required by the Web Services Designer

private IContainer components = null

/// <summary>

/// Required method for Designer support - do not modify

/// the contents of this method with the code editor.

/// </summary>

private void InitializeComponent()

{

}

/// <summary>

/// Clean up any resources being used.

/// </summary>

protected override void Dispose( bool disposing )

{

if(disposing &&components != null)

{

components.Dispose()

}

base.Dispose(disposing)

}

#endregion

// 连接字符串常量

const string szConn = "server=(local)\\taoyiuid=sapwd="

+ "initial catalog=mydatadata source=taoyi"

[WebMethod]

public String About()

{

return "这是一个C#编写的Web Service演示程序!"

}

// 返回其中一个WebServiceDemo表

[WebMethod]

public DataSet GetServiceDemoTable()

{

DataSet sqlDs = new DataSet()

DataAccess dataAcc = new DataAccess(szConn)

string szSql = "Select * From WebServiceDemo"

sqlDs = dataAcc.GetDataset(szSql,"Demo")

return sqlDs

}

// 返回由用户指定的查询

[WebMethod]

public DataSet GetByUser(string szCommandText)

{

DataSet sqlDs = new DataSet()

DataAccess dataAcc = new DataAccess(szConn)

sqlDs = dataAcc.GetDataset(szCommandText)

return sqlDs

}

}

是不是很简单哦,就只这么点,呵呵~,不过也可以说明问题的了。这个类中声明了三个WEB方法,有没有发觉呢?每个方法的前面都加了[WebMethod],表示该方法为WEB方法。呵呵,如果你想要你写的函数可以让WEB应用程序调用的话,这个可不能少的啦~,不然WEB应用程序就无法调用的。

到此一个WEB服务就完成了,点击运行看看,如果没什么错的话,就会出现如下的WEB页面服务描述:

Service1

The following operations are supported. For a formal definition, please review the Service Description.

* GetByUser

* GetServiceDemoTable

* About

.....(下面还有很多)

其中代星号的就是先前在函数前加了[WebMethod]的函数。在出现在页面中你可以单击相应的函数,然后就会跳到调用页面,你可以在相应的文本框中(如果函数有参数的话)输入相应的参数,点而调用按钮,那么就可以看到函数返回的结果了(前提是函数调用无错的话),不过全是XML格式的文本。比如我的GetServiceDemoTable函数调用的结果如下:

<?xml version="1.0" encoding="utf-8" ?>

- <DataSet xmlns="http://tempuri.org/">

- <xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">

- <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:Locale="zh-CN">

- <xs:complexType>

- <xs:choice maxOccurs="unbounded">

- <xs:element name="Demo">

- <xs:complexType>

- <xs:sequence>

<xs:element name="ID" type="xs:int" minOccurs="0" />

<xs:element name="szUser" type="xs:string" minOccurs="0" />

<xs:element name="szSex" type="xs:string" minOccurs="0" />

<xs:element name="szAddr" type="xs:string" minOccurs="0" />

</xs:sequence>

</xs:complexType>

</xs:element>

</xs:choice>

</xs:complexType>

</xs:element>

</xs:schema>

- <diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">

- <NewDataSet xmlns="">

- <Demo diffgr:id="Demo1" msdata:rowOrder="0">

<ID>1</ID>

<szUser>taoyi</szUser>

<szSex>男</szSex>

<szAddr>四川泸州</szAddr>

</Demo>

- <Demo diffgr:id="Demo2" msdata:rowOrder="1">

<ID>2</ID>

<szUser>xiner</szUser>

<szSex>女</szSex>

<szAddr>四川宜宾</szAddr>

</Demo>

</NewDataSet>

</diffgr:diffgram>

</DataSet>

到此为至,Web Service程序就已经算是完成了。

下面要做的是写一个WEB应用程序来测试我写的这个Web Service了,看看能不能达到想要的结果。建立Web应用程序的步骤如下:

一、新建一个ASP.Net Web Application工程,与创建Web Service的第一步一样,只是工程类型不一样罢了。我这里工程名为WebServiceDemoTest,完整的为http://localhost/WebServiceDemoTest,系统就在相应的目录(c:\Inetpub\wwwroot\WebserviceDemoTest)下生成了所需文件。

二、在设计视图下打开WebForm1.aspx文件,在里面放置一个panel容器,为了达到测试的目的,我们需要三个服务端按钮和一个服务端文本框,分别调用我们在Web Service中写的三个函数,另外,为了展示调用方法所得达的数据,还需要一个服务端标签控件和一个DataGrid控件。页面的布置就随便你了,想怎么放置就怎么放置,只要能达到演示的目的就行。

三、引用先前写的Web Service程序,菜单步骤如下project->add web reference...,然后输入我们Web Service的路径,这里是http://localhost/WebServiceDemo/Service1.asmx,点击添加就OK了。这时你将在类视图中看到localhost命名空间了。

四、编写测试代码。

为了便于后面少写些代码,如(xxxx.xxxx.xx xx = new xxxx.xxx.xx()这种),那么首先你得引用localhost命名空间的service1类,以后直接写xxxx xx = new xxxx()就可以了。

下面是几个按钮的代码:

// 测试GetServiceDemoTable()

private void Button2_Click(object sender, System.EventArgs e)

{

DataSet ds = new DataSet()

Service1 oService = new localhost.Service1()

// 返回记录集

ds = oService.GetServiceDemoTable()

if (ds != null)

{

// 显示记录集的记录

DataGrid1.DataSource = ds.Tables["Demo"]

DataGrid1.DataBind()

}

else

{

this.Response.Write("加载数据错误!")

}

}

// 测试GetByUser()

private void Button1_Click(object sender, System.EventArgs e)

{

DataSet ds = new DataSet()

Service1 oService = new localhost.Service1()

String szCommand = TextBox1.Text

ds = oService.GetByUser(szCommand)

if (ds != null)

{

DataGrid1.DataSource = ds

DataGrid1.DataBind()

}

else

Response.Write("错误!有可能是SQL命令有问题!")

}

// 测试About()

private void Button3_Click(object sender, System.EventArgs e)

{

Service1 oService = new localhost.Service1()

Label1.Text = oService.About()

}

OK,最后就是运行了,如果一切OK,点击第一个按钮得到的将是在一个包函用户执行的SQL命令的表结果。第二个按钮得到的就是上面运行Web Service时的GetServiceDemoTable得到的XML描述,即

ID szUser szSex szAddr

1 taoyi 男 四川泸州

2 xiner 女 四川宜宾

点击第三个按钮,则在Label1中显示"这是一个C#编写的Web Service演示程序!”的字符串。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/11208249.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-14
下一篇 2023-05-14

发表评论

登录后才能评论

评论列表(0条)

保存