关于 Servlet 和 Web

by admin on 2018年10月21日

“QQ登录”使用户能使用QQ账号一键登录接入网站,大大降低了挂号、登录的良方。借助大之QQ用户群,给第三方网站带重新多新用户。已登录用户还得用当第三正在网站发表、分享的音讯就经常一并到QQ空间,使网站内容通过好友关系得到更的不胫而走。

   文中也只是对Servlet和Web作简单的询问,有只起来的认,深入之情节有待于越失去研究。
T. T _ . _

腾讯社区开放平台.NET
SDK是基于腾讯社区开放平台的OAuth登录文档和API文档
使用C#支出之.NET
4.0之一个仓房,目前整体兑现了腾讯社区开放平台的所有接口。可以加速而的社区对接到腾讯社区开放平台,免去大量底重的调试开发之时光,所以自己是为New
BSD协议创建的开源项目,各位有一样要求的诸位同事参与建设方一个类,项目之托管地址是http://qqconnect.codeplex.com/。

Servlet

    Servlet(Server Applet),全称Java
Servlet,是为此Java编写的服务器端程序。狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是靠其他实现了这Servlet接口的好像,一个Servlet
就是 Java 编程语言中的一个近似。
   
Servlet是同等种植独立为操作系统平台跟网传输协议的服务器端Java应用程序,运行于支撑Java的应用服务器中,是Java
Web技术的核心基础。Servlet与传统Java应用程序的极端深不同在于,它不是自从命执行启动之,而是由Java虚拟机的web服务器进行加载。
功能
扩展基于HTTP协议的Web服务器的法力,交互式地浏览以及改动数据,生成动态Web页面内容。

生命周期:Servlet加载 – ->
实例化 – -> 服务 – -> 销毁

  • [1]
    init():服务器装入Servlet时实行该方法,负责初始化Servlet对象。可以配备服务器,以在开行服务器或客户机首不良造访Servlet时装入Servlet。无论有多少客户机访问Servlet,都不见面重执行init()。
  • [2]
    service():Servlet的核心,负责响应客户之乞求。每当一个客户机请求一个HttpServlet对象,该对象的Service()方法将调用,并坐一个“请求”(ServletRequest)对象同一个“响应”(ServletResponse)对象作为参数。在HttpServlet中已经存在Service()方法,默认的服务效益是调用与HTTP请求的法门相应的do功能。
  • [3]
    destroy():当Servlet对象退出生命周期,服务器端停止且卸载Servlet时实施该方法,负责释放占用的资源。一个Servlet在运作service()方法时或许会见时有发生其他的线程,因此于调用destroy()方法时,要保这些线程已经告一段落或就。

   :在Servlet的生命周期中,仅执行同样次等init()和destroy()方法。

办事原理

  • [1]
    首先简单解释一下Servlet接收和应客户要的长河:客户发送一个央,Servlet调用service()方法对要进行响应。通过源代码看出,service()方法吃针对要的艺术开展了相当,选择调用doGet,
    doPost等方式,然后还入对应的方法吃调用逻辑层的方法,实现对客户的响应。在Servlet接口及GenericServlet中尚无doGet(),doPost()这些办法,HttpServlet中定义了这些办法,但是都回到error信息,所以每次定义一个Servlet时,都得实现doGet()或doPost()这些艺术。
  • [2]
    每一个自定义的Servlet都要贯彻Servlet接口,Servlet接口中定义了五独艺术,其中较根本的老三个方式涉及到Servlet生命周期,分别是init(),
    service(),
    destroy()方法。GenericServlet是一个通用的,不特定于任何协议的Servlet,
    实现了Servlet接口。HttpServlet继承给GenericServlet,因此HttpServlet也促成了Servlet接口。所以定义Servlet时仅需要后续HttpServlet即可。
  • [3]
    Servlet接口及GenericServlet不特定于其他协议,HttpServlet是特定于HTTP协议的类似,所以HttpServlet中贯彻了service()方法,并拿呼吁ServletRequest、响应ServletResponse
    强转为HttpRequest 和 HttpResponse。

腾讯社区开放平台.NET
SDK使得你调用腾讯社区开放平台的REST接口非常容易,你就待到http://connect.opensns.qq.com/apply
申请到必须的consumer key和consumer
secret,在您的提请经过了腾讯社区开放平台的查处后就是好抱。这个好的要害特点如下:

Servlet容器

一言九鼎任务:管理Servlet的生命周期。

    Servlet 与 Servlet 容器相互依存
,彼此又互为独立发展,接口是接连Servlet和Servlet容器的要,从技术角度来说是为解耦,通过标准接口来相互协作。

创建Servlet对象

  • [1]
    Servlet容器启动时:读取web.xml配置文件中之音,构造指定的Servlet对象,创建ServletConfig对象,并拿ServletConfig对象作为参数来调用Servlet对象的init()方法。
  • [2]
    Servlet容器启动后:客户首软为Servlet发出请求,Servlet容器会判定内存中是否在指定的Servlet对象,如果没有则开创它,然后根据客户的要创建HttpRequest、HttpResponse对象,从而调用Servlet对象的service()方法。

    在 Web 应用程序中,一个 Servlet
在一个整日或者让多单用户以做客。这时 Web
容器将为每个用户创建一个线程来推行 Servlet。如果 Servlet
不干共享资源的问题,不必关心多线程问题。但如果 Servlet
需要共享资源,需要确保 Servlet 是线程安全的。

参考:
http://www.cnblogs.com/xuekyo/archive/2013/02/24/2924072.html
http://www.ibm.com/developerworks/cn/java/j-lo-servlet/

  • 包装好了腾讯社区开放平台的OAuth协议看腾讯社区开放平台的REST接口
  • 跟腾讯社区开放平台的接口保持同步(目前只有一个接口,将来得会持续增加)

与 Applet 比较


以此库房使用Visual Studio 2010以及C#
3.0构建的,主要扩展和应用到下面的开源库:

Web

Web容器:管理以及部署Web应用,更多的凡同基于HTTP的求打交道。
分为应用服务器:可以安排EJB应用,可以实现容器管理的工作,更多之以及数据库、其它服务打交道。

 

  1. DotnetOpenauth:DotNetOpenAuth
    是一个 C# 开发包,用以实现 OpenID 2.0 的提供者、中继方(Relying
    Party)、OAuth使用者和OAuth服务提供者;同时支持 InfoCard Selector
    。OAuth协议客户端的贯彻上参照了这路之代码。
  2. Jayrock:Jayrock是一个LGPL的开源之软件,实现了JSON和JSON-RPC,支持微软ASP.NET框架。具体可参见文章:Jayrock:
    JSON and JSON-RPC for
    .NET

方我们由大层次了解了是SDK的贯彻原理,下面我们介绍如何用是SDK来跟腾讯社区开放平台进行相互。SDK主要出零星只待关怀之类QzoneSDK.Context.QzoneContext

和 QzoneSDK.Qzone。

第一我们做【QQ登录】OAuth登录文档来证明。Qzone
OAuth总体处理流程里共有七只步骤,从下面的完好流程图中得看来:

哲学原理 1

左边:为老三正值网站要举行的事体。在每个绿色的方框里,标明了第三正应该调用的接口,接口主要力量及逻辑见Qzone
OAuth接口说明。

右:为Qzone接收到第三正在使用发过来的乞求后召开的事体。第三在呼吁的发送地址和应涵盖的参数在连片下去的单步详解中开展了认证

经过类QzoneSDK.Context.QzoneContext带齐你申请的oauth_consumer_key
(对应Qzone的appid)和oauth_consumer_secret
(对应Qzone的appkey)到腾讯社区开放平台获取到Request
Token,然后将tokenKey和tokensecret保存至Session里,后续要运用。示例代码如下:

string key = ConfigurationManager.AppSettings[“ConsumerKey”];

string secret = ConfigurationManager.AppSettings[“ConsumerSecret”];

var context = new QzoneSDK.Context.QzoneContext(key, secret);

//Get a Request Token

var callbackUrl = ConfigurationManager.AppSettings[“callbackUrl”];
//”/qzone/account/QQCallback.aspx”;

var requestToken = context.GetRequestToken(callbackUrl);

//request token, request token secret 需要保存起来

//在demo演示着,直接保存在全局变量中.真实情况需要网站自己处理

Session[“requesttokenkey”] = requestToken.TokenKey;

Session[“requesttokensecret”] = requestToken.TokenSecret;

var authenticationUrl = context.GetAuthorizationUrl(requestToken,
callbackUrl);

Response.Redirect(authenticationUrl);

用户以腾讯社区开放平台上授权使用后会见导向到您的网站,也尽管是上图的老三步,在门户上述的callback
的页面及就得落上图第四步的参数,利用上述获得的参数调用QzoneSDK.Qzone进行第五步调用,就可以得到AccessToken,这个AccessToken,目前access_token(及其secret)是长期有效的,和某一个openid对应,目前可支持线下取该openid的音。

if (Request.QueryString[“oauth_vericode”] != null)

{

var requestTokenKey = Session[“requesttokenkey”].ToString();

var requestTokenSecret = Session[“requesttokensecret”].ToString();

var verifier = Request.QueryString[“oauth_vericode”];

string key = ConfigurationManager.AppSettings[“ConsumerKey”];

string secret = ConfigurationManager.AppSettings[“ConsumerSecret”];

QzoneSDK.Qzone qzone = new QzoneSDK.Qzone(key, secret, requestTokenKey,
requestTokenSecret, verifier);

//这里需要拿qzone.OAuthTokenKey, qzone.OAuthTokenSecret, qzone.OpenID
存储起来用于末端的API的访问

QzoneSDK.Qzone qzone2 = new QzoneSDK.Qzone(key, secret,
qzone.OAuthTokenKey, qzone.OAuthTokenSecret, string.Empty, true,
qzone.OpenID);

Session[“qzonesdk”] = qzone2;

qzone2 = Session[“qzonesdk”] as QzoneSDK.Qzone;

var currentUser = qzone2.GetCurrentUser();

var user = (BasicProfile)JsonConvert.Import(typeof(BasicProfile),
currentUser);

if (null != user)

{

this.Nickname.Text = user.Nickname;

this.Figureurl.Text = user.Figureurl;

}

}

上述代码还以身作则调用腾讯开放社区目前唯一的一个API (
get_user_info),通过Jayrock库将Json数据易为仓库中定义之用户登录数的实体BasicProfile。

类型之下载地址:http://qqconnect.codeplex.com/releases/view/65042 

项目文档:腾讯社区开放平台教程.pdf哲学原理

Demo: http://www.dotnetting.cn/qzone/Account/Login.aspx

QQ群:80767552

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图