servlet-context.xmlの解説

#はじめに
DreamHanksの松下です。今回はservlet-context.xmlの解説をしていきます。

[連載記事まとめ](https://qiita.com/DreamHanks/items/7df703a509ef22f64d2c)



#contextファイルとは
Springフレームワークを使ってアプリ開発をする際のプロジェクトの構成ファイルです。

ビルドするときにcontextファイルの中のbeanオブジェクトを使い
そのオブジェクト内に設定されているvalue値から、何かと何かを参照できるようにする（繋げる）役割があります。

具体例としては以下のものが挙げられます。
・データベースの参照・接続
・Serviceクラスからdaoのインターフェースメソッドを呼んだ際に
　Mapperクラスの記述されているsql文を参照する。
・ControllerクラスとJSPファイルの参照


#root-context.xmlとservlet-context.xmlの違いとは
root-context.xmlはビジネスロジックに関連するものを定義するためのものです。
例）データベースの参照・接続にかかわるもの

servlet-context.xmlはViewに関連するものを定義するためのものです。
例）ControllerクラスとJSPファイルの参照

>ビジネスロジックとは
 　計算ロジックやDBとのやり取りをするソースコードです。
>>実際に開発をするときはServiceクラスというものを用意し、そこに計算ロジックやDBとのやり取りをするメソッドを共通部品のように作成します。
>>そしてそれらをControllerクラスで呼び出すというようにView側とビジネスロジック側で分けて開発していきます

#サーブレットとは
クライアントからリクエストを受けて、それを動的にレスポンスするもの

SpringMVCモデルでサーブレットの役割を行っているのはControllerです。


#servlet-context.xmlの詳しい解説
```php
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:beans="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd
		http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">

	<!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure -->

	<!-- Enables the Spring MVC @Controller programming model -->
	<annotation-driven />

	<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
	<resources mapping="/resources/**" location="/resources/" />

	<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
	<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<beans:property name="prefix" value="/WEB-INF/views/" />
		<beans:property name="suffix" value=".jsp" />
	</beans:bean>

	<context:component-scan base-package="com.dreamhanks.workmanager" />

</beans:beans>

```

##サーバーにスキャン（認識）させる
```php
　　<context:component-scan base-package="com.dreamhanks.workmanager" />
```

上記のソースコードは「com.dreamhanks」以下のソースコードをサーバーにスキャン（認識）させるための記述です。

####「com.dreamhanks」以下のソースコードに何があるのか？
Controllerクラスがあります。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/708649/6e7c6090-c577-a360-ba23-c8bd07898ecb.png)




##リソースの位置を特定する

```php
	<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
	<resources mapping="/resources/**" location="/resources/" />
```

css,javascrypt,font,imgなど、viewと関連するリソースをどこにあるかどうかを特定するための記述です。

##JSPの接頭語、接尾語を省略する
```php
	<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
	<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<beans:property name="prefix" value="/WEB-INF/views/" />
		<beans:property name="suffix" value=".jsp" />
	</beans:bean>
```

Controllerで下記のようにJSPをreturnするときに、パスやjspの拡張子を省くことができる


```php
	@RequestMapping(value = "/login")
	public String initLogin(LoginForm loginForm, Model model) {

		//		model.addAttribute("loginForm", new LoginForm());

		return "login";
	}
```

#最後に
最新内容については下記のリンク（DreamHanksのブログ）で確認することができます。
[DreamHanksブログ（Javaウェブアプリ開発）](http://blog.dreamhanks.com/java%e3%82%a6%e3%82%a7%e3%83%96%e3%82%a2%e3%83%97%e3%83%aa%e9%96%8b%e7%99%ba/)