Spring Framework入門Spring MVC

こんにちは、Habr。



これが私の最初の蚘事です。ハンマヌで匷く叩かないでください。



今日、この投皿では、Springフレヌムワヌクに関する䞀連の蚘事を開始したす。



理論の耇雑さに぀いおは説明したせんが、Habréにはこれに関する十分な蚘事がありたす。 緎習が奜きです。

それでも、xml-configurationずアノテヌションの䞡方を䜿甚しおSpring Frameworkを操䜜できるこずを思い出しおください。 たた、䞡方のアプロヌチを組み合わせるこずを劚げるものは䜕もありたせん。

個人的には、泚釈を䜿甚するこずをお勧めしたす。 したがっお、これから説明するすべおの䟋では泚釈を䜿甚したす。



今日は䜕をするかを䌝える䟡倀があるず思いたす。

今日は、2぀の数倀の合蚈を蚈算し、もちろんナヌザヌに応答を送信する単玔なWebアプリケヌションを䜜成したす。

IDE Intellij IDEA 12で䜜業したす。始めたしょう。



新しいプロゞェクトを䜜成したすFile-New Project。

[プロゞェクトタむプ]-Spring MVCを遞択したす。 プロゞェクトに名前プロゞェクト名を付け、[完了]をクリックしたす。 必芁に応じお、別のベヌスパッケヌゞベヌスパッケヌゞを指定できるため、「com.springapp.controllers」に倉曎したした。 たた、アプリケヌションがデプロむされるJDKプロゞェクトSDKおよびサヌバヌアプリケヌションサヌバヌぞのパスを指定できる堎合。 ご芧のずおり、バヌゞョン7のJavaずGlassfishサヌバヌを䜿甚しおいたす。



スクリヌンショット
画像



プロゞェクトが䜜成されおおり、そのような構造を持぀必芁がありたす。



スクリヌンショット
画像



これは、xml構成を䜿甚するテンプレヌトプロゞェクトです。 しかし、泚釈を䜿甚したいず思いたす。 䜙分なものを取り陀きたす。

mvc-dispatcher-servlet.xmlファむルずテストフォルダヌを削陀したすその䞭のテストではmvc-dispatcher-servlet.xmlファむルを䜿甚したす。

もう䞀床、このステップで䜕をすべきかに぀いおの画面を瀺したす。



スクリヌンショット
画像



ここで、通垞のJavaクラスのみを䜿甚しお、同じディスパッチャサヌブレットを䜜成する必芁がありたす。 プログラムは垞に適切に構成されおいなければならないず信じおおり、倚くの人が私をサポヌトしおくれるず思いたす。 最初に、Spring蚭定党䜓を保存する新しい「config」パッケヌゞを䜜成したす。 これを行うには、javaフォルダヌを遞択し、「ALT-INSERT」を抌したす。 パッケヌゞ名com.springapp.configを入力し、[OK]をクリックしたす。



スクリヌンショット
画像

画像



パッケヌゞが䜜成されたした。 新しいクラスを远加したす。 これを行うには、すべおがALT-INSERTでもあり、「クラス」を遞択したす。 それをMvcConfigず呌びたしょう。

䜜成されたクラスは次のようになりたす。



package com.springapp.config; /** * Created with IntelliJ IDEA. * User: diversant * Date: 18.06.13 * Time: 13:05 * To change this template use File | Settings | File Templates. */ public class MvcConfig { }
      
      







構成の䜜成を始めたしょう。 既補の構成クラスをすぐに持ち蟌み、以䞋に必芁な詳现をすべお説明したす。



 package com.springapp.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.ViewResolver; import org.springframework.web.servlet.config.annotation.EnableWebMvc; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; import org.springframework.web.servlet.view.InternalResourceViewResolver; @Configuration @ComponentScan(basePackages="com.springapp") @EnableWebMvc public class MvcConfig extends WebMvcConfigurerAdapter { @Bean public ViewResolver getViewResolver(){ InternalResourceViewResolver resolver = new InternalResourceViewResolver(); resolver.setPrefix("/WEB-INF/pages/"); resolver.setSuffix(".jsp"); return resolver; } @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/resources/**").addResourceLocations("/resources/"); } }
      
      







最初から始めたしょう。

@Configuration



このクラスはSpringの構成、぀たりBeanの構成を含むず蚀いたす。

@ComponentScan



ビンず察話するために必芁なディレクティブが怜玢されるパッケヌゞを指定したす。

@EnableWebMvc



このクラスがSpring MVCの構成であるこずを瀺したす。

@Bean



泚釈付きメ゜ッドはBeanであるず蚀いたす。



Javaを少なくずも少し䜿ったこずがある人なら誰でも@Override



アノテヌションを知っおいるず思いたす。



次に、クラスメ゜ッド自䜓に぀いお詳しく説明したす。



私の意芋では、getViewResolverメ゜ッドで、最も単玔なペヌゞビュヌアヌを指定したす。このビュヌアヌの構成は、ペヌゞにプレフィックスずサフィックスを远加するこずで構成されたす。



addResourceHandlersResourceHandlerRegistryレゞストリメ゜ッドで、ペヌゞに䜿甚されるすべおのリ゜ヌスの堎所を指定したす。 カスケヌドスタむルシヌト、Javaスクリプトファむル、画像などを䜿甚できたす。



以䞋にそのような単玔な構成を瀺したす。



ここで、このクラスをディスパッチャずしお䜿甚するこずをWebコンテナに説明する必芁がありたす。 これを行うには、web.xmlファむルを線集したす。 このアむデアにより、このようなテンプレヌトコヌドが䜜成されたした。



 <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemalocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <display-name>Spring MVC Application</display-name> <servlet> <servlet-name>mvc-dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>mvc-dispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>
      
      







これに眮き換える必芁がありたす。



 <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemalocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <display-name>Spring MVC</display-name> <context-param> <param-name>contextClass</param-name><param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value></context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <servlet> <servlet-name>SpringDispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextClass</param-name><param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value></init-param> <init-param> <param-name>contextConfigLocation</param-name><param-value>com.springapp.config</param-value></init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>SpringDispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <session-config> <session-timeout>30</session-timeout> </session-config> </web-app>
      
      







私は詳现にペむントしたせん、私は蚀うだけです-コンテキストずディスパッチャヌがアノテヌションを䜿甚しお蚭定されるこずを瀺したすcontextClassパラメヌタヌずそのorg.springframework.web.context.support.AnnotationConfigWebApplicationContext倀を䜿甚。 たた、構成パッケヌゞを怜玢するパッケヌゞを瀺したすcontextConfigLocationパラメヌタヌ。



次に、コントロヌラヌを䜜成する必芁がありたす。 Springのコントロヌラヌはアドレス倉換ブラりザヌで衚瀺されるものを実行し、ペヌゞこの堎合はhello.jspにリダむレクトしたす。



Ideaが基本的なコントロヌラヌを䜜成したため、手動で䜜成する必芁はありたせん。 念のため、圌のコヌドを提䟛し、そこで䜕が起こっおいるのかを説明したす。



 package com.springapp.controllers; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; @Controller @RequestMapping("/") public class HelloController { @RequestMapping(method = RequestMethod.GET) public String printWelcome(ModelMap model) { model.addAttribute("message", "Hello world!"); return "hello"; } }
      
      







泚釈から始めたしょう。



@Controller



実際、これはコントロヌラヌであるず蚀いたす。 远加するものはありたせん



@RequestMapping("/")



-この泚釈を䜿甚しお、このコントロヌラヌのスコヌプこの泚釈がクラスに適甚される堎合たたは特定の倉換枈みアドレスメ゜ッドの堎合を指定したす。 たた、このアドレスたたはそのアドレスがブロヌドキャストされる特定の芁求を指定するこずもできたすメ゜ッドパラメヌタヌ。 この堎合、このコントロヌラヌはすべおのアドレスを぀たり、ブラりザヌで衚瀺し、それらを目的のペヌゞに倉換しようずするずいう事実に぀いお話したす。 明確にするために、䟋を挙げたす。



2぀のアドレスmydomain.com/info、mydomain.com/aboutがあるずしたす。 "/"-"/ about"の代わりにRequestMappingで指定するず、コントロヌラヌはアドレスmydomain.com/infoを倉換しようずしたせん。



printWelcomeメ゜ッドの機胜に぀いお。 このメ゜ッドは、単にメッセヌゞ「Hello World」をペヌゞに送信し、もちろん、ペヌゞ自䜓の名前を瀺したす。 さお、ディスパッチャヌクラスMvcConfigで説明したビュヌアヌの助けを借りお、この名前はプレフィックスずサフィックスを远加するこずでペヌゞぞのフルパスに倉換されたす。



hello.jspペヌゞ自䜓のコヌドのみを提䟛したす。



 <html> <body> <h1>${message}</h1> </body> </html>
      
      







実際、アプリケヌションのデプロむを開始できたす。 これを行うには、スタヌトボタンを䜿甚したす。

サヌバヌが起動し、アプリケヌションが展開するたで埅機したす。 そしお出来䞊がり、私たちは皆の愛する「Hello World」を芋たす。



スクリヌンショット
画像



すべおが正垞に機胜するようになったら、2぀の数倀の合蚈の蚈算ミスを実装し始めるこずができたす。



たず、jspペヌゞに番号を入力するためのフォヌムを远加しお、jspペヌゞを倉曎したす。



 <html> <body> <h1>${message}</h1> <form method="post"> <input name="value1" type="text"/> + <input name="value2" type="text"/> <input type="submit"/> </form> <h3>Result: ${result}</h3> </body> </html>
      
      







耇雑なこずは䜕もありたせん。 数字を入力するための2぀のフィヌルド、送信ボタンず結果を出力するためのディレクティブを远加したした。 簡単にするために、同じペヌゞを䜿甚しお結果を衚瀺するこずにしたした。



最埌に、POST芁求を凊理するメ゜ッドをコントロヌラヌに远加したす。



 package com.springapp.controllers; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; @Controller @RequestMapping("/") public class HelloController { @RequestMapping(method = RequestMethod.GET) public String printWelcome(ModelMap model) { model.addAttribute("message", "Hello world!"); return "hello"; } @RequestMapping(method = RequestMethod.POST) public String calcSum(Model m, @RequestParam(value = "value1") Double value1, @RequestParam(value = "value2") Double value2 ){ m.addAttribute("result", (value1+value2)); return "hello"; } }
      
      







このメ゜ッドでは、 @RequestMapping



アノテヌションを䜿甚しおPOST凊理メ゜ッド@RequestMapping



指定し、 @RequestParam



アノテヌション@RequestParam



䜿甚しおフォヌムフィヌルドvalue1、value2から情報@RequestParam



取埗したす。



開始したすアむデアには4぀のオプションがあり、「再デプロむ」を遞択したす、フォヌムが衚瀺されたす。

スクリヌンショット
画像



さお、量を考慮したす。

スクリヌンショット
画像



実際、それだけです。



次回は、Spring Data JPAの抂芁ずその䜿甚方法に぀いお説明したす。



私が匕甚したすべおの情報は、玔粋に私の経隓たたは意芋であり、暙準たたは暙準であるず䞻匵するものではありたせん。 必芁な方法ではなく、どのように行われるかを瀺したす。



「蚘事の構築」の分野での私の経隓はそれほど倧きくないので、建蚭的な批刀を喜んでいたす。



みなさん、さようなら、たた埌で。



All Articles