[Java] 38. Javaでウェブサービスプロジェクト(JSP Servlet)を作成する方法


Study / Java    作成日付 : 2019/10/01 21:48:08   修正日付 : 2021/05/31 17:34:57

こんにちは。明月です。


この投稿はJavaでウェブサービスプロジェクト(JSP Servlet)を作成する方法に関する説明です。


ウェブというプログラムはServer(Web Server)とClient(Browser)の間に決めっている標準規約でソケット通信することということです。

簡単に説明すると、Client(Browser)でURLアドレス含めているパスとParam String(ホストアドレスの?の後で設定されている値)と基本的なhttpヘッダー情報を作成してServerに要請すれば当該な値を計算して規約とおりに返事して接続を切る規約をウェブサービスといいます。


それで我々はウェブサービスサーバを構築するためにはブラウザから要請される値を解析してその値に合わせて返事ヘッダーとデータ値を作成しなければならないです。

それをコンソール環境で作成することでは大変難しいことになります。

Javaには特定な要請を自動にパーシングして我々が簡単に宣言されている変数などを通ってデータを簡単に取得するし、応答ヘッダーやデータ値を作成する時にも簡単なルールを通りにリターンすることで簡単にウェブサービスを作成することができます。

それをJava Server Page(JSP)といいます。


参考に、我々がウェブサービスを作成する時にストラッツやスプリングなどの話をよく聞きます。ストラッツやスプリングなどはウェブプログラミングのフレームワークのライブラリです。それがウェブプラットフォームではありません。

フレームワークというのは我々がプログラムを作成する時によく使う関数やライブラリ、そして複雑なアルゴリズムを簡単に作成するように手伝ってくれる集約されたライブラリということに思えばよいです。つまり、基本的にJSPプロジェクト上でこのJSPをもっとしやすく扱うためのライブラリです。


それで始めにJavaでウェブサービスを作成することならフレームワークを習う前にJava Servletに関して理解する必要があります。


link - https://ja.wikipedia.org/wiki/Java_Servlet


先にサーブレットプロジェクトを作成する前にはIDEツールにトムキャットを設定する必要があります。以前の投稿でトムキャットを設定する方法に関して作成したことがあります。

link - [Java] 37.イクリプス(eclipse)でトムキャット(tomcat)を設定する方法


トムキャット(Web application server)を設定したらウェブサービスプロジェクトを作成しましょう。


IDEツール(イクリプス:eclipse)のNew Project -> Otherを選択しましょう。

その中でWeb -> Dynamic Web Projectを選択してNextボタンを押下しましょう。

参考にStatic Web ProjectとDynamic Web Projectの差異はStaticの場合はサーブレット環境ではなく、ただサーバにウェブページを要請するとディレクトリにあるウェブページ(html)を転送するサーバです。つまり、要請によってhtmlを修正したり値を入れて応答するプロジェクトではありません。

つまり、要請によってhtmlページのデータを変換するためにはDynamic Web Projectを作成しなければならないです。

そしてプロジェクト名とトムキャット設定とmodule versionが合っているかを確認してFinishボタンを押下しましょう。

※参考にイクリプス(Eclipse)のプラグインをエンタプライズバージョンでインストールしないとウェブサーブレットを作成することで問題ありません。基本イクリプスは上のイメージみたいに作動しません。

つまり、Web Servletプラグインを別途にインストールしなければならないです。面倒なのでエンタプライズバージョンでインストールしましょう。

link - [Java] 1. Javaとは?、Javaインストール、Eclipseインストール

プロジェクトを生成したらまずweb.xmlをを確認しましょう。web.xmlとはサーブレットで使う環境変数ファイルみたいことです。各Web Serverの環境と構築仕様が違うので別途の設定が必要です。

web.xmlがプロジェクトで見えない場合は下記通りの方法で生成すればよいです。

なぜかいつからこのweb.xmlが自動に生成しません。

web.xmlが生成されたら基本的な内容を確認しましょう。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                             http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
  <!-- プロジェクト名 -->
  <display-name>HelloworldTest</display-name>
  <!-- rootの場合読み込むページリスト -->
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

welcome-file-listタグがあります。このタグはウェブサービスがrootを呼び出す時に、つまりhttp://ホストアドレス/の場合にindex.jspファイルを読み込むことだと設定することです。

私の場合はindex.jspを設定しました。


そうしたらindex.jspファイルを作成してウェブブラウザにhello worldを表示しましょう。

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
  </head>
  <body>
    Hello world
  </body>
</html>

その後にサーバを起動しましょう。

※Window -> Browser設定

イクリプス(eclipse)には基本ブラウザにも確認できますが、基本ブラウザなら少しおかしく見えるため、よく使うChromeブラウザを利用して結果を確認するほうが良いです。


一応、ウェブサービスは起動しました。でも、我々が作成したいことはStaticプロジェクトみたいにただウェブページを応答することではなく、サーブレットページです。

つまり、ブラウザが要請する値によりプログラム処理をして結果をリターンすることです。


まず、起動したウェブサーバを落ちます。

そしてプロジェクトからサーブレットを追加しましょう。

私はTestというサーブレットを作りました。

そうすると下記通りのイメージみたいにサーブレットが生成されます。

// パッケージ設定
package test;

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

// ページ要請ホスト
@WebServlet("/Test")
// ホスト名とクラス名は必ず同じに作成する必要ない。でも、クラス管理をしやすくするために合わせる方が良い。
public class Test extends HttpServlet {
  // シリアルキー、HttpServletクラスは基本的にSerializableを継承している。
  private static final long serialVersionUID = 1L;
  // コンストラクタ
  public Test() {
    super();
  }
  // ブラウザにmethodがget方式に呼び出す時に実行される関数
  // パラメータrequestはブラウザから要請した値があるデータ
  // パラメータresponseはブラウザに応答する値を格納するデータ
  protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    // response.getWriter()関数でデータ領域のStreamを受け取る。
    // 基本的な応答パラメータにServed atのデータを格納して要請urlを格納する。
    response.getWriter().append("Served at: ").append(request.getContextPath());
    // 改行を格納する。
    response.getWriter().append("<br />");
    // Hello world文字を格納する。
    response.getWriter().append("Hello world");
  }
  // ブラウザにmethodがpost方式に呼び出す時に実行される関数
  // パラメータrequestはブラウザから要請した値があるデータ
  // パラメータresponseはブラウザに応答する値を格納するデータ
  protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    // doGet関数を呼び出す。
    // つまり、get方式の要請とpost方式の要請の結果は同じ。
    doGet(request, response);
  }
}

作成したらまたサーバを起動しましょう。

私はホストを/Testに指定した場合、Servletを要請することに作成したのでウェブブラウザパスにTestを入力して接続しましょう。

結果をみれば改行タグがそのままに表示されました。ソースビューで確認しましょう。

改行がそのままに表示されたことは正常なHTMLタグではないからです。

つまり、htmlドキュメントではなくtextドキュメントでブラウザが認識しました。

正常なhtmlタグはDocumentタグが必要だしhtmlタグから始まってbodyタグなかでデータを入れなければならないです。


ここまでJavaでウェブサービスプロジェクト(JSP Servlet)を作成する方法に関する説明でした。


ご不明なところや間違いところがあればコメントしてください。

Study / Java」の他投稿
最新投稿