JSP/サーブレットとJavaのFWについて

はじめに

基礎からのサーブレット/JSPを購入したので学んだ内容をまとめていきます。

Eclipseでプロジェクトを作成していくわけではなく、非常に基礎的な内容。
といいつつ、所感としてはJavaなのでなかなかボリューミーな内容。
業務で使うレベルに持っていくにはもう一歩踏み込まないといけない。

環境構築

書籍に付属しているダウンロードファイルをCドライブ直下に移動。

バッチファイルを開くと自動で環境構築が完了する。便利!!

※ローカルの環境変数を書き換えずに専用のターミナルが起動してくれる。
※付属のJDKだけ別途インストールが必要。

$ java -version
java version "1.8.0_121"
Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
Java HotSpot(TM) Client VM (build 25.121-b13, mixed mode)

$ javac -version
javac 1.8.0_121

Tomcatの起動

バッチファイルで開いたターミナル上でtomcatで起動。

失敗する場合はごみが残っている可能性があるので以下で削除。

$ netstat -aon | find "8080"
  TCP         0.0.0.0:8080           0.0.0.0:0              LISTENING       5584
  TCP         127.0.0.1:8080         127.0.0.1:62727        ESTABLISHED     5584
  TCP         127.0.0.1:62727        127.0.0.1:8080         ESTABLISHED     3528
  TCP         127.0.0.1:62728        127.0.0.1:8080         TIME_WAIT       0
  TCP         127.0.0.1:62729        127.0.0.1:8080         TIME_WAIT       0
$ taskkill /f /pid 5584ja

http://localhost:8080/にアクセスして起動を確認。

アプリケーションの作成は基本以下のディレクトリで行う。

C:\work\tomcat\webapps

基礎知識

・コンテキスト:実行しているプログラムの内部状態のこと。

・サーブレット:Javaプログラムの一種でソースファイル(.java)とクラスファイル(.class)が必要。ソースファイルをコンパイルしてクラスファイルを作成

→javax.servlet.http.HttpServletクラスのサブクラスとして定義する。doGet(doPost)メソッドをオーバーライドして実行したい処理を記述する。

→URLを設定するにはWebServletアノテーション(サーブレットのクラス定義の直前)を使う方法とweb.xml(設定ファイル)を使う方法がある。

・MIMEタイプ:text/plainやtext/htmlのような記法

・web.xml:サーブレットの設定などに用いる

→「metadata-complete=”true”」でWebServletアノテーションなどが無効になり、web.xmlの設定のみ適用される。併用の場合注意!!

・パッケージ:パッケージは、内部に含まれるクラスに付けられるグループ名(名前空間名) 参考

・JSP:HTMLの中にJavaのコードを埋め込んだもの。.jspを.javaに変換し、コンパイルして.classにしている。

→JSPファイルはURLをブラウザで開けばサーバーが自動で変換・コンパイルを行うのがメリット。また、HTMLと違い外部テンプレート(.html)の読み込みが可能。

基本的な記述

<%@ディレクトリ名 属性名=”値” %>
<%-- コメント(コンパイル後残らない) --%>
<% javaプログラム %> // スクリプトレット
<%! 変数やメソッドを定義するjavaコード(宣言) %>
<%= 描画する変数など %>

<%@include file="U../header.html" %> //共通部分を読み込める
<%@page import="java.util.Date" %> // pageディレクティブのimport属性を使ってJavaのクラスをインポートすることも可能〇

<%!
int add(int a, int b) {
  return a + b;
}
%>

動かしてみる

以下のパスでテキストファイルを作成

C:\work\tomcat\webapps\book\chapter3\hello.txt
=====
Hello!

http://localhost:8080/book/chapter3/hello.txtにアクセスして確認。

🙄ディレクトリ構成がそのまんまURLになってますね!(※Tomcatの設定。)

C:\work\tomcat\webapps\book\chapter3\index.html

編集

<!DOCTYPE HTML>
<head>
  <meta charset="UTF-8">
  <title>Apache Tomcat Examples</title>
</head>
<body>
  <p>
  <h3>Apache Tomcat Examples</H3>
  <ul>
    <li><a href="servlets">Servlets examples</a></li>
    <li><a href="jsp">JSP Examples</a></li>
    <li><a href="websocket/index.xhtml">WebSocket Examples</a></li>
  </ul>
</body>
</html>

http://localhost:8080/book/chapter3/を確認

🙄index.htmlにするとディレクトリにアクセスすれば表示されますね◎

/c/work/tomcat/webapps/book/web-inf/src/Hello.javaの作成

※WEB-INF以下はブラウザからURLでアクセスすることができないディレクトリ。

package chapter3;

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.annotation.WebServlet;

@WebServlet(urlPatterns={"/chapter3/hello"})

public class Hello extends HttpServlet {
  public void doGet (
    HttpServletRequest request, HttpServletResponse response
  ) throws ServletException, IOException {
    PrintWriter out=response.getWriter();
    out.println("Hello!");
    out.println(new java.util.Date());
  }
}

/c/work/tomcat/webapps/book/web-inf/srcで以下コマンド(※batchファイルから開いたターミナルで実施すること!)

javac -encoding utf-8 -d ../classes -sourcepath . chapter3/Hello.java
// compile chapter3/Hello.java // compile.batというファイルが配布されているので←のコマンドでもコンパイル可能。

これによりHello.classファイルが作成される。

http://localhost:8080/book/chapter3/helloへアクセス。

自動リロード

C:\work\tomcat\webapps\book\META-INF\context.xmlの作成

<Context reloadable="true" />

→ソースファイル(.java)を編集してコンパイルするとTomcatが自動リロードされるので、ブラウザを更新すると内容が更新される(※既に存在するファイルのみ)

ページの共通化

Page.javaを作成。パッケージで名前空間に登録。

package tool;
pablic class Page {~~}

Hello.javaから読み込み。

import tool.Page

各種FWについての備忘録

※9/5追記※

JavaのFWについても気になったので調べました。

全体感

【超初心者向け】Struts2超入門 – 2018年版

👆業務で使っているFW。自身でプロジェクト作成する場合は参考になる。

Javaフレームワークのまとめ【2020年版】

👆紹介されているのは、Spring、JavaEE(JSF)、Struts、Playなど。

市場シェアを見ると、JSF>Spring>Play>Strutsになっている。
脆弱性も見つかっているしStruts2は需要ほぼなさそう。。。

【JavaEE】今からでも間にあうJSF入門

👆JavaServer Facesの略MVCモデルをベースに作られたJavaEE純正のフレームワークであるJSF。

生産性重視でRuby on Rails?学習コスト重視でPHP?または、保守重視でJava?

単純なWebアプリケーションであれば、Javaを使うまでもなくRuby on Railsがいいのでしょうかね。どうしてもJavaを使いたいのだというならば、僕が以前ブログの記事で書いた Playframework  を使いましょう。Ruby on Railsの恩恵を受けて設計されているので、生産性は高いです。

JavaはJavaでもここで言ってるのはJavaEEのことです。JavaEEの歴史については、本題から外れるので割愛させてもらいますが、JavaEEの前身であるJ2EEをベースに作られたフレームワークは数多く存在します。「Spring Framework」、「Seasar2」、「Struts」など、一昔では流行っていたものは、J2EEベースに作られています。

Seasar2やStrutsなどはURLを元にアクションが決まり、そのアクション内で表示する画面が決まります。これをアクションベースフレームワークと呼びます。一方、今回説明するJSFは、まず表示する画面が決まり、それに対応する画面処理クラス(バッキングビーン)が決まります。これを一般的にコンポーネントベースフレームワークと呼びます。

各FW(書籍含めまとめ)

✅JavaEE(JSF)

わかりやすいJavaEEウェブシステム入門

👆評判よさそう。JavaEEの純正FWがJSF。

JavaServer Faces2.2(Kindle無料)

Playのドキュメントなどを読むとWebアプリ開発の生産性の低さがディスられている。。。笑

✅Spring

Spring徹底入門 Spring FrameworkによるJavaアプリケーション開発

👆会社の先輩も持っていた。かなり分厚い。Amazonの人気ランキング上位。

Spring解体新書(Kindle無料)

👆無料だけどなかなかボリューミー◎

Springは機能が膨大。BootはWebアプリ用。SecurityやDB操作はSpringの別FWを用いないといけない。

✅Play

JavaにおけるRailsタイプのフレームワーク

JSP/サーブレット(Tomcat)を否定。Javaを使わずにScalaで開発することも可能。

Play Framework入門

JavaのフレームワークはJavaEEサーバーを用意し、コンパイル→ビルド→デプロイという作業を経ないといけない。

また、JSP/サーブレットの学習コストが地味にかかる。

→PlayはJavaサーバーとコンパイルが不要。JSP/サーブレットを使わない。動的リロード機能をサポート。

Scalaに関して

PlayでScalaをサポートしていると目にしたので調べました。

ScalaはJavaプラットフォームで動作する。JavaでできることがすべてできるJavaの後継言語。

とりあえず Better Java として Scala を使ってほしい

👆圧倒的に記述量が減っているのがわかる。

人気のプログラミング言語!Scalaとは【初心者向け】

FWにPlay2、Kotlinと比較されるらしい。

Kotlinに関して

Scalaの影響もうけており、Javaのシンタックスシュガーも数多く搭載。

Flutterに関して

Android開発はFlutterでやる方がいい説

Android開発でもFlutter推しの方が書いた記事。

KotlinとJavaができる人向けDart速習

おわりに

随時追加していきます。

とりあえず今まで全く概要がつかめていなかったJSP/サーブレットに関して掴めたので良かった。

サーブレットが土台にあって、JSPが成り立っている!

コメントを残す