Key Technologies Primer 读书笔记,翻译 --- Struct 学习 1

时间:2021-10-19 07:47:26

本来想写成读书笔记的,结果还是变成翻译,谨作记录,学习。
 
1.HTML -- 见我前面文章
2.Internet 了解 http 请求和响应的循环 --- 见我前面文章
3.java 
    Reflection 和 Introspection
    反射和内省
    内省(IntroSpector)是Java语言对JavaBean 类属性、事件的一种缺省处理方法。
例如类A中有属性name, 那我们可以通过getName,setName 来得到其值或者设置新的值。
通过getName/setName 来访问name属性,这就是默认的规则。
Java中提供了一套API 用来访问某个属性的getter/setter方法,通过这些API 可以使你不需要了解这个规则,这些API存放于包java.beans 中。
    一般的做法是通过类Introspector的getBeanInfo方法获取某个对象的BeanInfo 信息,然后通过BeanInfo来获取属性的描述器(PropertyDescriptor),通过这个属性描述器就可以获取某个属性对应的getter/setter方法,然后我们就可以通过反射机制来调用这些方法。
    反射是一个决定在一个对象中什么成员域和方法是可用的。而内省是一种特殊的反射,它被用在JavaBean Api中。
    Struct 使用内省来转换HTTP参数为javaBean 特性并且从javaBean中产生HTML字段。
    
Properties Files and ResourceBundles
java程序包括网络程序,常常需要配置Properties文件。
Java ResourceBundles 使用更多的Properties文件来提供国际化的信息。
ResourceBundles介绍:

JavaScript, AJAX, and SOAP

 
JavaScript AJAX 都是一些还不错的前端技术
SOAP可以平衡请求/响应循环。使用它,一个应用可以访问数据,处理业务逻辑。SOAP和AJAX应该有很好的结合。
SOAP:​https://en.wikipedia.org/wiki/SOAP 一个特殊的应用层协议。是工作在HTTP或者SMTP之上的协议,使用XML来表示信息。
 

Servlets, Filters, and Web Containers

 
因为java是面向对象的语言,java Servlet 用来将http转为面向对象的形式。这样让开发者可以专注于它们应用开发需要的事情。
一个java-aware http server 可以传递一个请求到一个servlet 容器,这个容器可以实现请求或者它可以将请求传回给HTTP服务器。容器通过查找他的servlet列表来决定是否可以处理请求。如果有servlet是为这个请求注册的,就传递这个请求到servlet。
容器需要管理servlet的生命周期,容器创造,调用,并且最终有servlet。
Filters 让你组装一系列的组件来 处理一个请求或者回应。过滤器集中在一个链上,这样每一个过滤器都有机会处理请求或者回应。
来 写下我目前的理解:servlet是在container的,container接收到请求后,通过注册列表来确定是否有对应的servlet可以处理,而servlet可以对请求进行处理。最后就是过滤器,过滤器可以在处理请求过程中对它们做一些处理,但是不太清楚和servlet 的差别。过滤器可以有多个,而servlet 只能有一个。感觉入侵性更小些。
Sessions
HTTP一个很重要的特点是无状态的。这样是没有机制来分辨HTTP是一个同一个用户的下一个请求。这样让想要构建一个应用可以和用户对话有多个请求有些困难。
为此,servlet API通过了一个编程的概念,叫做 session,表示一个对象实现了 javax.servlet.http.HttpSession 接口 
containter 会使用两个技术之一(cookies 或者 URL重写)来保证同一个用户的下一个请求将会包括session id 对这次会话来说,这样这个状态信息将会保存在session中和多个请求关联。状态信息将会保存在session 属性( session attributes,在JSP中叫做:session scope beans
为了防止当用户不能完成一次交互时无期限的占用资源,session配置了超时时间。如果两个请求时间间隔超过了超时时间,这个session就会被删除。
 
知道Session 数据常常保存在RAM内存是很重要的。取决于你的容器,你也许有不同的方式来避过它。
 

Web Applications

 
网页应用,就像一个HTTP服务器可以被用来作为不同的网页的主机,一个servlet容器也可以用来包含多个网站应用。Java Servlet 平台提供一个很好定义的机制用来组织并且部署网页应用。一个应用可以被组装称为一个 Web Application Archive, 或者 WAR file。单个war可以被上传,并且自动部署。
你需要知道你怎么产生一个war文件,并且如何部署。也许需要一些构建工具的知识,比如:Maven:http://maven.apache.org/ 以及一些你服务器容器的阅读文档。
 

Security

在应用程序部署描述符中可以配置的是 容器管理安全。声明安全可以用来保护请求的URI要满足一定的模式。实用安全可以根据当天的时间,调用的参数,或者这个应用的组件的状态用来微调安全作授权决定。它也可以被用来限制授权根据数据库中的信息。
有一些项目,比如Apache Shiro 或者 Spring Security 可以帮助你保护你的应用。
 

JavaServer Pages, JSP Tag Libraries, and JavaServer Faces

如果你需要编写一个标准的网页应用,你也许需要一个视图组件。一种就是JSP。http://www.oracle.com/technetwork/java/javaee/jsp/index.html
或者也可以是Velocity 或者 Freemarker,都是structs 支持的。
所有相同的是你要从编写HTML开始同时增加动态的特性使用JSP标签。不太推荐在JSP中使用java。JSTL和 Unified expression language 是推荐的。

http://www.oracle.com/technetwork/java/index-jsp-135995.html

这也就是说,你可以轻松的从你的视图来访问你的数据并且合适的展示它。如果你想要使用一个更加现代的方式,也许你会喜欢返回json,通常用来给AJAX作为展示页面。
提到了一些前端的技术,我也还是列出来吧,如果也许我会去看了:
 

Extensible Markup Language (XML)

可扩展标记语言
这个框架提供的特性常常依赖于很多的对象,那些对象又的时候是通过一个由xml编写的配置文件来部署的。XML同样也可以部署java 应用程序。
幸运的是 Struct2将对XML的需求降低到0,如果你需要使用到它,可以查看: Convention plugin.

Model View Controller (MVC)

基于JSP的网页应用有时会混合数据库代码,页面设计代码,流程控制代码。实践中,我们发现除非这些被分离,否则大型的应用会很难被维护。

使用MVC架构可以分离这些问题。Model代表业务或者数据库代码。View代表页面设计代码,Controller代表导航的代码。
MVC这个单词来源于 SmallTalk Model-View-Controller 框架。在SmallTalk MVC中,View根据Model来更新通过观察中模式。原始的MVC模式就像一个封闭的循环,View和Controller 交谈,Controller和Model交谈,Model和View 交谈。
 
但是模式和页面的直接联系对于网页应用并不实际,我们修改传统的MVC模式让他看起来少点像一个循环,而更像Controller是在中间的地位。
 
在MVC/Model2设计模式中,应用流是通过一个中心的控制器调解的。这个控制器委托请求到一个合适的handler中。这个handler和一个模式绑定,然后每一个handler扮演一个请求和model之间的适配器。Model代表或者扮演一个应用的商业逻辑或者状态。通常控制会通过Controller传回给合适的页面。流向可以通过咨询一系列的mapping通常是从数据库或者配置文件载入的来确定流向。这个提供一个视图和模型之间很宽松的连接,可以使应用便于维护和创造。
 
由于MVC是一个便利的范式,很多工作者发现这个也许还有大于三层。比如,在Model层中,常常有独立的业务逻辑层和数据访问层。
这个框架提供控制层给Model2 网页应用。开发者常常使用这一层和其他的标准的技术来构建业务,数据和永久层。
更多关于MVC的事情可以查看:

Business Logic Frameworks

商业逻辑框架

很多团队在POJOs(plain old JavaBeans )构建它们自己的商业逻辑层。所以商业层框架开始出现,包括:

 

Data Access Frameworks

数据访问框架
大多数时候,业务层和数据访问层分离,有的团队会开发它们自己的数据访问对象,但是很多的团队转向使用下面的数据访问框架。一些流行的数据访问框架如下:

 
 

Key Technologies Primer 读书笔记,翻译 --- Struct 学习 1的更多相关文章

  1. 【Deep Learning读书笔记】深度学习中的概率论

    本文首发自公众号:RAIS,期待你的关注. 前言 本系列文章为 <Deep Learning> 读书笔记,可以参看原书一起阅读,效果更佳. 概率论 机器学习中,往往需要大量处理不确定量,或 ...

  2. C&plus;&plus; Primer读书笔记

    以前阅读学习C++ Primer时的习题代码(当时代码风格格式比较渣): https://github.com/liyuan989/exercise/tree/master/c%2B%2B%20pri ...

  3. 函数(C&plus;&plus; Primer读书笔记)

    C++ Primer 第五版课后题 练习6.32 :下面的函数合法吗?如果合法,说明其功能:如果不合法,修改其中的错误并解释原因. #include <iostream> using na ...

  4. C&plus;&plus; Primer 读书笔记 第2章 变量和基本类型

    C++ Primer 第二章 变量和基本类型 2.1 基本内置类型 C++定义了一组表示整数.浮点数.单个字符和布尔值的算术类型(arithmetic type),此外还定义了Void类型. 算术类型 ...

  5. c&plus;&plus; primer读书笔记之c&plus;&plus;11(四)

    1  带有作用域的枚举 scoped-enumeration 相信大家都用过枚举量,都是不带有作用域的,在头文件中定义需要特别注意不要出现重名的情况.为了解决这种问题,c++11提供了带作用于的枚举. ...

  6. c&plus;&plus; primer读书笔记之c&plus;&plus;11(三)

    1 =default构造函数限定符 c++11针对构造函数提供了=default限定符,可以用于显式指定编译器自动生成特定的构造函数.析构或赋值运算函数.参考代码如下: class CtorDftTy ...

  7. c&plus;&plus; primer读书笔记之c&plus;&plus;11(二)

    1 新的STL模板类型,std::initializer_list<T> c++11添加了initializer_list模板类型,用于提供参数是同类型情况的可变长度的参数传递机制,头文件 ...

  8. c&plus;&plus; primer读书笔记之c&plus;&plus;11(一)

    1 新的关键词nullptr c++11引入新的关键词nullptr,用于表示空指针,用于替换之前c提供的NULL(最初NULL是定义在stdlib中的宏定义,通常是0). 2 新的别名定义机制 al ...

  9. c&plus;&plus; primer 读书笔记

    顺序容器:为程序提供控制元素存储和访问顺序的能力,这种顺序与元素加入到容器时的位置相对应,而与元素值无关. 另外还有根据关键字的值来存储元素的容器:有序.无序关联容器. 另外STL还有三种容器适配器, ...

随机推荐

  1. redis教程(整理中)

    一.redis简介 1.Redis:键值对类型的内存数据库:应用于高并发和实时请求的场景: 2.Redis常用数据类型: (1) string(基本数据类型)     (2)hash 注:hash中的 ...

  2. Java笔记:对象,方法,类

    1.数据类型(类) 对象名; 这里要求数据类型必须为复合数据类型,基本数据类型声明的结构只能称为变量,而不能称为对象. 对象的初始化 对象名= new 构造方法(参数); 2.方法: 访问控制符 [修 ...

  3. LINUX内核笔记&colon;自旋锁

    目录 自旋锁作用与基本使用方法? 在SMP和UP上的不同表现? 自旋锁与上下文 使用spin_lock()后为什么不能睡眠? 强调:锁什么? 参考   1.自旋锁作用与基本使用方法? 与其他锁一样,自 ...

  4. C&plus;&plus; 类的静态成员及静态成员函数

    对象与对象之间的成员变量是相互独立的.要想共用数据,则需要使用静态成员和静态方法. 只要在类中声明静态成员变量,即使不定义对象,也可以为静态成员变量分配空间,进而可以使用静态成员变量.(因为静态成员变 ...

  5. &period;NET&colon; C&num;&colon; 获取当前路径

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.X ...

  6. PL&sol;SQL在win7X 64下安装

    oracle11g怎么安装在此不作说明,网上到处都是,主要针对PL/SQL的安装配置 下载地址: PLSQL Developer: http://pan.baidu.com/s/1nt7G4cD X6 ...

  7. mybatis一对一关联表查询

    先创建一个表 CREATE TABLE teacher( t_id INT PRIMARY KEY AUTO_INCREMENT, t_name ) ); CREATE TABLE class( c_ ...

  8. Bzoj4566:&lbrack;HAOI2016&rsqb;找相同字符

    题面 Bzoj Sol 两个串拼在一起后求出后缀数组 然后显然的\(n^2\)暴力,就是直接枚举求\(LCP\) 又由于扫的时候是对\(height\)取\(min\) 那么可以用单调栈维护每一段的贡 ...

  9. Spring Cloud Gateway中异常处理

    最近我们的项目在考虑使用Gateway,考虑使用Spring Cloud Gateway,发现网关的异常处理和spring boot 单体应用异常处理还是有很大区别的.让我们来回顾一下异常. 关于异常 ...

  10. 第二章 JavaScript案例(中)

    1. js事件 HTML代码 <!DOCTYPE html> <html lang="en" onUnload="ud()"> < ...