元情報系学生なプログラマの備忘録

情報系学生だったプログラマが現場で学んだこと感じたことを書く備忘録

springでWebアプリを作るためのメモ

javaでWebアプリを作るならばspringフレームワークは鉄板であるが、作り始める状態までの手順をここにメモとして記す。

 

  1. ライブラリを準備する
  2. 開発プロジェクトを準備する
  3. MVCの各種リソースを準備する

 

ライブラリを準備する

 eclipseの新規プロジェクトで、Mavenプロジェクトを作成する。

pom.xmlは下記のようなものを書く。サーバとクライアント(ブラウザ)のやり取りにJSONをAjaxを使えるようにjacksonなども入れる。

<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.7.4</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.7.4</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.2.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>9.4-1206-jdbc42</version>
</dependency>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.1.0.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.0.1.Final</version>
</dependency>
<dependency>
<groupId>javax.el</groupId>
<artifactId>el-api</artifactId>
<version>2.2</version>
</dependency>
<dependency>
<groupId>org.glassfish.web</groupId>
<artifactId>el-impl</artifactId>
<version>2.2</version>
</dependency>

 

 追加後は、実行→Maven Installで実行。

実行結果には以下のようなものが出力される。

[INFO] Installing C:\Users\s06068ss\Desktop\pleiades-4.8.0-java-win-64bit_20180923\pleiades\workspace\telbooklib2\target\telbooklib2-0.0.1-SNAPSHOT.jar to C:\Users\s06068ss\.m2\repository\test\telbooklib2\0.0.1-SNAPSHOT\telbooklib2-0.0.1-SNAPSHOT.jar


[INFO] Installing C:\Users\s06068ss\Desktop\pleiades-4.8.0-java-win-64bit_20180923\pleiades\workspace\telbooklib2\pom.xml to C:\Users\s06068ss\.m2\repository\test\telbooklib2\0.0.1-SNAPSHOT\telbooklib2-0.0.1-SNAPSHOT.pom

 

 

開発プロジェクトを準備する

tomcatを想定しているので、WEBサーバ、APサーバとしてtomcatをインストールする。

eclipseの新規プロジェクトで、動的Webプロジェクトを作成する。

プロパティ→Javaのビルドパスから、ライブラリー(L)に、MavenでInstallしたJarファイルを追加する。

同じくプロパティからデプロイメント・アセンブリーにライブラリを追加。(Javaビルドパスエントリー)

 

web.xmlを設定する。ここではWebサービスを1つかくだけなので、

とりわけ必須のものはない。2つ目以降があれば「servlet-mapping」や「servlet」を見直す。

<?xml version="1.0" encoding="UTF-8"?>
<web-app
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"
version="2.5">

<display-name>hogehoge</display-name>

<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>spring-dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring-dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app> 

 

spring-dispatcher-servlet.xmlを作成する。

DBの接続先もこのファイルに含まれる。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
<context:component-scan base-package="jp.co.example.controller" />
<context:component-scan base-package="jp.co.example.dao" />
<context:component-scan base-package="jp.co.example.service" />
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="org.postgresql.Driver" />
<property name="url" value="jdbc:postgresql://localhost:5432/test>
<property name="username" value="test>
<property name="password" value="test>
</bean>
<bean class="org.springframework.jdbc.core.JdbcTemplate">
<constructor-arg ref="dataSource" />
</bean>
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver" >
<property name="prefix">
<value>/WEB-INF/views/</value>
</property>
<property name="suffix">
<value>.jsp</value>
</property>
</bean>
<mvc:resources mapping="/resources/**" location="/resources/" />
<mvc:annotation-driven />
</beans>

 

javaのsrc配下に、context:component-scanのパッケージを作成する。

→jp.co.example・・・を作っている。

 

MVCの各種リソースを準備する

Controllerは下記。URLにhttp://localhost:/プロジェクト名/でアクセスすると

@RequestMapping(value = "/", method = RequestMethod.GET)に指定されたメソッドが実行される。

 @Controller
public class TelBookController {
@Autowired
private TelBookService telBookService;

@RequestMapping(value = "/", method = RequestMethod.GET)
public String show() {
// jspのファイル名
return "telbookIndex";
}

@RequestMapping(value = "/find", method = RequestMethod.POST)
@ResponseBody
public TelBook find(@RequestParam("telId") String id, @RequestParam("name") String name, @RequestParam("number") String number) {
List<TelBook> list = this.telBookService.find(new TelBook() {
{setName(name);}
{setNumber(number);}
{setTelId(id);}
});
TelBook
result;
result = (list != null) ? list.toArray(new TelBook[list.size()]) : null;
return result;
}

@RequestMapping(value = "/regist", method = RequestMethod.POST)
@ResponseBody
public String regist(@RequestParam("telId") String id, @RequestParam("name") String name, @RequestParam("number") String number) {
try {
this.telBookService.regist(new TelBook() {
{setName(name);}
{setNumber(number);}
{setTelId(id);}
});
}catch( Exception e ) {
return e.getMessage();
}
return "{}";
}
@RequestMapping(value = "/delete", method = RequestMethod.POST)
@ResponseBody
public String delete(@RequestParam("telId") String id, @RequestParam("name") String name) {

try {
this.telBookService.delete(id, name);
}catch( Exception e ) {
return e.getMessage();
}
return "{}";
}
}

 

 

\WebContent\WEB-INF\views\にtelbookIndex.jspを作成する。

※”// jspのファイル名”と書かれたファイル

<%@page import="jp.co.gsdltd.controller.TelBookController"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<script type="text/javascript" src="<c:url value="/resources/js/jquery/jquery-ui.js"/>"></script>
<script type="text/javascript" src="<c:url value="/resources/js/jquery/external/jquery/jquery.js"/>"></script>
<script type="text/javascript" src="<c:url value="/resources/js/telbook.js"/>"></script>
<title>電話帳</title>
</head>
<body>
(略)
</body>
</html>

 

モデルは、Service→Daoのように作っていく。

Service

@Service
public class TelBookService {
@Autowired
private TelBookDao telBookDao;

以下略

 

Dao(実装クラス)(implements元のインターフェイスを作る)

@Repository
public class TelBookDaoImpl implements TelBookDao {
@Autowired
private JdbcTemplate jdbcTemplate;
@Override
public List<TelBook> findTelBook(TelBook cond) {

}
@Override
public int delete(String id, String name) {

}
@Override
public int regist(TelBook cond) {

}
}