このページでは、Apache Tomcatについての情報を掲載しています。
この記事の目次です。
1. Tomcatとは
2. インストール方法
3. 設定方法
4. プログラミング方法
5. 問題解決の参考
Tomcatとは、Apache Software Foundationが開発するApache Tomcatというソフトウェアのことをいいます。 Webコンテナという機能を実装したオープンソースのソフトウェアです。
Tomcatは、Webコンテナを内包しているので、単独でWebサーバとして動作することも可能です。 一般的なWebアプリケーションでは、Apache HTTP ServerやNginx、IISなどのWebサーバソフトウェアと連携して、JSP、サーブレットなどの動的な処理の部分を担うことが多いです。
Tomcatのインストール方法についてまとめています。
Linux環境でのTomcatのインストール方法です。
Tomcatのインストール手順を掲載しています。 環境はLinux(CentOS)になります。 インストールして起動できない場合の解決方法などもまとめています。
Tomcatの設定方法についてまとめています。
このページでは、コンテキストパスの設定-Tomcatの設定について記述しています。
このページでは、Contextタグの属性-Tomcatの設定について記述しています。
このページでは、EclipseでTomcatの起動停止が行えるようにする設定方法について説明しております。
Apache(Apache HTTP Server)とTomcat(Apache Tomcat)を連携する場合、Apache Jserv Protocol、略してajpというプロトコルが利用できます。 Ajpというプロトコル、httpdのmod_proxy_ajp、ajpを使用したApacheとTomcatを連携させる設定方法についてまとめました。
Tomcatの独自エラーページの設定方法についてまとめています。
Tomcatで公開するWebアプリケーションのプログラミング方法についてまとめています。
Tomcat上で動作する簡単なServletの作成方法について紹介しています。
簡単なJSPをTomcat上で実行させる方法です。サンプルコード、Tomcatの設定、デプロイなど動作させるまでの手順をまとめています。
サーブレットでHTTPリクエスト情報(ホスト情報や参照ページ)を参照する例になります。 サンプルコード、Tomcatの設定、デプロイなど動作させるまでの手順をまとめています。
ServletでGETパラメータを取得する方法(日本語対応)です。 サンプルコード、Tomcatの設定、デプロイなど動作させるまでの手順をまとめています。
Servletでsessionを利用する方法です。サンプルコード、Tomcatの設定、デプロイなど動作させるまでの手順をまとめています。
リクエスト受付処理をサーブレットで行い、ブラウザの表示処理をJSPで行う例です。 サーブレットからJSPへ転送する際にfowardを使用しています。
□tomcatホームディレクトリ ├□conf |└□Catalina | └□localhost | └◆test.xml └□webapps └□test └□WEB-INF ├□jsp |└◆HelloWorld.jsp ├□classes |└◆HelloWorld.class └◆web.xml
<Context path="/test"
docBase="<tomcatホームディレクトリ>/webapps/test"
reloadable="true">
</Context>
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
public class HelloWorld extends HttpServlet {
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest reqest, HttpServletResponse response)
throws IOException, ServletException {
// requestにデータnameを登録
request.setAttribute("name", "World");
// ServletContextオブジェクトを取得
ServletContext context = getServletContext();
// RequestDispatcherオブジェクトを取得
RequestDispatcher dispatcher
= context.getRequestDispatcher("/WEB-INF/jsp/HelloWorld.jsp");
// forwardメソッドで転送
rd.forward(request, response);
}
}
<html>
<head>
<title>sample</title>
</head>
<body>
Hello <%= request.getAttribute("name") %> !!
</body>
</html>
java -classpath <tomcatホーム>/lib/servlet-api.jar:. HelloWorld.java
<?xml version="1.0" encoding="UTF-8" ?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>HelloWorld</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app>
ブラウザより、「http://<tomcatサーバのホスト>:8080/test/hello」へアクセス。 「Hello World!! 」と表示されます。
以下はTomcat上のWebアプリと連携する簡単なAjaxアプリケーションのサンプルコードです。
□tomcatホームディレクトリ ├□conf |└◆server.xml └□webapps └□test ├◆index.html └□WEB-INF ├□classes |└◆SampleServlet.class └◆web.xml
方針として、文字コードはUTF-8を使用します。 html、JSP、Servlet全部UTF-8に統一します。 apacheと連携する場合、「AddDefaultCharset UTF-8」を指定します。
<?xml version='1.0' encoding='utf-8'?>
<Server port="8005" shutdown="SHUTDOWN">
<!--: 省略-->
<Service name="Catalina">
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
URIEncoding="UTF-8" />
<Connector port="8009"
protocol="AJP/1.3"
redirectPort="8443"
URIEncoding="UTF-8" />
<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="false"
xmlValidation="false" xmlNamespaceAware="false">
<Context path="/test"
docBase="<tomcatホームディレクトリ>/webapps/test"
reloadable="true">
</Context>
</Host>
</Engine>
</Service>
</Server>
<html>
<head>
<meta http-equiv="content-type"
content="text/html; charset=UTF-8">
<script type="text/javascript">
var xmlhttp;
/* ボタンのonclick属性に登録する関数 */
function onButtonClick() {
// IE版のXMLHttpRequestオブジェクトを生成する。
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
// イベント発生(データ受信)時の処理を登録する。
xmlhttp.onreadystatechange = httpHandler;
// リクエスト先のURLや送信するデータを設定する。
xmlhttp.open("POST", "/test/sample");
// サーバ側に要求を送る。
xmlhttp.send(null);
}
/* XMLHttpRequestのonreadystatechangeに登録する関数 */
function httpHandler() {
// サーバ側の応答内容をidがaのタグに設定する。
document.getElementById("a").innerHTML=xmlhttp.responseText;
}
</script>
</head>
<body>
<p id="a">ここに文字列が出力します。</p>
<input type="button" value="ボタン" onclick="onButtonClick()"/>
</body>
</html>
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;
public class SampleServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public void doPost(HttpServletRequest req, HttpServletResponse res)
throws IOException, ServletException {
res.setContentType("text/plain; charset=UTF-8");
PrintWriter out = res.getWriter();
out.println("Hello World!!");
}
}
java -classpath <tomcatホーム>/lib/servlet-api.jar:. SampleServlet.java User.java
<?xml version="1.0" encoding="UTF-8" ?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<servlet>
<servlet-name>sample</servlet-name>
<servlet-class>SampleServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>sample</servlet-name>
<url-pattern>/sample</url-pattern>
</servlet-mapping>
</web-app>
ブラウザより、「http://<tomcatサーバのホスト>:8080/test/index.html」へアクセス。 「ボタン」を押すと「Hello World!! 」と表示されます。
以下はRESTEasyというフレームワークを使用したTomcatで公開するRESTFulなWebアプリケーションの作成方法とサンプルコードをまとめています。
RESTEasy(れすといーじー)は、 JAX-RSを実装したオープンソースのJavaのフレームワークです。 RESTfulなWebサービス、RESTfulなJavaアプリケーション構築用のフレームワークです。
RESTfulは、RESTっぽいという意味です。つまりRESTという設計様式に近いor思想を継承した設計様式のことをいいます。
RESTは、2000年にRoy Fielding氏が提唱した複数のシステムを連携させる分散アーキテクチャの一つのことですが、 RESTははかなり広い意味で定義されているので、ステートレスやリソース、URI、ハイパーメディアの使用など、 いくつかのRESTの原則を取り入れたものをRESTfulといいます。
RESTEasyのHello World(簡単なアプリケーションのサンプルコード)を見ながら解説していいます。
以下の媒体・環境で動作確認をおこないました。
<tomcatホームディレクトリ>/webappsの下に以下の構成を作成します。
□Tomcatホーム/webapps/
├─conf
│ server.xml
└─webapps
└─SampleRESTEasy
└─WEB-INF
│ web.xml
├─classes
│ └─sample
│ Sample.class
└─lib
javassist-3.8.0.GA.jar
jaxrs-api-3.0.6.Final.jar
resteasy-jaxrs-3.0.6.Final.jar
scannotation-1.0.3.jar
今回はログ関連など省略して、ブラウザに「Hello World!!」と表示するのに必要な最小限のjarファイルを配置してみました。
本サンプルでは、http://sourceforge.net/projects/resteasy/files/Resteasy%20JAX-RS/より、 resteasy-jaxrs-3.0.6.Final-all.zipをダウンロード・解凍してlibフォルダにある以下のjarファイルを<Tomcatホーム>\webapps\SampleStruts\WEB-INF\libに配置ています。
以下はJavaのソースコードです。
package sample;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
@Path("/")
public class Sample {
@GET
@Path("message")
@Produces("text/plain")
public String getMessage(
@QueryParam("hello") String hello,
@QueryParam("world") String world) {
return hello + " " + world + "!!";
}
}
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name>RESTEasy Sample</display-name>
<context-param>
<param-name>resteasy.scan</param-name>
<param-value>true</param-value>
</context-param>
<listener>
<listener-class>
org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap
</listener-class>
</listener>
<servlet>
<servlet-name>Resteasy</servlet-name>
<servlet-class>
org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Resteasy</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>
<?xml version='1.0' encoding='utf-8'?>
<Server port="8005" shutdown="SHUTDOWN">
:
<省略>
:
<Service name="Catalina">
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
:
<省略>
:
<Engine name="Catalina" defaultHost="localhost">
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
:
<省略>
:
<Context path="/SampleRESTEasy" reloadable="true" />
:
<省略>
:
</Host>
</Engine>
</Service>
</Server>
Tomcatを起動し、ブラウザアドレスバーに「http://localhost:8080/SampleRESTEasy/message?hello=Hello&world=World」 と入力してリクエストすると「Hello World!!」が表示されます。
以下はTomcatの比較的高度な機能の設定とサンプルコードをまとめています。
Tomcatでは、データソース(コネクションプールなどの機能を提供する技術)が利用できます。 ここでは、server.xmlに指定して、Tomcatでデータソースの利用してMySQLに接続する方法を紹介します。
JDBCは、Java Database Connectivityの略で、Javaからリレーショナル・データベースに接続するためのインタフェースを提供するJava標準APIです。
Tomcatを停止し、以下の配置構成をつくります。
□<Tomcatホーム> ├□conf |└◆server.xml ├□conf |└◆mysql-connector-java-X.X.XX-bin.jar └□webapps └□dataSorceSample └□WEB-INF ├□classes |└□dataSourceSample | └◆Test.class └◆web.xml
<?xml version='1.0' encoding='utf-8'?>
<Server …>
<Service …>
<Engine …>
<Host …>
<Context path="<コンテキストパス:dataSorceSample>"
docBase="<アプリ場所:Tomcatホーム/webapps/dataSorceSample"
reloadable="true" />
<Resource name="mysql" auth="Container"
type="javax.sql.DataSource"
username="<DBユーザ>" password="<DBのパスワード>"
driverClassName="com.mysql.jdbc.Driver"
url="<URL:例)jdbc:mysql://localhost:3306/test?<※>" />
<!-- ※useUnicode=true&characterEncoding=utf8など -->
</Context>
</Host>
</Engine>
</Service>
</Server>
package dataSourceSample;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;
public class Test extends HttpServlet {
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest req,HttpServletResponse res)
throws ServletException {
res.setContentType("text/html");
try {
ArrayList<String> dataList = getDataList();
outHtml(res, dataList);
} catch (Exception e) {
throw new ServletException(e);
}
}
private ArrayList<String> getDataList()
throws NamingException, SQLException {
// 太字がDataSourceを使用して、MySQLとのコネクションを取得部分
InitialContext ctx = new InitialContext();
// java:comp/env/ + Resourceタグに設定したmysqlでデータソースを探す
DataSource ds = (DataSource)ctx.lookup("java:comp/env/mysql");
Connection con = ds.getConnection();
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("select * from sample");
ArrayList<String> dataList = new ArrayList<String>();
while (rs.next()) {
dataList.add(rs.getString("name"));
}
return dataList;
}
private void outHtml(HttpServletResponse res,ArrayList<String> dataList)
throws IOException {
PrintWriter out = res.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<title>Test</title>");
out.println("</head>");
out.println("<body>");
for (String data: dataList) {
out.println(data + "<br />");
}
out.println("</body>");
out.println("</html>");
}
}
java -classpath Tomcatホーム/lib/servlet-api.jar ./dataSourceSample/Test.java
<?xml version="1.0" encoding="UTF-8" ?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<servlet>
<servlet-name>Test</servlet-name>
<servlet-class>dataSourceSample.Test</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Test</servlet-name>
<url-pattern>/test</url-pattern>
</servlet-mapping>
</web-app>
#testデータベース作成。
create database test;
# sampleテーブル作成。
use test;
create table sample(mid CHAR(5) PRIMARY KEY, name VARCHAR(20));
# データ挿入。
insert into sample values ('00001', 'test1');
insert into sample values ('00002', 'test2');
MySQLにDB作成とデータ挿入(creat_and_insert.txt)を流します。
mysql -u <DBユーザ> -p<パスワード> < <置き場所>/creat_and_insert.txt
tomcat起動。
<Tomcatホーム>/bin/startup.sh
ブラウザより、「http://<Tomcatのホスト>/dataSourceSample/test」へアクセス。
test1
test2
と表示されればOKです。
Tomcat関連の問題解決の参考です。
たまに現場で見かけるTomcat起動時の不可解な警告ログ「Setting property 'debug'…」、その原因を見つけました!
この記事の更新履歴です。
スポンサーリンク
サイト内のページ
言語
C・C++
/HTML
/Java
/JavaScript
/PHP
/シェルスクリプト
開発環境
Ant
/Burp
/Eclipse
/Fiddler
/gcc
/gdb
/Git
/g++
/JDK
/JMeter
/JUnit
/Teraterm
/ZAP
技術・仕様
Ajax
/CORBA
/Jakarta EE(旧称J2EE、Java EE)
/JNI
ライブラリ/Framework/CMS
bootstrap
/jQuery
/FuelPHP
/Lucene
/MyBatis
/Seasar2
/Spring
/Struts
/WordPress
Web API
Google Maps
ITインフラOSとミドルウェア
Linux
/Windows
/シェル
ActiveMQ
/Tomcat
/MariaDB
/MySQL
/Nagios
/Redis
/Solr
ITインフラセキュリティ
公開サーバーのセキュリティ
SI
ホームページの作り方
スポンサーリンク
関連サイト内検索ツール
zealseedsおよび関連サイト内のページが検索できます。
IPアドレス確認ツール
あなたのグローバルIPアドレスは以下です。
18.224.31.82
HTMLの表示色確認ツール
パスワード生成ツール
文字数のプルダウンを選択して、取得ボタンを押すと「a~z、A~Z、0~9」の文字を ランダムに組み合わせた文字列が表示されます。
ここに生成されます。
スポンサーリンク
Copyright (C) 2007-2024 zealseeds. All Rights Reserved. Loarding…