提出用の課題として、SNSっぽいWebアプリケーションを作成してみましょう。
プロジェクト名: MySNS
型: maven
Javaバージョン: 8
グループ: jp.mysns
パッケージ: jp.mysns
依存関係: HyperSQL Database・Spring Web・Thymeleaf
プロジェクトを作成したら pom.xml のバージョンを変更する。
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.1.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>jp.mysns</groupId> <artifactId>MySNS</artifactId> <version>0.0.1-SNAPSHOT</version> <name>MySNS</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties>
プロジェクト作成時にSpring data JPAの依存関係を追加し忘れていたので、pom/xml に以下の内容を追加する。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>org.hsqldb</groupId> <artifactId>hsqldb</artifactId> <scope>runtime</scope> </dependency>
application.properties
spring.datasource.url=jdbc:hsqldb:file:./db/mysns spring.datasource.username=SA spring.datasource.password= spring.datasource.driver-class-name=org.hsqldb.jdbc.JDBCDriver spring.jpa.hibernate.ddl-auto=update
以下の手順で作っていきましょう!
- トップページに「ユーザー登録」のリンクを作る
- 「ユーザー登録」のリンクをクリックしたらユーザー登録ページに移動する
- ユーザー登録ページでユーザー登録(ログイン名と表示名)できるようにする
- トップページに「ユーザー一覧」のリンクを作る
- 「ユーザー一覧」のリンクをクリックしたらユーザー一覧ページに移動する
- ユーザー一覧ページには登録済みユーザーの一覧(表示名)を表示する
- ユーザー一覧ページで表示名をクリックするとそのユーザーのページを表示する
- ユーザーページで投稿できるようにする
- ユーザーページにはそのユーザーの投稿を一覧表示する
- トップページには全ユーザーの投稿を一覧表示する
ユーザーのページでそのユーザーの投稿を一覧表示するには、投稿をユーザーIDで検索する必要がある。投稿を検索する場合は、PostRepositoryにその機能を追加する必要がある。
package jp.mysns;
import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository;
public interface PostRepository extends JpaRepository<Post, Long> {
List<Post> findAllByUserId(long id);
}
User.java
package jp.mysns;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
public class User {
@Id
@GeneratedValue
@Column
private long id;
@Column
private String loginId;
@Column
private String name;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getLoginId() {
return loginId;
}
public void setLoginId(String loginId) {
this.loginId = loginId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Post.java
package jp.mysns;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.validation.constraints.NotEmpty;
@Entity
public class Post {
@Id
@GeneratedValue
@Column
private long id;
@Column
private Date time;
@Column
@NotEmpty
private String text;
@ManyToOne
private User user;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public Date getTime() {
return time;
}
public void setTime(Date time) {
this.time = time;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
CSS
CSSファイルは src/main/resources の下の static フォルダに作成する。
HTMLテンプレートでは、headタグ内にCSSファイルへの参照を追加する。
<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>MySNS</title> <link rel="stylesheet" href="/style.css"> </head> <body>
配点
| ページ | 内容 | 配点 | ||
|---|---|---|---|---|
| トップページ URL: / |
学籍番号・名前・ユーザー登録のリンク・ユーザー一覧のリンクを表示する | 5 | ||
| ユーザー登録のリンクをクリックするとユーザー登録ページを表示する | 5 | |||
| ユーザー一覧のリンクをクリックするとユーザー一覧ページを表示する | 5 | |||
| 全ユーザーの投稿を一覧表示する。日時・投稿者の表示名・本文を表示する。 | 5 | |||
| 投稿した日時の表示を「yy年mm月dd日hh:mm」にする。 | 5 | |||
| CSSを使って文字色や背景色、ボーダーなどを変更してページを装飾する。 | 5 | |||
| CSSを使って投稿日時の文字を小さくする。 | 5 | |||
| ユーザー登録ページ URL: /register |
ログイン名と表示名を入力できるフォームと登録ボタンを表示する | 5 | ||
| 登録ボタンを押すとユーザーが登録できる | 5 | |||
| CSSを使って文字色や背景色、ボーダーなどを変更してページを装飾する。 | 5 | |||
| ユーザー一覧ページ URL: /user/list |
登録済みユーザーを表示名で一覧表示する | 5 | ||
| 表示名が各ユーザーページへのリンクになっている | 5 | |||
| 表示名のリンクをクリックするとそのユーザーページに移動する | 5 | |||
| ユーザーページ URL: /user/{id} |
ユーザーの表示名と投稿フォームと送信ボタンを表示する | 5 | ||
| 投稿フォームにテキストを入力すると投稿がデータベースに保存される | 5 | |||
| そのユーザーの投稿を一覧表示する。日時と本文を表示する。 | 5 | |||
| 投稿した日時の表示を「yy年mm月dd日hh:mm」にする。 | 5 | |||
| CSSを使って投稿日時の文字を小さくする。 | 5 | |||
| CSSを使って文字色や背景色、ボーダーなどを変更してページを装飾する。 | 5 | |||
| CSSを使って投稿を入力するtextareaのサイズを大きくする。 | 5 | |||
| JavaScriptを使って入力中の投稿の文字数をtextareaの下に表示する。 | 5 | |||
| ユーザーの画像 | ユーザー登録ページでユーザーの画像のURLも登録できるようにする | 5 | ||
| ユーザー登録ページで画像URLを入力したらプレビューを表示する。 | 5 | |||
| トップページで名前の左にユーザーの画像を表示する。 | 5 | |||
| ユーザー一覧ページで名前の左にユーザーの画像を表示する。 | 5 | |||
| ユーザーページで名前の左にユーザーの画像を表示する。 | 5 | |||
| 投稿のレイアウト | トップページの投稿のレイアウトを以下のようにする。
|
5 | ||
ユーザーページの投稿のレイアウトを以下のようにする。
|
5 |
提出用ファイルの作成方法
プロジェクト「MySNS」を右クリックし、[実行]-[maven install]を選択する。
コンソールに「BUILD SUCCESS」と表示されれば作成に成功。
target フォルダの下に MySNS-0.0.1-SNAPSHOT.jar ファイルが作成される。

提出ファイルの動作確認方法
- EclipseでMySNSを動かしていたら終了させる。
- コマンドプロンプトを起動する。
- コマンドプロンプトで「cd 」と入力する。
- Eclipseのtargetをドラッグしてコマンドプロンプト上でドロップする。
- Enterでtargetフォルダに移動する。
- コマンドプロンプトで「java -jar MySNS-0.0.1-SNAPSHOT.jar」と入力してEnterする。
- コマンドプロンプトにSpringのロゴが表示され、jp.MySnsApplication : Started MySnsApplication in x.xxx second のメッセージがあれば起動に成功した。
- localhost:8080にアクセスして提出用アプリが動作することを確認する。
- できているはずの箇所がきちんと動いているか再確認する。
提出方法
提出フォルダの「システム開発実習」に学籍番号のフォルダを作成し、その中に MySNS-0.0.1-SNAPSHOT.jar をコピーする。
提出期限
2023年1月11日
