Spring MVC注釈開発


Spring MVC注解開発における常用ラベルは、以下の表のとおりです.
 
 
番号付け
注釈
説明
位置
コメント
1
@Controller
クラスをSpring Beanに変えます.
クラス
現段階@Controller、@Service及び@Repositoryと@Component注解の役割は等価です.
2
@Request Mapping
要求マップ
クラス、方法
カテゴリーに表示するという意味では、Controllerインターフェースの表示方法は、拡張Springプリ定義Controllerを意味します.
3
@Request Param
参照バインディングURL
参列する
URLパラメータとメソッドのバインディングルールを指定します.
4
@Session Attributes
セッション範囲のプロパティを設定します.
クラス
例えば:@Session Attributes(user)は、ModelMapのuser属性をSessionの範囲に追加します.
5
@InitBinder
Controlle rクラスのカスタム属性エディタを登録します.
方法
@InitBinder注釈の方法は、Spring MVCフレームが登録属性エディタのWebData Binderオブジェクトを転送するために、WebData Binderタイプのエントリを持つ必要があります.
6
@ModelAttribute
参照データを準備する/ModelMap属性を参照にバインドする
方法、アクセス
表示方法は、参照データを参照先に表示する用意があります.ModelMapの属性を要求処理方法の入力に結び付けます.
 
また、Controllerにおけるメソッドの入力タイプを見てみます.
 
 
番号付け
要求処理方法の入力のオプションタイプ
説明
1
Java基本データタイプとString
デフォルトでは、名前が合うようにURLパラメータに結びつけられます.@Request Param注解によってデフォルトのバインディングルールを変更することができます.
2
request/reponse/session
Servlet APIであってもよく、Portlet APIに対応するオブジェクトであってもよく、Springは、ServletおよびPortlet容器の対応するオブジェクトにそれらを結びつけることができる.
3
org.springframe ework.web.com ntxt.request.WebRequest
内部にはrequestオブジェクトが含まれています.
4
java.io.InputStream/java.io.Reader
これを利用してrequestの内容にアクセスできます.
5
java.io.OutputStream/java.io.Writer
この方法でレスポンスの内容を操作できます.
6
任意の表記は@Request Paramの注釈が入っています.
@Request Paramの注釈が付けられているエントリは、特定のrequestパラメータに結び付けられます.
7
java.util.Map/org.springframe ebook.ui.ModelMap
Spring MVCフレーム内の各要求によって作成された潜在的なモデルオブジェクトを結びつけており、それらはJSPなどのWebビューオブジェクトにアクセスできる.
8
コマンド/フォームオブジェクト(注:HTTP GETを使用して送信されるURLパラメータをバインドするオブジェクトをコマンドオブジェクトと呼び、HTTP POSTを用いて送信されるURLパラメータをバインドするオブジェクトをフォームオブジェクトと呼びます.)
これらの属性は、名称が一致する規則でURLパラメータに結び付けられ、タイプの変換が完了する.タイプ変換のルールは@InitBinderの注釈またはHandlerAdapterの構成によって調整できます.
9
org.springframe ework.validations.Errrors/org.springframe ebork.validations.BindingResoult
属性リスト内のコマンド/フォームオブジェクトの検証結果として、コマンド/フォームオブジェクトの後に続くパラメータが必要です.
10
rg.spring frame ework.web.bind.support.Session Storts
このタイプのstatusオブジェクト明示的終了フォームの処理によって、トリガsessionがその中の@Session Attributesによって定義された属性をクリアすることに相当する.
 
Controllerでの方法の戻りのタイプをもう一度見てみます.
 
番号付け
要求処理方法の入力のオプションタイプ
説明
1
void
この場合の論理ビュー名は、要求処理方法に対応するURLによって決定され、以下のような方法である:@Request Mapping('/welcome.do')public void welcome Handler(){}に対応する論理ビューの名前は「welcome」である.
2
String
この場合の論理ビュー名は戻り文字となります.  @Request Mapping(method=Request Method.GET)public String setupForm(@Request Param(「ownersId」)int ownerand,ModelMap model){      Owner owner=this.clinic.loadOwner;      model.addAttribute(owner);      return「owner Form」;  対応する論理ビューの名前は「owner Form」です.
3
org.springframe eweet.ui.ModelMap
戻るタイプがvoidであるように、論理ビュー名は、以下の例では、対応する要求のURLに決定される.  @Request Mapping("/vets.do")public ModelMap vets Handler(){      return new ModelMap(this.clinic.getVets);  対応する論理ビューの名前は「vets」で、戻ってきたModelMapは対応するモデルオブジェクトを要求するものとして、JSPビューページにアクセスできます.
4
org.springframe ewk.web.servlet.ModelAndView
もちろん伝統的なModelAndViewでもいいです.
 
具体的に使用するには、以下の通りLogin Controllerを参照してください.
 
 
package com.test.controller.anno;

import javax.servlet.ServletRequest;
import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.SessionAttributes;
import org.springframework.web.bind.support.SessionStatus;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.view.RedirectView;

import com.test.bean.User;
import com.test.validator.UserValidator;

@Controller
//    Spring Bean
@SessionAttributes({ "usersession","testSession" })
//  model       session 
public class LoginController {

 /**
  *             "CE"   ,     CE    Model ,   login  
  * 
  *          ,  Redirect  URL    model      
  * 
  * @param request
  * @param model
  * @return
  */
 @RequestMapping(value = "/login2.htm", params = { "CE" }, method = RequestMethod.GET)
 public String redirect(ServletRequest request, ModelMap model) {
  model.addAttribute("user", new User());
  String ce;
  try {
   ce = new String(request.getParameter("CE").getBytes("ISO-8859-1"),
     "utf8");
   model.addAttribute("CE", ce);
  } catch (Exception e) {
   e.printStackTrace();
  }

  return "login";
 }

 /**
  * 
  *     login.htm     
  * 
  *   login   User    (  ),           User        
  * 
  * @param request
  * @param model
  * @return
  */
 @RequestMapping(value = "/login2.htm", method = RequestMethod.GET)
 public String test(ServletRequest request, ModelMap model) {
  model.addAttribute("user", new User());
  return "login";
 }

 /**
  * 
  * @param session
  *            Http Session
  * @param user
  *                User,@ModelAttribute  user   model(request\session)
  * @param result
  *                  ,    user  
  * @param model
  *                
  * @param status
  *                @SessionAttributes   session     
  * @return
  */

 @RequestMapping(value = "login2.htm", method = RequestMethod.POST)
 public ModelAndView login(HttpSession session, ServletRequest request,
   @ModelAttribute("user") User user, BindingResult result,
   ModelMap model, SessionStatus status) {
  ModelAndView ret = new ModelAndView();
  //     ,  UserValidator       
  new UserValidator().validate(user, result);
  if (!result.hasErrors()) {//       ,        
   model.addAttribute("CE", "  ");
   ret.setView(new RedirectView("login.htm"));
  } else {
   ret.setViewName("login");
  }

  /*
   *   @SessionAttributes
   */

  //      
  String sessionValue = (String) session.getAttribute("testSession");
  System.out.println("sessionValue:" + sessionValue);
  //       (request  ),    @SessionAttributes   ,    session  
  model.addAttribute("testSession", "My_SessionValue");

  /*
   *   @SessionAttributes  
   */

  // status.setComplete();//      @SessionAttributes
  //    session (      ,  user     session)
  try {
   // request.setCharacterEncoding("utf8");//         Post  ,    filter
  } catch (Exception e) {
   e.printStackTrace();
  }
  return ret;
 }
}

 
 
 
web.xml設定
<?xml version="1.0" encoding="UTF-8"?>
<!--  tomcat5.5   ,    Servlet 2.4  (jstl1.1.jar,standard.jar)tomcat6       2.5 -->
<web-app version="2.5" 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">
 <display-name></display-name>

 <!--           -->
 <listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
 </listener>
 
 <!--   Spring   ,  POST     , GET           -->
 <filter>
  <filter-name>Set Character Encoding</filter-name>
  <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  <init-param>
   <param-name>encoding</param-name>
   <param-value>utf8</param-value>
  </init-param>
 </filter>
 <filter-mapping>
  <filter-name>Set Character Encoding</filter-name>
  <url-pattern>/*</url-pattern>
 </filter-mapping>

 <!--       ,    xml  ,  springapp-servlet.xml     ,DispatcherServlet         -->
 <context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>classpath:applicationContext.xml</param-value>
 </context-param>


 <!-- Spring MVC  Servlet,    WEB-INF/xxx-servlet.xml       ,   Spring MVC   -->
 <servlet>
  <servlet-name>springapp</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
 </servlet>
 <servlet-mapping>
  <servlet-name>springapp</servlet-name>
  <url-pattern>*.htm</url-pattern>
 </servlet-mapping>

 <!--   Srping        -->
 <jsp-config>
  <taglib>
   <taglib-uri>/spring</taglib-uri>
   <taglib-location>/WEB-INF/tld/spring-form.tld</taglib-location>
  </taglib>
 </jsp-config>

 <welcome-file-list>
  <welcome-file>index.jsp</welcome-file>
 </welcome-file-list>
</web-app>
 
 
Spring MVC関連のプロファイルを以下に示します.
springgapp-servlet.xml
<?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:p="http://www.springframework.org/schema/p"
 xmlns:context="http://www.springframework.org/schema/context"
 xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context-2.5.xsd">

 <!-- 1: web             ,   Bean             -->
 <context:component-scan base-package="com.zhang.controller.anno" />

 <!-- 2:  Spring MVC     ,       POJO    -->
 <bean
  class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />

 <!-- Spirng       apapter               ,  beanNameUrlMapping  annotation           
      :                        <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" 
  /> <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" 
  /> <bean class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter" 
  /> -->


 <!-- 3:          ,              -->
 <bean id="viewResolver"
  class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  <property name="viewClass">
   <value>org.springframework.web.servlet.view.JstlView</value>
  </property>
  <property name="prefix">
   <value>/WEB-INF/jsp/</value>
  </property>
  <property name="suffix">
   <value>.jsp</value>
  </property>
 </bean>

 <!--      ,      -->
 <bean id="messageSource"
  class="org.springframework.context.support.ResourceBundleMessageSource">
  <property name="basename">
   <value>messages</value>
  </property>
 </bean>
</beans>
 
ビューの一部ファイル:
include.jsp
<%@ page session="false"%>
<%@ page isELIgnored ="true" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jstl/fmt" %>

 

 
 
 
login.jsp
<%@ include file="/WEB-INF/jsp/include.jsp"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<%@ page contentType="text/html; charset=utf8"%>
<html>
 <head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <style type="text/css">
.error {
 color: red;
}
</style>
  <title>Login</title>
 </head>
 <body>
  <form:form method="post" commandName="user">
   <table width="95%" bgcolor="f8f8ff" border="0" cellspacing="0"
    cellpadding="5">
    <tr>
     <td align="left" width="30%">
      username:
      <form:input path="username" />
     </td>

     <td width="30%">
      <form:errors path="username" />
     </td>
    </tr>
    <tr>
     <td align="left" width="30%">
      password:
      <form:input path="password" />
     </td>
     <td width="30%">
      <form:errors path="password" />
     </td>
    </tr>
    <tr>
     <td>
      <form:errors path="validatorMessage" />
     </td>
    </tr>

   </table>
   <input type="submit" value="Execute">
  </form:form>
  <a href="<c:url value="hello.htm"/>">Home</a>
  <c:out value="${CE}"></c:out>
 </body>
</html>

 
版権所有@Robot_G