SlideShare a Scribd company logo
1 of 81
Download to read offline
Spring Bootで
チャットツールを作りながら
Webの仕組みを理解しよう!
Java女子部
presents
2016.5.21
#jjug_ccc #ccc_m3
本日のメンバー
#jjug_ccc #ccc_m3
■ちか
Java歴7年くらい。
金融系のSIer
■ゆう
最近Javaを始めたばかりの
初心者。
エンジニア歴は2年ちょい。
講師講師
#jjug_ccc #ccc_m3
■えりこ
WebアプリケーションSE
エンジニア8年生。
■あや
ラーメン二郎が好きな
エンジニア2年生。
チューター
#jjug_ccc #ccc_m3
■とぅん
Java暦半年ぐらいのエンジニ
ア4年生。品質管理とか
やってます。
■よこな
JJUG司会兼チューター。
エンジニア4年生。
チューター
#jjug_ccc #ccc_m3
ワークショップの概要説明
#jjug_ccc #ccc_m3
チャットツールの制作を通じて
Webの仕組みを理解する!
今回の目標本日の目標
#jjug_ccc #ccc_m3
・基礎的な概念説明
(Webの仕組み、Spring Bootについて)
・ハンズオン導入・WebSocketについて
・ハンズオン
・まとめ
全体の流れ
#jjug_ccc #ccc_m3
Webの仕組みについて
#jjug_ccc #ccc_m3
情報をやりとりする通信網のこと。
この通信網によって
世界中とやりとり
することができる。
そもそもインターネットとは?
#jjug_ccc #ccc_m3
クライアントが情報を要求すると、
サーバから情報が返ってくる。
クライアント サーバ
リクエスト
レスポンス
通信方法について
#jjug_ccc #ccc_m3
Spring Bootについて
#jjug_ccc #ccc_m3
Java Spring
Java JavaEE
Ruby Rails
Python Django
言語を扱いやすく
パッケージングしたもの = フレームワーク
Springって何?
#jjug_ccc #ccc_m3
Spring BootJava Spring
Java JavaEE
Ruby Rails
Python Django
フレームワーク(コンポーネントの集合)を
さらに使いやすくしたフレームワーク
じゃあ、Spring Bootって何?
#jjug_ccc #ccc_m3
・アノテーション
・DIコンテナ
・AOP
 
アノテーションでクラス・メソッド・変数に目印を
つけてフレームワークに解釈させる
⇒ 設定ファイルの代わりになる
class Chat
@RestController
Spring Bootの特徴
#jjug_ccc #ccc_m3
class Chat
アノテーション名 記載場所 説明
@SpringBootAppli
cation
Mainクラス パッケージ内のクラスと設定を自
動的に読み込む
@RestController クラス WebAPI用のコントローラー
@Configuration クラス 設定クラス
ソースコードでSpringの設定を実
装できる
@RequestMapping クラス
メソッド
URLに紐づけて、アクセスできるよ
うに設定する
@Autowired メソッド
フィールド
実装クラスを自動的にインジェク
ションする(DIする)
基本のアノテーション(Spring)
#jjug_ccc #ccc_m3
ハンズオン 1章
-文字列を返すWebアプリケーションを
作ってみよう!-
リポジトリ
https://github.com/java-women/ChatToolForBeginners/
プロジェクト
 chat-exercise  ハンズオン作業用
 chat-tutorial  完成形
環境構築手順 
https://git.io/vro1X
事前準備 1章
ブラウザ
アマゾンのリクエストページ
これから作るもの 1章
①リクエストを送信
③レスポンスを受信
②リクエストを受け取り
ごにょごにょ処理する
商品の詳細ページ
ブラウザ
http://localhost:8080/javajo
Hello World!
これから作るもの 1章
①リクエストを送信
③レスポンスを受信
②リクエストを受け取り
ごにょごにょ処理する
ここを
作るよ
@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class,
args);
}
}
javajo > App.java 1章
Spring Bootの起動クラスを確認する
HelloControllerクラスにもアノテーションを
付与します。
@RestController
public class HelloController {
  }
1章javajo.controller > HelloController.java 1章
・helloメソッドを作成します。
・helloメソッドにアノテーションを付与します。
String hello() {
return "Hello World!";
}
@RequestMapping(value = "/javajo")
String hello() {
return "Hello World!";
}
javajo.controller > HelloController.java 1章
アプリケーションを起動して、
http://localhost:8080/javajo/
にアクセスしてみよう!
1章javajo.controller > HelloController.java 1章
Eclipse
IntelliJApp.javaを
右クリック>run
maven>bootrun
起動方法
下記画面が表示されれば、成功!
1章Hello World動作確認 1章
ブラウザ
サーバ
@RestController
public class HelloController
{
@RequestMapping(value
= "/javajo")
String hello() {
return "Hello World!";
}
}
http://localhost:8080
/javajo
Hello World!
解説 1章
WebSocketについて
#jjug_ccc #ccc_m3
WebSocket
聞いたことある人?
サーバ・クライアント間で接続が確立された
ら、双方向通信(サーバからもクライアントから
もデータの送信)が行える技術仕様
WebSocketとは?
#jjug_ccc #ccc_m3
WebSocket(双方向通信)
Client A
#jjug_ccc #ccc_m3
WebSocket(双方向通信)
Client A
#jjug_ccc #ccc_m3
こんにちは
WebSocket(双方向通信)
Client A
#jjug_ccc #ccc_m3
こんにちは
ClientB
WebSocket(双方向通信)
Client A
#jjug_ccc #ccc_m3
こんにちは
ClientB
こんばんはこんばんは
こんばんは
WebSocket(双方向通信)
Client A
#jjug_ccc #ccc_m3
こんにちは
ClientB
こんばんはこんばんは
こんばんは
※1度接続が確立されればデータがリアルタイム
で送受信可能!
※同じサーバに接続しているユーザはデータを共
有する
ハンズオン2章
-チャットを作ってみよう!-
#jjug_ccc #ccc_m3
チャットツールの作成内容 2章
①WebSocketへの接続要求
⑥WebSocketコネクション切断
④メッセージ送信
⑤メッセージ受信
②WebSocketコネクション確立
③メッセージ受信時の挙動設定
チャットツールの作成内容 2章
Controller
@MessageMapping("/message")
@SendTo(value= "/topic/messages")
MessageBroker
/message
/app/message
ChatForm
@EnableWebSocketMessageBroker
/topic/messages
<dependencies>
・・・・・省略・・・・・
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket
</artifactId>
</dependency>
・・・・・省略・・・・・
</dependencies>
2章pom.xml の内容を確認する 2章
<dependencies>
・・・・・省略・・・・・
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket
</artifactId>
</dependency>
・・・・・省略・・・・・
</dependencies>
pom.xml の内容を確認する
pom.xml
35行目あたり
WebSocketを利用
するのに必要!!
2章
javajo.form > ChatForm.java 2章
public class ChatForm {
・・・・・省略・・・・・
}
public class ChatForm {
private String name;
private String message;
・・・・・省略・・・・・
}
javajo.form > ChatForm.java 2章
クライアントから
受け取った値を格納する
フィールドを作成
public class ChatForm {
・・・・・省略・・・・・
/**
public String getName() {
return name;
}
・・・・・省略・・・・・
public void setMessage(String message) {
this.message = message;
}
**/
}
javajo.form > ChatForm.java 2章
フィールドにアクセスする
getter/setterを作成します
public class ChatForm {
・・・・・省略・・・・・
/**
public String getName() {
return name;
}
・・・・・省略・・・・・
public void setMessage(String message) {
this.message = message;
}
**/
}
javajo.form > ChatForm.java 2章
すでに実装済みなので、
コメントアウトを外す
だけでOK
public class ChatForm {
・・・・・省略・・・・・
public String getName() {
return name;
}
・・・・・省略・・・・・
public void setMessage(String message) {
this.message = message;
}
}
javajo.form > ChatForm.java 2章
すでに実装済みなので、
コメントアウトを外す
だけでOK
チャットツールの作成内容 2章
①WebSocketへの接続要求
⑥WebSocketコネクション切断
④メッセージ送信
⑤メッセージ受信
②WebSocketコネクション確立
③メッセージ受信時の挙動設定
public class StompConfig {
}
javajo.config > StompConfig.java 2章
クライアントからの
メッセージを処理する
クラスを作成します
public class StompConfig extends
AbstractWebSocketMessageBrokerConfigurer {
}
javajo.config > StompConfig.java 2章
メッセージを処理する
抽象クラスを継承
@Configuration
public class StompConfig extends
AbstractWebSocketMessageBrokerConfigurer {
}
javajo.config > StompConfig.java 2章
設定ファイルを表す
アノテーションを付与
@Configuration
@EnableWebSocketMessageBroke
public class StompConfig extends
AbstractWebSocketMessageBrokerConfigurer {
}
javajo.config > StompConfig.java 2章
WebSocketを扱うのに
必要なアノテーションを
付与
public class StompConfig extends AbstractWebSocketMessageBrokerConfigurer {
@Override
public void registerStompEndpoints
(StompEndpointRegistry registry) {
registry.addEndpoint("endpoint");
}
}
javajo.config > StompConfig.java 2章
エンドポイントの
登録メソッドを作成
チャットツールの作成内容 2章
ChatController
@MessageMapping("/message")
@SendTo(value= "/topic/messages")
MessageBroker
/message
/app/message
@EnableWebSocketMessageBroker
/topic/messages
ここを
作るよ ChatForm
public class StompConfig extends AbstractWebSocketMessageBrokerConfigurer {
・・・・・省略(registerStompEndpointsの直後)・・・・・
@Override
public void configureMessageBroker(MessageBrokerRegistry
registry) {
registry.setApplicationDestinationPrefixes("/app");
registry.enableSimpleBroker("/topic");
}
}
javajo.config > StompConfig.java 2章
メッセージブローカーの
設定メソッドを作成
チャットツールの作成内容 2章
①WebSocketへの接続要求
⑥WebSocketコネクション切断
④メッセージ送信
⑤メッセージ受信
②WebSocketコネクション確立
③メッセージ受信時の挙動設定ここを
作るよ
チャットツールの作成内容 2章
ChatController
@MessageMapping("/message")
@SendTo(value= "/topic/messages")
MessageBroker
/message
/app/message
ChatForm
@EnableWebSocketMessageBroker
/topic/messages
ここを
作るよ
public class ChatController {
ChatForm greet(ChatForm chatForm) {
return chatForm;
}
}
javajo.controller > ChatController.java 2章
チャットのコントロー
ラークラスを作成します
@RestController
public class ChatController {
ChatForm greet(ChatForm chatForm) {
return chatForm;
}
}
javajo.controller > ChatController.java 2章
コントローラーの
アノテーションを付与
@RestController
public class ChatController {
@MessageMapping(value = "/message" )
ChatForm greet(ChatForm chatForm) {
return chatForm;
}
}
javajo.controller > ChatController.java 2章
メッセージを受け付ける
MessageMappingを付与
@RestController
public class ChatController {
@MessageMapping(value = "/message" )
@SendTo(value = "/topic/messages")
ChatForm greet(ChatForm chatForm) {
return chatForm;
}
}
javajo.controller > ChatController.java 2章
処理結果を送信する宛先
SendToを付与
チャットツールの作成内容 2章
①WebSocketへの接続要求
⑥WebSocketコネクション切断
④メッセージ送信
⑤メッセージ受信
②WebSocketコネクション確立
③メッセージ受信時の挙動設定
ここだよ
チャットツールの作成内容 2章
ここだよ
クライアント側(Stomp.js) 2章
resources/static/js/Stomp.js
提供されているライブラリを使用
詳しくは、
http://jmesnil.net/stomp-websocket/doc/
クライアント側のメッセージ制御は
JavaScriptライブラリを利用する
クライアント側(javajo.js) 2章
ChatStomp.prototype.connect = function ()
{
var socket = new WebSocket('ws://' +
location.host + '/endpoint');
・・・・・省略・・・・・
}; 23行目
public class StompConfig extends AbstractWebSocketMessageBrokerConfigurer {
@Override
public void registerStompEndpoints
(StompEndpointRegistry registry) {
registry.addEndpoint("endpoint");
}
}
javajo.config > StompConfig.java 2章
エンドポイントの
登録メソッドを作成
チャットツールの作成内容 2章
①WebSocketへの接続要求
⑥WebSocketコネクション切断
④メッセージ送信
⑤メッセージ受信
②WebSocketコネクション確立
③メッセージ受信時の挙動設定
ここだよ
チャットツールの作成内容 2章
ここだよ
クライアント側(javajo.js) 2章
ChatStomp.prototype.onConnected = function
(frame) {
console.log('Connected: ' + frame);
this.stompClient.subscribe('/topic/messages',this.
onSubscribeGreeting.bind(this));
 this.setConnected(true);
};
34行目
public class StompConfig extends AbstractWebSocketMessageBrokerConfigurer {
・・・・・省略(registerStompEndpointsの直後)・・・・・
@Override
public void configureMessageBroker(MessageBrokerRegistry
registry) {
registry.setApplicationDestinationPrefixes("/app");
registry.enableSimpleBroker("/topic");
}
}
javajo.config > StompConfig.java 2章
メッセージブローカーの
設定メソッドを作成
チャットツールの作成内容 2章
①WebSocketへの接続要求
⑥WebSocketコネクション切断
④メッセージ送信
⑤メッセージ受信
②WebSocketコネクション確立
③メッセージ受信時の挙動設定ここだよ
チャットツールの作成内容 2章
ここだよ
クライアント側(javajo.js) 2章
ChatStomp.prototype.sendName =
function () {
・・・・・省略・・・・・
this.stompClient.send("/app/message", {},
   JSON.stringify(json_message));
};
73行目
public class StompConfig extends AbstractWebSocketMessageBrokerConfigurer {
・・・・・省略(registerStompEndpointsの直後)・・・・・
@Override
public void configureMessageBroker(MessageBrokerRegistry
registry) {
registry.setApplicationDestinationPrefixes("/app");
registry.enableSimpleBroker("/topic");
}
}
javajo.config > StompConfig.java 2章
メッセージブローカーの
設定メソッドを作成
@RestController
public class ChatController {
@MessageMapping(value = "/message" )
ChatForm greet(ChatForm chatForm) {
return chatForm;
}
}
javajo.controller >ChatController.java 2章
メッセージを受け付ける
MessageMappingを付与
チャットツールの作成内容 2章
ChatController
@MessageMapping("/message")
@SendTo(value= "/topic/messages")
MessageBroker
/message
/app/message
@EnableWebSocketMessageBroker
/topic/messages
ChatForm
チャットツールの作成内容 2章
①WebSocketへの接続要求
⑥WebSocketコネクション切断
④メッセージ送信
⑤メッセージ受信
②WebSocketコネクション確立
③メッセージ受信時の挙動設定
ここだよ
チャットツールの作成内容 2章
ここだよ
クライアント側(javajo.js) 2章
ChatStomp.prototype.disconnect =
function () {
if (this.stompClient) {
this.stompClient.disconnect();
this.stompClient = null;
}
this.setConnected(false);
};
88行〜94行目
ハンズオンはここまで!
実際に動かしてみよう!
#jjug_ccc #ccc_m3
1. chat-exerciseのプロジェクトを実行!
2. http://localhost:8080/chat
にアクセス!
ローカルで動かしてみようローカルで動かしてみよう
3. ユーザ名を入力してConnectボタンクリック!
 
4.メッセージを入力してSendボタン
をクリック!
#jjug_ccc #ccc_m3
まとめ
#jjug_ccc #ccc_m3
・「Hello World」を出力するアプリケーションを
Spring Bootで作りました
・チャットを作りながらWebSocketについて学
びました
まとめ
#jjug_ccc #ccc_m3
お疲れ様でした
ありがとうございました
【講師】
ゆう・ちか
【チューター】
えりこ・あや・とぅん・よこな
#jjug_ccc #ccc_m3

More Related Content

What's hot

2 TomcatによるWebアプリケーションサーバ構築 第2章 Tomcat概要(2)-セッション
2 TomcatによるWebアプリケーションサーバ構築 第2章 Tomcat概要(2)-セッション2 TomcatによるWebアプリケーションサーバ構築 第2章 Tomcat概要(2)-セッション
2 TomcatによるWebアプリケーションサーバ構築 第2章 Tomcat概要(2)-セッション
Enpel
 
そんなトランザクションマネージャで大丈夫か?
そんなトランザクションマネージャで大丈夫か?そんなトランザクションマネージャで大丈夫か?
そんなトランザクションマネージャで大丈夫か?
takezoe
 

What's hot (20)

中小規模サービスのApacheチューニング
中小規模サービスのApacheチューニング中小規模サービスのApacheチューニング
中小規模サービスのApacheチューニング
 
SpringBootTest入門
SpringBootTest入門SpringBootTest入門
SpringBootTest入門
 
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
 
Java開発の強力な相棒として今すぐ使えるGroovy
Java開発の強力な相棒として今すぐ使えるGroovyJava開発の強力な相棒として今すぐ使えるGroovy
Java開発の強力な相棒として今すぐ使えるGroovy
 
10分でわかるOpenAPI V3
10分でわかるOpenAPI V310分でわかるOpenAPI V3
10分でわかるOpenAPI V3
 
これからSpringを使う開発者が知っておくべきこと
これからSpringを使う開発者が知っておくべきことこれからSpringを使う開発者が知っておくべきこと
これからSpringを使う開発者が知っておくべきこと
 
Spring Framework ふりかえりと4.3新機能
Spring Framework ふりかえりと4.3新機能Spring Framework ふりかえりと4.3新機能
Spring Framework ふりかえりと4.3新機能
 
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
 
MySQLレプリケーションあれやこれや
MySQLレプリケーションあれやこれやMySQLレプリケーションあれやこれや
MySQLレプリケーションあれやこれや
 
Multibranch pipelineでいろいろ学んだこと
Multibranch pipelineでいろいろ学んだことMultibranch pipelineでいろいろ学んだこと
Multibranch pipelineでいろいろ学んだこと
 
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?
 
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
 
さくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組みさくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組み
 
Webアプリケーション負荷試験実践入門
Webアプリケーション負荷試験実践入門Webアプリケーション負荷試験実践入門
Webアプリケーション負荷試験実践入門
 
2 TomcatによるWebアプリケーションサーバ構築 第2章 Tomcat概要(2)-セッション
2 TomcatによるWebアプリケーションサーバ構築 第2章 Tomcat概要(2)-セッション2 TomcatによるWebアプリケーションサーバ構築 第2章 Tomcat概要(2)-セッション
2 TomcatによるWebアプリケーションサーバ構築 第2章 Tomcat概要(2)-セッション
 
AWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティスAWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティス
 
そんなトランザクションマネージャで大丈夫か?
そんなトランザクションマネージャで大丈夫か?そんなトランザクションマネージャで大丈夫か?
そんなトランザクションマネージャで大丈夫か?
 
今こそ知りたいSpring Web(Spring Fest 2020講演資料)
今こそ知りたいSpring Web(Spring Fest 2020講演資料)今こそ知りたいSpring Web(Spring Fest 2020講演資料)
今こそ知りたいSpring Web(Spring Fest 2020講演資料)
 
コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門
 
AWS Black Belt Online Seminar 2016 Amazon EC2 Container Service
AWS Black Belt Online Seminar 2016 Amazon EC2 Container ServiceAWS Black Belt Online Seminar 2016 Amazon EC2 Container Service
AWS Black Belt Online Seminar 2016 Amazon EC2 Container Service
 

Viewers also liked

HBaseとRedisを使った100億超/日メッセージを処理するLINEのストレージ
HBaseとRedisを使った100億超/日メッセージを処理するLINEのストレージHBaseとRedisを使った100億超/日メッセージを処理するLINEのストレージ
HBaseとRedisを使った100億超/日メッセージを処理するLINEのストレージ
LINE Corporation
 

Viewers also liked (20)

Java女子部勉強会参加した感想
Java女子部勉強会参加した感想Java女子部勉強会参加した感想
Java女子部勉強会参加した感想
 
JavaOne 2015 - Java SE Update
JavaOne 2015 - Java SE UpdateJavaOne 2015 - Java SE Update
JavaOne 2015 - Java SE Update
 
Rancher LT Talk 20170126
Rancher LT Talk 20170126Rancher LT Talk 20170126
Rancher LT Talk 20170126
 
PHPer女子が語る2015!こんなコードを書くヒトはモテない〜コラボ編〜@PHPカンファレンス2015 #phpcon2015
PHPer女子が語る2015!こんなコードを書くヒトはモテない〜コラボ編〜@PHPカンファレンス2015 #phpcon2015PHPer女子が語る2015!こんなコードを書くヒトはモテない〜コラボ編〜@PHPカンファレンス2015 #phpcon2015
PHPer女子が語る2015!こんなコードを書くヒトはモテない〜コラボ編〜@PHPカンファレンス2015 #phpcon2015
 
サーバサイドエンジニアが知りたいIoTの話
サーバサイドエンジニアが知りたいIoTの話サーバサイドエンジニアが知りたいIoTの話
サーバサイドエンジニアが知りたいIoTの話
 
HBaseとRedisを使った100億超/日メッセージを処理するLINEのストレージ
HBaseとRedisを使った100億超/日メッセージを処理するLINEのストレージHBaseとRedisを使った100億超/日メッセージを処理するLINEのストレージ
HBaseとRedisを使った100億超/日メッセージを処理するLINEのストレージ
 
Java女子部について
Java女子部についてJava女子部について
Java女子部について
 
Javaプログラマーももう逃げられない。マイクロサービスとAPIの世界。
Javaプログラマーももう逃げられない。マイクロサービスとAPIの世界。Javaプログラマーももう逃げられない。マイクロサービスとAPIの世界。
Javaプログラマーももう逃げられない。マイクロサービスとAPIの世界。
 
プロダクトに 1 から Vue.js を導入した話
プロダクトに 1 から Vue.js を導入した話プロダクトに 1 から Vue.js を導入した話
プロダクトに 1 から Vue.js を導入した話
 
とにかく楽してVue.jsでTypeScriptを使いたい
とにかく楽してVue.jsでTypeScriptを使いたいとにかく楽してVue.jsでTypeScriptを使いたい
とにかく楽してVue.jsでTypeScriptを使いたい
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
 
Java 9 and Future #jjug
Java 9 and Future #jjugJava 9 and Future #jjug
Java 9 and Future #jjug
 
U-NEXT学生インターン、過激なJavaの学び方と過激な要求
U-NEXT学生インターン、過激なJavaの学び方と過激な要求U-NEXT学生インターン、過激なJavaの学び方と過激な要求
U-NEXT学生インターン、過激なJavaの学び方と過激な要求
 
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
 
2017spring jjug ccc_f2
2017spring jjug ccc_f22017spring jjug ccc_f2
2017spring jjug ccc_f2
 
Java libraries you can't afford to miss
Java libraries you can't afford to missJava libraries you can't afford to miss
Java libraries you can't afford to miss
 
Jjugccc2017spring-postgres-ccc_m1
Jjugccc2017spring-postgres-ccc_m1Jjugccc2017spring-postgres-ccc_m1
Jjugccc2017spring-postgres-ccc_m1
 
Kotlin is charming; The reasons Java engineers should start Kotlin.
Kotlin is charming; The reasons Java engineers should start Kotlin.Kotlin is charming; The reasons Java engineers should start Kotlin.
Kotlin is charming; The reasons Java engineers should start Kotlin.
 
Arachne Unweaved (JP)
Arachne Unweaved (JP)Arachne Unweaved (JP)
Arachne Unweaved (JP)
 
Jjug ccc
Jjug cccJjug ccc
Jjug ccc
 

Similar to Spring Bootでチャットツールを作りながらWebの仕組みを理解しよう!

R5 3 type annotation
R5 3 type annotationR5 3 type annotation
R5 3 type annotation
EIICHI KIMURA
 
Maven2 プラグイン入門
Maven2 プラグイン入門Maven2 プラグイン入門
Maven2 プラグイン入門
guestd4898b
 
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
normalian
 
20140517 knockoutjs hands-on
20140517 knockoutjs hands-on20140517 knockoutjs hands-on
20140517 knockoutjs hands-on
Seiji Noro
 
Apache CommonsのHttpClientに おけるSSLサーバ証明書検証不備 (CVE-2012-5783)
Apache CommonsのHttpClientに おけるSSLサーバ証明書検証不備 (CVE-2012-5783)Apache CommonsのHttpClientに おけるSSLサーバ証明書検証不備 (CVE-2012-5783)
Apache CommonsのHttpClientに おけるSSLサーバ証明書検証不備 (CVE-2012-5783)
JPCERT Coordination Center
 

Similar to Spring Bootでチャットツールを作りながらWebの仕組みを理解しよう! (20)

JJUG CCC 2016 fall バイトコードが君のトモダチになりたがっている
JJUG CCC 2016 fall バイトコードが君のトモダチになりたがっているJJUG CCC 2016 fall バイトコードが君のトモダチになりたがっている
JJUG CCC 2016 fall バイトコードが君のトモダチになりたがっている
 
JobStreamerではじめるJavaBatchのクラウド分散実行
JobStreamerではじめるJavaBatchのクラウド分散実行JobStreamerではじめるJavaBatchのクラウド分散実行
JobStreamerではじめるJavaBatchのクラウド分散実行
 
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1
 
REST with Spring Boot #jqfk
REST with Spring Boot #jqfkREST with Spring Boot #jqfk
REST with Spring Boot #jqfk
 
R5 3 type annotation
R5 3 type annotationR5 3 type annotation
R5 3 type annotation
 
どこよりも早い Spring Boot 1.2 解説 #渋谷Java
どこよりも早い Spring Boot 1.2 解説 #渋谷Javaどこよりも早い Spring Boot 1.2 解説 #渋谷Java
どこよりも早い Spring Boot 1.2 解説 #渋谷Java
 
Head toward Java 16 (Night Seminar Edition)
Head toward Java 16 (Night Seminar Edition)Head toward Java 16 (Night Seminar Edition)
Head toward Java 16 (Night Seminar Edition)
 
jQuery と MVC で実践する標準志向 Web 開発
jQuery と MVC で実践する標準志向 Web 開発jQuery と MVC で実践する標準志向 Web 開発
jQuery と MVC で実践する標準志向 Web 開発
 
HTTPとサーブレット
HTTPとサーブレットHTTPとサーブレット
HTTPとサーブレット
 
VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発
 
Chrome Developer Toolsを使いこなそう!
Chrome Developer Toolsを使いこなそう!Chrome Developer Toolsを使いこなそう!
Chrome Developer Toolsを使いこなそう!
 
20140712 knockoutjs-hands-on-in-osaka
20140712 knockoutjs-hands-on-in-osaka20140712 knockoutjs-hands-on-in-osaka
20140712 knockoutjs-hands-on-in-osaka
 
Maven2 プラグイン入門
Maven2 プラグイン入門Maven2 プラグイン入門
Maven2 プラグイン入門
 
いよいよ始められる Java EEでのWebSocket #jjug #jjug_ccc #ccc_r21
いよいよ始められる Java EEでのWebSocket #jjug #jjug_ccc #ccc_r21いよいよ始められる Java EEでのWebSocket #jjug #jjug_ccc #ccc_r21
いよいよ始められる Java EEでのWebSocket #jjug #jjug_ccc #ccc_r21
 
20111204 WebBroser Control Tips for Windows Phone
20111204 WebBroser Control Tips for Windows Phone20111204 WebBroser Control Tips for Windows Phone
20111204 WebBroser Control Tips for Windows Phone
 
Knockout を用いた Firefox OS アプリケーションの開発
Knockout を用いた Firefox OS アプリケーションの開発Knockout を用いた Firefox OS アプリケーションの開発
Knockout を用いた Firefox OS アプリケーションの開発
 
JRoRの力をJava EE技術を使ってさらに高める10の方法(発動編)
JRoRの力をJava EE技術を使ってさらに高める10の方法(発動編)JRoRの力をJava EE技術を使ってさらに高める10の方法(発動編)
JRoRの力をJava EE技術を使ってさらに高める10の方法(発動編)
 
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
 
20140517 knockoutjs hands-on
20140517 knockoutjs hands-on20140517 knockoutjs hands-on
20140517 knockoutjs hands-on
 
Apache CommonsのHttpClientに おけるSSLサーバ証明書検証不備 (CVE-2012-5783)
Apache CommonsのHttpClientに おけるSSLサーバ証明書検証不備 (CVE-2012-5783)Apache CommonsのHttpClientに おけるSSLサーバ証明書検証不備 (CVE-2012-5783)
Apache CommonsのHttpClientに おけるSSLサーバ証明書検証不備 (CVE-2012-5783)
 

Spring Bootでチャットツールを作りながらWebの仕組みを理解しよう!