Java进击C#——应用开发之Asp.net
本章简言 |
上一章中笔者讲到关于Linq和EF的用法。并以hibernate来进行讲解。那么本章笔者来讲一下C#的Asp.Net。即是在B/S模式下开发。现在企业大部分的业务都是面向B/S模式的。所以对于Asp.Net的了解变得必不可少的知识点。笔者在从事JAVA开发的时候,很少看到有关于Awt和Swing开发的企业。更多是Servlet和JSP开发。这也是没有办法的事情。因为用Awt和Swing来开发软件不是说不能。只是怕吃力不讨好。笔者不是说JAVA不好。有一些方面JAVA的确存在不适合的情况。那么Asp.Net大家可以理解为JAVA的Web开发。关于HTML和CSS,JS俩都是一样子。这个不用当心。好了。进入本章的内部吧。
Web 窗体 |
我们都知道J2EE在开发的过程中一定离不开Tomcat,JBoss等服务器。笔者比较善长用Tomcat,主要是因为他轻量。那么Asp.NET呢?他是的服务器又是什么呢?如果只是开发的话。读者们不要当心visual studio里面有一个自带IIS。没有错。Asp.NET的服务器就叫IIS。现在就让我们新建一个Asp.NET项目吧。
关于新建项目现在大家都知道了。这里要知道一点那就是不要忘了选择Web下面的Visual Studio 2012。当然选择Web也是可以的。只是选项没有那么多。笔者这里只有俩个。好了,笔者想要新建一个空的Asp.NET来看看。
好简单。一个空的Asp.NET就建好了。现在我们新一个WebForm来看看。选择项目右击》添加》Web 窗体。
点击Web 窗体。填写项名称:Index
最后成的结果
看上面最后的图片,我们知道Web 窗体事实上就是一个aspx文件。关于aspx文件是什么。可以理解为JAVA的JSP。就是组装网页的地方。好了。让我们写一个简单的显示列子吧。双击Index.aspx。我们可以看到内容。关于内容下面会讲到。先在内容里面增加一句显示的代码文本吧。如下
Index.aspx内容:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Index.aspx.cs" Inherits="WebExample.Index" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
i am aomi
</div>
</form>
</body>
</html>
显示结果:
看到了吧。根本不用装什么服务器。这样子很方便。现在ecilpse内部好像也装有Tomcat了。不过,最好装一下自己本地的Tomcat。个人觉得ecilpse的Tomcat不好用。
完成了上面的例子之后, 让我们在看一下Web 窗体的内容吧。Web 窗体的顶部有这么一段代码。如下
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Index.aspx.cs" Inherits="WebExample.Index" %>
1.Language:表明当前所用的语言是什么。
2.AutoEventWireup:表示是否自动邦定页面的事件。true表示自动。否则是false。
3.CodeBehind:表示当前页面对的后端代码。
4.Inherits:表示当前 Web 窗体所继承的代码隐藏类。
关于上面的几个关键字的定义网络上一片。如果还是不明白笔者写的话。可以自行去查看。笔者认为关键字CodeBehind正是体现与JSP不同的最好证明了。为什么呢?JSP没有什么叫后端的代码之类的说法。这也是跟Asp.NET最大的区别之一。如果我们接着往下看的话。会出现下面的一段代码。
<head runat="server">
关键的点不是head而。head后面的runat="server"关键字。runat="server"就是用于表示这个HTML标签是服务器控件的意思。那么什么是服务器控件呢?笔者理解比较简单就是通过服务器做分析生成对应的HTML。好比如JAVA的Tag标签。他比普通的HTML标签有一个直观的差别是。后端代码能不能访问的到。只有加了runat="server"之后,后端代码就可以访到这个控件对应的属性了。如上面的Form标签。当然记得增加属性ID的值。
到了这里上面图片可能会看不懂。没事。不如让笔者做一个提交显示的例子来说明后端代码是什么一会事呢?。
一、编程界面底部。选择“设计”。从工具箱中拉出一个Textbox和一个button、一个Label。是不是跟WinForm开发有一点像呢?这是当然了。只是控件的用法和环境不一样子而以。另外要注意的是一定要拉到对应的form标签里面。不然会出问题。
选择“设计”:
拉控件:
二、双击Button。写Button的后端代码就可以了。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls; namespace WebExample
{
public partial class Index : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{ } protected void Button1_Click(object sender, EventArgs e)
{
this.Label1.Text = "Hello " + this.TextBox1.Text;
}
}
}
上面的代码还用笔者多说吗?看到红色的代码就知道。输出网页上TextBox的输入的值。同时加上"Hello "。
三。执行输出打印。
好简单啊。这是笔者第一次觉得开发这么的轻松。后端代码相信大家也明白了。跟WinForm开发对应的后端代码有一点像。事实上对于Asp.NET来讲有俩种编码模式。上面是隐藏代码模式。另外还一种叫内联编码模式。
对于内联的话笔者去试了一下。却发现跟书里面讲的很多东西找不到了。本来在新建Web窗体的时候会有一个位置让我们去选择的。我的VS里面却找不到。不过没事。笔者也把代码列出来了。
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Index.aspx.cs" Inherits="WebExample.Index" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
<script type="text/javascript" runat="server">
protected void Button2_Click(object sender, EventArgs e)
{
this.Label1.Text = "button2 ";
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div> <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" /> <asp:Button ID="Button2" runat="server" OnClick="Button2_Click" Text="Button" /> </div>
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
</form>
</body>
</html>
在原来的代码里面笔者增加了俩个部分。如下
<script type="text/javascript" runat="server">
protected void Button2_Click(object sender, EventArgs e)
{
this.Label1.Text = "button2 ";
}
</script>
<asp:Button ID="Button2" runat="server" OnClick="Button2_Click" Text="Button" />
我们可以看到button2的事件代码。不在后端而是在网页上面。这个时候runat="server"就更加的重要了。你可以理解为上面的脚本就是后端的代码。也就是服务器代码。
读者们是不是觉得看不到JSP的影子。这个很正常。JSP最大的点在于代码段。即是<%%>。其实学习Asp.Net最快最合适的不是学过JAVA的人。而是学过Asp的人。因为Asp.Net里面留下很多相类似的Asp语法。好了。笔者新建一个Web 窗体并设为启动页来说明吧。
Default.aspx的内容:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebExample.Default" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<%
for (int i = 0; i < 10; i++)
{
%>
<%=i %>
<%
}
%>
</div>
</form>
</body>
</html>
是不是很像呢。只是不好意思。普常Asp.NET开发不会用到上面的代码段。主要角色还是服务器控件。所以想要用Asp.NET的朋友。可能你要去了解一个Asp.NET控件了。即是学习工具箱。笔者这边就不说他了。
上面的代码我不清楚读者们有什么的想法。当笔者第一次看到时候,并没有多大的想法。就是觉得很不错。可是当笔者进一步去思考的时候。笔者发现了一点——感觉是JSP+Servlet。后来笔者自己也看一些资料。Asp.NET的操作是引入事情驱动编程。所以我们能看到上面按扭绑定的点击事情。这一点上跟JAVA有着很大的差别。我们都知道哪怕是JSP+Servlet。一般情况下都是一个JSP一个Form标签对应就一个Servlet。什么意思呢?JSP用于HTML的界面设计,而Servlet用于处理业务代码。所以一般情况下都是JSP里面只有一个Form标签。如果有多个什么办?更多用一个参数来表示动作。比如http://xxxxx?action=add。可是Asp.NET引入了事情驱动编程就变得我们可以不用像JAVA那样子操作了。只要绑定好对应的事件就可以了。好比如上面绑定了点击事件。当网页的button被点击的时候,会回发并触发对应的事件。这跟WinForm的操作很像。至于回发是什么,笔者现在只能简单的讲他就是在一次提交后端的意思。我们常常用Page.IsPostBack来判断是不是回发。用于第一次的时候想做一些业务。简而言之,就是Web 窗体的界面设计相当于JSP,而后端代码就相当于Servlet。
protected void Page_Load(object sender, EventArgs e)
{
if (Page.IsPostBack)
{
this.Label1.Text = "不是第一次<br>";
}
else
{
this.Label1.Text = "第一次 <br>";
} }
既然Asp.NET是基于HTTP的事件驱动编辑,那么作为一名开发人员就有必要去了解一下Asp.NET的生命周期。即是了解他事件触发顺序。这样子我们可以在对应的事件中控制页面和业务。
PreInit事件:这个是生命周期的入口。这个时候页面的控件已经被实例化了。但是可以对母页或主题进行设置。(关于母页和主题笔者不打算讲。请自行进行查看)
Init事件:此时母页和主题设置结束了。一般处理程序的ProcessRequest方法会被执行。(一般处理程序下面会讲到)并以递归的方式触发所有子控件的OnInit事件。
InitComplete事件:这个事件里面做了跟视图状态有关系的事情。视图状态就是上一次储存的控件信息。比如文本框输入提交之后,对应的值还会在文体框里面。可是HTTP是无状态的。那么为什么会这样子。就是因为Asp.NET储存了上一次的视图状态。如下。
PreLoad事件:官方说这个时候没有做任何事情。只是用于说明要进入下一个阶段。
Load事件:这个事情很重要。这个时候所有的控件的视图状态和数据都准备完了。所以访问控件是最安全的。双击页面就可以进入。
LoadComplete事件:用于页面表示加载结束了。
PreRender事件:呈现输出对应的HTML之前发生的事情。开发人员可以在这个事情中做一些文章。当然值得注意的是页面的PreRender事件首先被触发,然后才是子控件。
PreRenderComplete事件:反用于表示PreRender事件结束了。
UnLoad事件:呈现结束之后,就是处理对应的对象。所以子控件先处理掉,然后在处理页面。
上面是笔者简单的说明一下有关Asp.NET的事件发生顺序。其实读者们可以在看完笔者之后在去找一些专门对Asp.NET的博文进行学习。
Asp.NET在界面设计的过程中会用到俩个类控件。分别为HTML控件(原生HTML)和Web控件(上面讲的服务器控件)。这个时候相信大家有心都会有一个问题——有没有像WinForm的自定义控件。当然有了。至于做法大多相似。选择对应的项目右击》添加》新建项。然后选择如下。对于Web窗体用户控件的内容笔者不多了。主要是了解一下关于Asp.NET方便JAVA程序员们知道有这东西存在。
一般处理程序 |
上面我们了解到了关于Web 窗体的内容。知道了后端代码跟Servlet有一点类似。实际Asp.NET里面还有一个应用跟AVA的Servlet很像——一般处理程序。什么是一般处理程序。看定义没用什么。不如让我们新一个一般处理程序来了解他吧。选择项目右击》添加》一般处理程序。
一般处理程序点击:
新建成功之后:
从图上我们可以看到他的结尾不在是aspx了。而是ashx了。双击Handler.ashx我们就可以看到对应的代码。如下
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web; namespace WebExample
{
/// <summary>
/// Handler 的摘要说明
/// </summary>
public class Handler : IHttpHandler
{ public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
context.Response.Write("Hello World");
} public bool IsReusable
{
get
{
return false;
}
}
}
}
执行结果:
相信看到这里。不用笔者多说大家也会明白。除了不能可视化设计界面。一般业务都实现。跟Servlet功能很类似吧。代码上面的ProcessRequest方法就是用于处理请求的。跟JAVA的doPost和doGet很类似。
本章结总 |
本章主要讲到关于Asp.NET的内容。但是关于Asp.NET的知识点实在太大了。不是笔者这一系列的目地。所以笔者只是简单的介绍关Asp.NET的几个跟JAVA有一点相似的。而且必要掌据的知识。
Java进击C#——应用开发之Asp.net的更多相关文章
- Java进击C#——应用开发之Asp.net MVC
本章简言 上一章笔者讲到关于Asp.NET的知识点.了解Asp.NET基本的知识点之后,我们在来学习关于C#的MVC框架就简单多了.显然本章就是来介绍一下关于Asp.NET MVC.对于MVC的思想笔 ...
- Java进击C#——应用开发之Linq和EF
本章简言 上一章笔者对于WinForm开发过程用到的几个知识点做了讲解.笔者们可以以此为开端进行学习.而本章我们来讲一个跟ORM思想有关的知识点.在讲之前让我们想一下关于JAVA的hibernate知 ...
- Java进击C#——应用开发之WinForm开发
本章简言 上一章笔者介绍了关于WinForm环境.这一章笔者将继续讲WinForm.只不过更加的面向开发了.事实就是在学习工具箱里面的控件.对于WinForm开发来讲,企业对他的要求并没有那么高.但是 ...
- Java进击C#——应用开发之WinForm环境
本章简言 上一章笔者讲到关于IO文件操作类,了解如何处理文件流.从这一章开始笔者将讲解相对比较高级的知识点.而本章笔者就对WinForm开发的知识点进行讲解和引导.现在很多业务都是面向于B/S模式的开 ...
- 应用开发之Asp.net
本章简言 上一章中笔者讲到关于Linq和EF的用法.并以hibernate来进行讲解.那么本章笔者来讲一下C#的Asp.Net.即是在B/S模式下开发.现在企业大部分的业务都是面向B/S模式的.所以对 ...
- Java微信公众平台开发之OAuth2.0网页授权
根据官方文档点击查看在微信公众号请求用户网页授权之前,开发者需要先到公众平台官网中的"开发 - 接口权限 - 网页服务 - 网页帐号 - 网页授权获取用户基本信息"的配置选项中,修 ...
- Android混合开发之WebViewJavascriptBridge实现JS与java安全交互
前言: 为了加快开发效率,目前公司一些功能使用H5开发,这里难免会用到Js与Java函数互相调用的问题,这个Android是提供了原生支持的,不过存在安全隐患,今天我们来学习一种安全方式来满足Js与j ...
- Android开发之Java集合类性能分析
对于Android开发者来说深入了解Java的集合类很有必要主要是从Collection和Map接口衍生出来的,目前主要提供了List.Set和 Map这三大类的集合,今天Android吧(ard8. ...
- Asp.net Mvc模块化开发之“开启模块开发、调试的简单愉快之旅”
整个世界林林种种,把所有的事情都划分为对立的两个面. 每个人都渴望的财富划分为富有和贫穷,身高被划分为高和矮,身材被划分为胖和瘦,等等. 我们总是感叹,有钱人的生活我不懂;有钱人又何尝能懂我们每天起早 ...
随机推荐
- Objective-C中block的底层原理
先出2个考题: 1. 上面打印的是几,captureNum2 出去作用域后是否被销毁?为什么? 同样类型的题目: 问:打印的数字为多少? 有人会回答:mutArray是captureObject方法的 ...
- Bootstrap 模态框(Modal)插件
页面效果: html+js: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...
- javascript匹配各种括号书写是否正确
今天在codewars上做了一道题,如下 看上去就是验证三种括号各种嵌套是否正确书写,本来一头雾水,一种括号很容易判断, 但是三种怎么判断! 本人只是个前端菜鸟,,不会什么高深的正则之类的. 于是,在 ...
- Lambda
Lambda Lambda 表达式是一种可用于创建委托或表达式目录树类型的匿名函数. 通过使用 lambda 表达式,可作为参数传递或作为函数调用值返回的本地函数. Lambda 表达式对于编写 LI ...
- Golang 编写的图片压缩程序,质量、尺寸压缩,批量、单张压缩
目录: 前序 效果图 简介 全部代码 前序: 接触 golang 不久,一直是边学边做,边总结,深深感到这门语言的魅力,等下要跟大家分享是最近项目 服务端 用到的图片压缩程序,我单独分离了出来,做成了 ...
- Java开发中的23种设计模式详解
[放弃了原文访问者模式的Demo,自己写了一个新使用场景的Demo,加上了自己的理解] [源码地址:https://github.com/leon66666/DesignPattern] 一.设计模式 ...
- H3 BPM社区:流程开发者的学习交流平台
企业上市有上市流程,融资扩充有融资流程,项目招投标有招投标流程,部门领导选拔有晋升流程,员工请假休假有请假流程,早起上班梳洗有符合自己习惯的流程--生活处处是流程,流程无处不在.但从信息化建设来说,企 ...
- Supermap iCloudManager -负载均衡
Supermap icm负载均衡理解: 应用场景:地图出图 子节点1和子节点2中的服务保持一致,一般情况下设置的是匿名用户通过nginx访问服务信息,所以不需要登录. 1.通过nginx分发请求,(轮 ...
- linux系统oracle-ora12505问题解决方案一
说明:(1)Linux版本 Linux version 2.6.32.12-0.7-default (geeko@buildhost) (gcc version 4.3.4 [gcc-4_3-bran ...
- VisualStudio 2015 开启IIS Express可以调试X64项目
现在项目开发时总有时需要在X64下开发,这样我们就需要IIS Express中调试.不要总是放在IIS中,在Attach这样好慢. 如果不设置直接调试X64的程序,我们有可能会受到以下类似的错误 ...