本来想写成读书笔记的,结果还是变成翻译,谨作记录,学习。
 
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++ Primer读书笔记

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

  3. 函数(C++ Primer读书笔记)

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

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

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

  5. c++ primer读书笔记之c++11(四)

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

  6. c++ primer读书笔记之c++11(三)

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

  7. c++ primer读书笔记之c++11(二)

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

  8. c++ primer读书笔记之c++11(一)

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

  9. c++ primer 读书笔记

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

随机推荐

  1. 【手机端判断】PC_to_M自写

    var current_url = window.location.href; var replace_url = [ ['笔试简章','http://beijing.ysedu.com/zt/bjt ...

  2. php 微信自定义分享接口

    <?php class JSSDK { private $appId; private $appSecret; public function __construct($appId, $appS ...

  3. python实现随机森林、逻辑回归和朴素贝叶斯的新闻文本分类

    实现本文的文本数据可以在THUCTC下载也可以自己手动爬虫生成, 本文主要参考:https://blog.csdn.net/hao5335156/article/details/82716923 nb ...

  4. MyBatis updateByExample和updateByExampleSelective的区别

    大家都用过mybatis generator来生产数据库的xml文件,但是关于updateByExample和updateByExampleSelective的区别我之前一直分不太清楚. 如果分不清楚 ...

  5. 从 Basic Paxos 到 Multi Paxos 到 Raft

    在朴素Paxos算法中, 各个节点经过 Prepare 和 Accept 阶段, 会达成一个值, 这个值一旦达成, 就不能被修改, 如下例子: 图示1 上面的操作几乎没有任何实用价值, 于是演变成下面 ...

  6. Python二维数组,坑苦了

    myList = [[0] * 3] * 4 但是当操作myList[0][1] = 1时,发现整个第二列都被赋值,变成 [[0,1,0], [0,1,0], [0,1,0], [0,1,0]] my ...

  7. window环境下修改postgrep密码

    本机window7 64位系统,安装的PostgreSQL 9.3 默认安装是没有设置密码的,使用pgAdmin III登陆需要登陆密码. 我们使用默认安装的工具 SQL Shell 来操作. 我们依 ...

  8. 通过TABULATE过程制作汇总报表

    通过TABULATE过程制作汇总报表 制作基本汇总报表 TABULATE过程的基本语法如下: PROC TABULATE DATA=数据集 <选项>; CLASS 变量1 <变量2变 ...

  9. 高级查询query

    详细看 https://www.kancloud.cn/ldkt/tp5_db/229042

  10. (29)Why Earth may someday look like Mars

    https://www.ted.com/talks/anjali_tripathi_why_earth_may_someday_look_like_mars/transcript00:12So whe ...