※当サイトの記事には、広告・プロモーションが含まれます。

Eclipse NEONにてJavaでWeb開発用プロジェクト(Hello World!)

前回、Tomcat 9 を導入したので、Webプロジェクトを試していきたいと思います。

ただ、Eclipse経由のTomcatを起動するとNot Foundになるという...。

f:id:ts0818:20170625081258j:plain

ブラウザでhttp://localhost:8080 にアクセスの結果。

f:id:ts0818:20170625081257j:plain

⇩  下記サイトによると問題ないらしいと仰ってましたが 

Eclipse - Tomcat起動はするが、localhost:8080で404エラー(eclipse内)(11096)|teratail

 

JavaでWebプロジェクト

「ファイル」>「新規(N)」>「その他(O)...」を選択します。

f:id:ts0818:20170624235907j:plain

「Web」>「動的 Web プロジェクト」を選択します。

f:id:ts0818:20170624235908j:plain

「プロジェクト名(M):」を適当につけて「次へ(N)>」を選択します。

f:id:ts0818:20170624235909j:plain

デフォルトの状態で「次へ(N)>」を選択します。

f:id:ts0818:20170624235910j:plain

デフォルトの状態で「完了(F)」を選択します。「web.xml デプロイメント記述子の生成(G)」にチェック付けないとマズイみたいです。(画像では付いてないけど)

f:id:ts0818:20170624235911j:plain

Webプロジェクトフォルダが生成されました。

f:id:ts0818:20170624235912j:plain

 

Java EEの標準ディレクト

そもそも、Java SEとJava EEは別のJDKをインストールしないといけないのかな、と考えていたのですが、サーブレットJSPが使えるようになれば、それはJava EEということになるんですかね?

JavaをSEとEEに分類するのは今では無意味になってきている? - 達人プログラマーを目指して

JavaSE JavaEE そして、EJBの違いを、わかりやすく説明してもらえま... - Yahoo!知恵袋

で、EclipseTomcatサーバーを使えるようにした後、Webプロジェクト(動的)を作成すると、servlet-api-jarというファイルが使えるようになっているみたいです。

f:id:ts0818:20170625081253j:plain

Java Servlet with Eclipse Neon and Tomcat 9 | Pega Exchange

 

よく分からないですが、Webプロジェクト(動的)を作成した際は、Java EEということで進みたいと思います。

Tomcatの開発で迷ったら振り返りたい、Java EEの標準ディレクトリ構成 - Code Log

ネットでは、「ウィンドウ」>「パースペクティブ(R) 」>「パースペクティブを開く(O)」>「その他(O)...」から、

f:id:ts0818:20170625081259j:plain

Java EE」を選択しろ的なことを言っている人もいて、「パースペクティブ」が何なのか分からない初心者としては混乱しますね。

f:id:ts0818:20170625081300j:plain

とりあえず、今回は「パースペクティブ」を変更して「Java EE」に切り替えて進めてますが。

 

Web上でHello World

いまいちフォルダ構成が分かりませんが、Hello Worldを表示させたいと思います。

Java で作る Webアプリケーション 開発 入門 - galife を参考に作成します。

f:id:ts0818:20170625081301j:plain

今回は、 

  • HelloWorldController.java 
  • HelloWorldModel.java
  • HelloWorld.jsp

の3ファイルを作成します。見本のサイトのように「ファイル」>「新規」でそれぞれのファイルを作成していきます。

 

package hello.controllers;

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;

/**
 * Servlet implementation class HelloWorldController
 */
@WebServlet("/HelloWorld")
public class HelloWorldController extends HttpServlet {
	private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public HelloWorldController() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// Modelの生成
		HelloWorldModel model = new HelloWorldModel();
		model.setMessage("Hello World!");

		// viewへModelデータを渡す準備
		request.setAttribute("model", model);

		this.getServletContext()
		    .getRequestDispatcher("/View/HelloWorldView.jsp")
		    .forward(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

package hello.controllers;

public class HelloWorldModel {
  private String message = "";

  public void setMessage(String value){
  	this.message = value;
  }

  public String getMessage() {
  	return this.message;
  }

}
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>HelloWorld</title>
</head>
<body>
  <p>${model.message} </p>
</body>
</html>

jspファイルは、Viewフォルダを作成し、そこに移動しました。

Hello World を表示するだけでも、なかなか複雑ですね。 

2021年3月31日(水)追記:↓ ここから

何か「Servlet 3.0」以降であれば、

www.atmarkit.co.jp

⇧「Servletクラス」に「アノテーション」を付与していれば、「web.xml」とか無くても大丈夫らしいですね。

2021年3月31日(水)追記:↑ ここまで