Help us understand the problem. What is going on with this article?

Java EE + EclipseでJSP, Servlet, JSFサンプル

More than 3 years have passed since last update.

背景

最近いろんなツール、フレームワーク、それにいろんなバージョンが多くて、なかなか簡単なウェブアプリサンプル作るのにも悩む。
そこで、基本に戻って、まずはEclipse + Tomcat(WebLogicへのデプロイはおまけ)でJSP, Servlet, JSFのサンプル(Responsiveじゃなくても、ダサくてもとりあえず良しとする!)を作成してみる。
* 今後随時メンテしていきます~

検証環境

  • OS / JDK
    • OS : Windows 2012 R2
    • JDK : Java 8
    • Eclipse : Neon
  • Application Server / DB
    • Apache Tomcat 8.0.39 (Windows zip版)
    • GlassFish Server 4.1.1 - Java EE 7 Full Platform (Windows zip版)
    • WebLogic 12c R2 (12.2.1)

参考文献

Java EE Development with Eclipse - Second Edition
Java EE 7 Technologies

Java EEのおさらい

  • Presentation Layer
    • Java Servlet
    • Java Server Pages (JSP)
    • Java Server Faces (JSF)
  • Business Layer
    • Enterprise Java Beans (EJB)
      • Session beans
      • Message driven beans
  • Enterprise Integration Layer
    • JDBC
    • JPA
    • JCA
    • Web Services
      • SOAP
      • REST

Eclipse設定の注意点(日本語設定など)

  • eclipse.iniの最後にこの行を追加
-Dfile.encoding=UTF-8

注)案外、下記のサンプルって日本語使い出すといろいろはまることがあるので、とりあえず英語のみで動作検証する。

Eclipse + Tomcat + Servlet

  • Java EE Perspectiveを選択
  • File -> New -> Dynamic Web Projectを選択。
  • Dynamic Web ProjectのWizardで必要項目を入力。ここの例では、「Project name : Servlet-Sample01」とする。
    • Target runtime : Apache Tomcat v8.0
  • LoginServlet classをProject FolderのJava Resources/src直下に作成
LoginServlet.java
package com.sahn.sample.servlet;

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 LoginServlet
 */
@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public LoginServlet() {
        super();
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html");
        response.getWriter().write(createForm(null));
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String userName = request.getParameter("userName");
        String password = request.getParameter("password");

        StringBuilder responseStr = new StringBuilder();
        if ("admin".equals(userName) && "admin".equals(password)) {
            responseStr.append("<h2>Welcom admin!</h2>")
                .append("You logged in successfully.");
        } else {
            //invalid user credentials
            responseStr.append(createForm("Wrong userName / password."));
        }

        response.setContentType("text/html");
        response.getWriter().write(responseStr.toString());
    }

    protected String createForm(String errMsg) {
        StringBuilder sb = new StringBuilder("<h2>Login</h2>");
        //check if error message to be displayed
        if (errMsg != null) {
            sb.append("<span style='color: red;'>")
                .append(errMsg)
                .append("</span>");
        }
        //create form
        sb.append("<form method='post'>\n")
            .append("User Name: <input type='text' name='userName'><br>\n")
            .append("Password: <input type='password' name='password'><br>\n")
            .append("<button type='submit' name='submit'>Submit</button>\n")
            .append("<button type='reset'>Reset</button>\n")
            .append("</form>");

        return sb.toString();
    }

}

WebLogicへデプロイ

せっかくなので出来上がったアプリをwarへexportしてWebLogicへDeployしてみる。
* WebLogic 12c R2のインストール・設定はこちらを参照。
Oracle WebLogic Serverインストール (v 12.2.1.x)

  • EclipseからExportでwarファイル作成
  • WebLogicを立ち上げ以下の画面からDeploy
    image

  • 右側のDeployments -> Install

  • 次の画面でwarを選択
    image

  • 後はデフォルトで進むのみ。

  • デプロイが完了したら、http://localhost:7001/Servlet-Sample01/LoginServlet でアクセス

  • 問題なく正常に動作! ← いくらなんでも、このぐらいの互換性は保障しないと!^^

Eclipse + Tomcat + JSP

  • Java EE Perspectiveを選択
  • File -> New -> Dynamic Web Projectを選択。
  • Dynamic Web ProjectのWizardで必要項目を入力。ここの例では、「Project name : JSP-Sample01」とする。
    • Target runtime : Apache Tomcat v8.0
  • index.jspをProject FolderのWebContent直下に作成
  • Project Folderを右クリック -> Run As -> Run on Serverを選択し実行
  • http://localhost:8080/JSP-Sample01/ でアクセス

上記index.jspはこちら。

index.jsp
<%@ 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>Login</title>
</head>
<%
  String errMsg = null;
  //first check whether the form was submitted
  if ("POST".equalsIgnoreCase(request.getMethod()) && request.getParameter("submit") != null)
  {
    //form was submitted
    String userName = request.getParameter("userName");
    String password = request.getParameter("password");
    if ("admin".equalsIgnoreCase(userName) && "admin".equalsIgnoreCase(password))
    {
      //valid user
      out.println("Welcome. admin !");
      return;
    }
    else
    {
      //invalid user. Set error message
      errMsg = "Wrong userName / password.";
    }
  }
%>
<body>
  <h2>ログイン画面</h2>
  <!-- Check error message. If it is set, then display it -->
  <%if (errMsg != null) { %>
    <span style="color: red;"><%out.print(errMsg); %></span>
  <%} %>
  <form method="post">
    User Name: <input type="text" name="userName"><br>
    Password: <input type="password" name="password"><br>
    <button type="submit" name="submit">Submit</button>
    <button type="reset">Reset</button>
  </form>
</body>
</html>
  • このレベルだとWebLogicでもwarデプロイで動く。

Eclipse + Tomcat + JSF

  • Java EE Perspectiveを選択
  • File -> New -> Dynamic Web Projectを選択。
  • Dynamic Web ProjectのWizardで必要項目を入力。ここの例では、「Project name : JSF-Sample01」とする。
    • Target runtime : Apache Tomcat v8.0
    • 「Generate web.xml deployment descriptor」にチェック
  • JSF libraryをダウンロード(2016/12月時点で、javax.faces-2.2.14.jar)し、WebContent/WEB-INF/libフォルダに追加
  • web.xmlを編集。</web-app>の前に以下の内容を追加。
web.xml
<servlet>
  <servlet-name>JSFServlet</servlet-name>
  <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
  <servlet-name>JSFServlet</servlet-name>
  <url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
  • Managed Beanを作成
    • Java Resources/src以下にNew -> Classで新規JavaBeanを作成(ここでは「LoginBean」)
  • WebContentの直下にindex.xhtmlを作成
index.html
<html 
  xmlns:f="http://java.sun.com/jsf/core"
  xmlns:h="http://java.sun.com/jsf/html">

  <head>
    <title>Login</title>
  </head>
  <body>
  <h2>Login</h2>
  <h:outputText value="#{loginBean.errorMsg}"
  rendered="#{loginBean.errorMsg != null}"
  style="color:red;"/>
  <h:form>
    User Name: <h:inputText id="userName" value="#{loginBean.userName}"/><br/>
    Password: <h:inputSecret id="password" value="#{loginBean.password}"/><br/>
  <h:commandButton value="Submit" action="#{loginBean.validate}"/>
  </h:form>
</body>
</html>
  • WebContentの直下にwelcome.xhtmlを作成
welcome.xhtml
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html">
    <body>
        <h2>Welcome admin !</h2>
        You logged in successfully.
    </body>
</html>
  • http://localhost:8080/JSF-Sample01/index.xhtml でアクセス

  • JSFライブラリが大丈夫かなと思ったが、war Export -> Deployで、WebLogicでも動く。結局WebLogicのJSFライブラリは使ってないことになるが・・・

sahn
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした