rainit2006 / My_AWS-Cloud

0 stars 0 forks source link

JAVA #4

Open rainit2006 opened 7 years ago

rainit2006 commented 7 years ago

关注一下JAVA世界的动向

rainit2006 commented 7 years ago

■Java SE JavaSEとはJava Standard Editionの略です。 Java言語でプログラミングを行う際に最低限必要な機能をまとめたものです。 アプリケーションを開発する場合は後述するJDKをインストールしておく必要があります。

JavaSEは古いバージョン(5.0まで)ではJava 2 Platform Standard Edition(J2SE)と呼ばれていました。

■Java EE JavaEEとはJava Enterprise Editionの略で主にWebサイト(もしくはWebアプリケーション)を開発する際に用いられます。 JavaEEは簡単にいえば「JavaSE+拡張機能」といった構成になっています。 この拡張機能を使うことでJava言語でWebサイト(もしくはWebアプリケーション)を開発することができるようになります。

JavaEEは古いバージョン(5.0まで)ではJava 2 Platform Enterprise Edition(J2EE)と呼ばれていました。

■JRE JREとはJava Runtime Environmentの略称であり、Java言語で書かれたプログラムを動かすために必要なプログラムとなります。

■JDK JDKはJava SE Development Kitの略です。 JavaSEを使ってJava言語でプログラムを書く場合にはこのJDKが必須になります。

JavaのIDEといえば「NetBeans IDE」や「Eclipse」が有名だと思います。

■EJB (Enterprise JavaBeans) EJBというのはJava EEアプリケーションサーバ上で利用できるJavaのコンポーネントです。トランザクション制御などの煩雑な部分をEJBが自動的に面倒を見てくれるので、開発者はEJBの基本的なルールを抑えたあとはビジネスロジックの記述に集中することができる、というものです。

EJBに代わってより軽量なSpring FrameworkやPOJOといった考え方を用いる動きが活発化する。こうした流れを受け、2007年のJava EE 5で定義されたEJB 3.0では、DIやPOJOといった考え方を取り入れる形で仕様の全面的な見直しが行われる。EJBの各クラスは単なるPOJOとなり、J2SE 5.0で導入されたアノテーションによりEJBとしての宣言を行う形式とされた。設定ファイルも不要となり、エンティティBeanは独立した永続化フレームワークであるJava Persistence APIに置き換えられた。 その後も改良は続けられており、2009年のJava EE 6で定義されたEJB 3.1では、シングルトンセッションBeanの追加や、セッションBeanを中心とするコンポーネントのみを抽出したEJB Liteと呼ばれるサブセットの定義が行われており[2]、2013年のJava EE 7で定義されたEJB 3.2では、非同期処理のEJB Liteへの導入や不要となったエンティティBeanが仕様から取り除かれるなどしている.

EJBは、大きく以下の三つの種類のBeansに分けられる。 1,セッションBean (Session Bean) セッションを保持し、一時的なロジックを保存するオブジェクト。以下のような種類がある。 ①ステートフルセッションBean (Stateful Session Bean) : クライアントごとの状態 (State) を保持するセッションBean。 ②ステートレスセッションBean (Stateless Session Bean) : クライアントごとの状態を保持しないセッションBean。 ③シングルトンセッションBean (Singleton Session Bean) : 常に同じインスタンスへのアクセスが保証されているシングルトンなセッションBean。 2,メッセージ駆動型Bean (Message Driven Bean) 非同期処理の記述など。 3,エンティティBean (Entity Bean) 永続的なデータを保存するオブジェクト。EJB 3.2で廃止。

EJB和Spring的比较: 简单地说,一个是官方的,一个是民间开源的。双方这些年里都有了很多进化。

■JAR 文件包 JAR 文件就是 Java Archive File,顾名思意,它的应用是与 Java 息息相关的,是 Java 的一种文档格式。JAR 文件非常类似 ZIP 文件——准确的说,它就是 ZIP 文件,所以叫它文件包。JAR 文件与 ZIP 文件唯一的区别就是在 JAR 文件的内容中,包含了一个 META-INF/MANIFEST.MF 文件,这个文件是在生成 JAR 文件的时候自动创建的。

jar 文件指定了一个特定目录来存放标签信息:META-INF 目录,其中我们来关注该目录中的MANIFEST.MF文件,他就是JAR的manifest文件,他包含了JAR文件的内容描述,并在运行时向JVM提供应用程序的信息,大多数JAR文件含有一个默认生成的manifest 文件,执行JAR命令或使用zip工具,都可以产生它 如果是由jar命令产生的 manifest 文件,形如:

Manifest-Version: 1.0
Created-By:1.4.0-beta
(Sun Microsystems Inc.) 

这些信息没甚么用,仅仅告诉我们使用的是1.0的manifest文件,第一行定义manifest的格式,第二行说明使用 SUN 的JDK1.4的jar工具生成该文件,如果manifest文件是由其他 (如ant) 创建的,那将会出现 “Created-By: Ant 1.2” 之类的内容,如果你是自己创建manifest文件,你可以加入自己的一些相关信息.

rainit2006 commented 7 years ago

Web application MPA A multi-pages application (MPA), also known as multi-pages interface (MPI), is a web application or web site that fits on a multiple web pages. MPA (Multi-page Application) 多页面应用指的就是最传统的 HTML 网页设计,早期的网站都是这样的设计,所之称为「网页设计」。使用 MPA 在使用者浏览 Web 时会依据点击需求切换页面,浏览器会不停的重载页面 (Reload),M$ IE 就会一直发出卡卡卡的声音,整个操作也常感觉卡卡。如果使用这样的设计在 Web App 中,使用者体验比较差,整体流畅度扣分。但进入门槛低,简单套个 jQuery Mobile 就可以完成。

SPA • A single-page application (SPA), also known as single-page interface (SPI), is a web application or web site that fits on a single web page. SPA (Single-page Application) 顾名思义在 Web 设计上使用单一页面,利用 JavaScript 操作 Dom 的技术实现各种应用,现今在介面上算是非常受欢迎的设计,搭配 AJAX 使得整体介面反应速度相当迅速,并且能够实现各种丰富的使用者介面。典型的 gmail 就是最好的例子。缺点是学习门槛高,而 JavaScript 又有跨浏览器的问题,此外在不 Reload 页面的状况下,记忆体控制也变得更复杂与重要,也是我们为什麼要介绍 UI Framework 来开发的原因。

Authorization and Authentication In the Java Web World there are 3 common ways to do Authorization and Authentication:

  1. JAAS (Java Authorization and Authentication Service)
  2. Spring Security (formerly known as ACEGI) @PreAuthorize : @PreAuthorize("hasRole('supervisor')") または
    <bean id="bankService" class="BankService" scope="prototype">
    <security:intercept-methods>
        <security:intercept-method method="sendMoney" access="supervisor" />
    </security:intercept-methods>
    </bean>
  3. DIY (Do It Yourself)
rainit2006 commented 6 years ago

rainit2006 commented 6 years ago

eclipse + maven 导入项目 Import工程时报错:workspace下已存在同名文件 解决办法: 只能物理删除workspace下文件再重新import。或者更改工程目录名程

报错:The container 'Maven Dependencies' references non existing library 1。To resolve this in Eclipse press ALT + F5 and select "Force update" and it should download the JAR file. Because it surely is in Maven Central repository: http://javalibs.com/artifact/org.apache.httpcomponents/httpclient 这么做确实能减少很多error数量。但是这个问题本身没有被解决。

■eclipse使用的一些技巧 image

rainit2006 commented 6 years ago

Sevlet サーブレットを作成する上で必要となるクラスが含まれているパッケージについて簡単に見ていきます。大きくわけて2つのパッケージが用意されており、「javax.servlet」パッケージと「javax.servlet.http」パッケージとなります。

サーブレットやJSPなどサーバー側でのアプリケーションを開発するため、サーブレットコンテナの1つであるTomacatを利用していきます。

「HttpServlet」クラス: 基础类

ServletInputStream 读取数据流

ServletInputStream inputStream = request.getInputStream();
inputStream.read(............)

Sevlet 和 JSP サーバ側で動作するJavaアプリケーションを作成するにはサーブレットやJSPを使います。サーブレットとJSPは基本的に同じことを行いますが、サーブレットはJavaプログラムと同様に作成するのに対し、JSPはPHPのようにスクリプト言語のような記述します。そこで画面表示部分の作成にはJSPが適しており、データベースとの接続などバックエンドで動く部分はサーブレットで作成するのが適しています。

rainit2006 commented 6 years ago

JAXB JAXB, stands for Java Architecture for XML Binding, using JAXB annotation to convert Java object to / from XML file.

Marshalling – Convert a Java object into a XML file. Unmarshalling – Convert XML content into a Java Object.

import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

Jaxb annotation初步使用 http://www.cnblogs.com/fragranting/archive/2012/03/25/xml--jaxb.html

Jaxb处理java对象和xml之间转换常用的annotation有:

http://www.jianshu.com/p/d5c398941c64 如果JAXB将一个类绑定到了XML,那么默认地,所有的public成员将会被绑定。比如,公共的getter和setter方法对,或者公共的field。任何protected,package-visible或者private的成员都会被绑定,如果它被添加了一个合适的注解,比如@XmlElement或者@XmlAttribute。你有若干的可能性来影响它的默认行为。 你可以将一个package或者一个顶层的class用@XmlAccessorType来注解,然后设置它的value元素的值为枚举常量中的其中一个(FIELD, PROPERTY, PUBLIC_MEMBER, NONE)。如果FIELD被设置,那么每一个非static和非transient的field将会被自动地绑定。设置为PROPERTY可以告诉JAXB去为getter和setter方法对做数据绑定。NONE的设置会禁止绑定,除了对那些已经被明确注解的field或property。一个没有使用这个注解的类将会从它的父类或者package设置中继承。

rainit2006 commented 6 years ago

jsp と サーブレット で値の受け渡し http://satoukibi.hatenablog.com/entry/2017/02/27/jsp_%E3%81%A8_%E3%82%B5%E3%83%BC%E3%83%96%E3%83%AC%E3%83%83%E3%83%88_%E3%81%A7%E5%80%A4%E3%81%AE%E5%8F%97%E3%81%91%E6%B8%A1%E3%81%97%E3%82%92%E3%81%99%E3%82%8B%E3%80%82

JSP:
<form method="GET" action="<%=request.getContextPath() %>/hoge">
 id  : <input type="text" name="id" >
 name: <input type="text" name="name" >
 <input type="submit" value="送信" />
</form>

Servlet: 
String id = req.getParameter("id");
String name = req.getParameter("name");

リクエスト情報をリクエストオブジェクトから直接取得、参照(上記例ならreq変数)してきたかと思いますが、SpringMVCでは直接リクエストやレスポンスを操作するようなことはしません。 SpringMVCではFORMで送信される情報専用のFORMオブジェクトを用意し、それを利用してやり取りをします。

rainit2006 commented 6 years ago

Preferences API アプリケーションを開発していると、ちょっとしたデータを設定したいことが結構ありませんか。例えば、フレームの位置と大きさとか、ゲームのハイスコアなどです。このようなデータをプリファレンスと呼びます。 クラスは java.util.prefs.Preferences。

書き込みには put メソッドを使用します。引数はキーと値の 2 つの文字列になります。ちょうど java.util.Map インタフェースと同じような使い方ですが、キーも値も文字列に限定されています。

プリファレンスの読み込みには get メソッドを使用します 。Map インタフェースの get メソッドと異なり引数は 2 つです。第 1 引数はキーなので Map インタフェースと同じですが、第 2 引数はプリファレンスが存在しなかった場合のデフォルト値を指定するためにあります。

プリファレンスの格納場所 プリファレンスの読みこみ/書きこみを行うことができましたが、実際のデータはどこにあるのでしょう。それがわからないと心配でしょうがないかたもいらっしゃるのではないでしょうか。 プリファレンスはプラットフォームによって管理の方法が異なります。たとえば、UNIX ではファイル、Windows ではレジストリでプリファレンスデータを保持しています。


ClassPathXmlApplicationContext ApplicationContextのコンストラクタは、普通はXMLファイルの在処を示すString(の配列)を引数としてもらう。 指定したパスにprefixが指定されない場合は、ApplicationContextのクラスごとにどのResourceの実装クラスを使うかがきまる。 例えば ApplicationContext ctx = new ClassPathXmlApplicationContext("conf/appContext.xml"); の場合はClassPathResource となる。

ClassPathXmlApplicationContextには、使いやすいようにいくつものコンストラクタが定義されている。同一のパスにある複数のXMLを指定するための便利な方法として、まぁ以下を見れ。

com/
  foo/
    services.xml
    daos.xml
    MessengerService.class

とある場合に、

ApplicationContext ctx = new ClassPathXmlApplicationContext(
    new String[] {"services.xml", "daos.xml"}, MessengerService.class);

とするわけだ。こうするとMessengerServiceが格納されているパッケージ直下にある指定したXMLを全てロードすることができる。