- 自分の Web Application のフォルダを用意する。ここでは proj とする。
${CATALINA_HOME}/webapps/proj/WEB-INF/src/
${CATALINA_HOME}/webapps/proj/WEB-INF/classes/
フォルダを生成する |
% mkdir -p ${CATAKLINA_HOME}/webapps/proj/WEB-INF/src
% mkdir -p ${CATAKLINA_HOME}/webapps/proj/WEB-INF/classes
|
- XML ファイルを用意する
${CATALINA_HOME}/webapps/proj/WEB-INF/web.xml |
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0"
metadata-complete="false">
</web-app>
|
- サーブレットのソースファイル NetData.java を用意する。
${CATALINA_HOME}/webapps/proj/src/NetData.java |
import java.io.*;
import java.util.*;
import java.util.concurrent.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
@WebServlet(name="NetData",urlPatterns={"/NetData"})
public class NetData extends HttpServlet {
ArrayBlockingQueue<Double> queue;
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/plain; charset=utf-8");
PrintWriter out= response.getWriter();
if (queue == null) queue = new ArrayBlockingQueue<Double>(100);
String data = request.getParameter("data"); // 入力データを受け取る
if (data != null) {
Scanner sc = new Scanner(data);
while (sc.hasNext()) {
double d = sc.nextDouble();
queue.offer(d);
}
out.println(Integer.toString(queue.size()));
return;
}
// 20 以上データが溜まると、古いデータを捨てる
while (queue.size() > 20) {
queue.poll();
}
// アップロードされたデータを空白で区切って返す
StringBuilder sb = new StringBuilder();
sb.append(queue.size()); sb.append(" ");
while (queue.size() > 0) {
sb.append(queue.poll());
sb.append(" ");
}
out.println(sb.toString());
}
}
|
- コンパイルして NetData.class ファイルを生成する
NetData.java をコンパイルする |
~ % cd ${CATALINA_HOME}/webapps/proj/WEB-INF
~/Documents/tomcat9/webapps/proj/WEB-INF % javac -encoding utf8 src/NetData.java -d classes -sourcepath src
~/Documents/tomcat9/webapps/proj/WEB-INF % ls -lR
total 8
drwxr-xr-x 3 nitta staff 96 9 15 14:53 classes
drwxr-xr-x 3 nitta staff 96 9 15 14:53 src
-rw-r--r-- 1 nitta staff 336 9 15 10:27 web.xml
./classes:
total 8
-rw-r--r-- 1 nitta staff 2078 9 15 14:53 NetData.class
./src:
total 8
-rw-r--r-- 1 nitta staff 1347 9 15 14:52 NetData.java
-rw-r--r-- 1 nitta staff 2096 9 15 13:55 NetData.class ← classes/ フォルダの下に生成される
./src:
total 8
-rw-r--r-- 1 nitta staff 1367 9 15 10:21 NetData.java
|
- tomcat を再起動する。これで /proj/NetData という WebApplication が tomcat に認識される。
tomcat を再起動する |
~/Documents/tomcat9/webapps/proj/WEB-INF % ${CATALINA_HOME}/bin/shutdown.sh ← tomcat を一旦停止する
Using CATALINA_BASE: /Users/nitta/Documents/tomcat9
Using CATALINA_HOME: /Users/nitta/Documents/tomcat9
Using CATALINA_TMPDIR: /Users/nitta/Documents/tomcat9/temp
Using JRE_HOME: /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home
Using CLASSPATH: /Users/nitta/Documents/tomcat9/bin/bootstrap.jar:/Users/nitta/Documents/tomcat9/bin/tomcat-juli.jar
Using CATALINA_OPTS:
NOTE: Picked up JDK_JAVA_OPTIONS: --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED \
--add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED \
--add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
~/Documents/tomcat9/webapps/proj/WEB-INF % ${CATALINA_HOME}/bin/startup.sh ← tomcat を起動する
Using CATALINA_BASE: /Users/nitta/Documents/tomcat9
Using CATALINA_HOME: /Users/nitta/Documents/tomcat9
Using CATALINA_TMPDIR: /Users/nitta/Documents/tomcat9/temp
Using JRE_HOME: /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home
Using CLASSPATH: /Users/nitta/Documents/tomcat9/bin/bootstrap.jar:/Users/nitta/Documents/tomcat9/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Tomcat started.
|
- ブラウザでアクセスする。(データをuploadする)
4個の実数データをアップロードして、4個という数字が返される。
[ブラウザでアクセスするURL]
http://localhost:8080/proj/NetData?data=1.1+2.2+3.3+4.4
- ブラウザでアクセスする。(データをuploadする)
2個の実数データをアップロードして、2個という数字が返される。
[ブラウザでアクセスするURL]
http://localhost:8080/proj/NetData?data=-5.0+-6.7
- ブラウザでアクセスする。(データをdownloadする)
data
パラメータ無しでアクセスすると、これまでアップロードされたデータが返される。
最初の整数はデータの個数で、1個の空白文字で区切られながら実数データが続く。
Webサーバ側のキューは初期化される。
[ブラウザでアクセスするURL]
http://localhost:8080/proj/NetData
- ブラウザでアクセスする。(データをuploadする)
2個の実数データをアップロードして、2個という数字が返される。
[ブラウザでアクセスするURL]
http://localhost:8080/proj/NetData?data=1.0+-2.0
- ブラウザでアクセスする。(データをdownloadする)
data
パラメータ無しでアクセスすると、これまでアップロードされたデータが返される。
Webサーバ側のキューは初期化される。
[ブラウザでアクセスするURL]
http://localhost:8080/proj/NetData
- 作成した ${CATALINA_HOME}/webapps/proj/ の内容は以下の通り。
proj.zip