ラベル Spring MVC の投稿を表示しています。 すべての投稿を表示
ラベル Spring MVC の投稿を表示しています。 すべての投稿を表示

2015年12月2日水曜日

SpringでUTF8エンコードで表示されない問題の解決方法

Spring MVCで文字エンコーディングがUTF8で表示されないので苦戦したが、どうやらエンコードで使っていたフィルターの順序が問題だったようなので、1番目に設定したらエンコード問題がなくなった。

 <filter>
     <filter-name>EncodingFilter</filter-name>
     <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
     <init-param>
         <param-name>encoding</param-name>
         <param-value>UTF-8</param-value>
     </init-param>
     <init-param>
         <param-name>forceEncoding</param-name>
         <param-value>true</param-value>
     </init-param>
 </filter>

http://stackoverflow.com/questions/16029269/utf-8-encoding-with-form-post-and-spring-controller

2015年5月15日金曜日

Spring MVCでファイルアップロードのやり方

Spring MVCでファイルアップロードのやり方は、必要最低限以下の設定でできる。

1. POMにApache Commons FileUploadとIOを付け足す

 <!-- Apache Commons FileUpload --> 
 <dependency>
  <groupId>commons-fileupload</groupId>
  <artifactId>commons-fileupload</artifactId>
  <version>1.3.1</version>
 </dependency>
 
 <!-- Apache Commons IO --> 
 <dependency>
  <groupId>commons-io</groupId>
  <artifactId>commons-io</artifactId>
  <version>2.4</version>
 </dependency>
2.JSPのformタグ

<form method="POST" action="uploadFile" enctype="multipart/form-data">
  File to upload: <input type="file" name="file"><br /> 
  Name: <input type="text" name="name"><br /> <br /> 
  <input type="submit" value="Upload">
</form>
3.CommonsMultipartResolverをSpringの設定ファイルに付け足す

 <beans:bean id="multipartResolver"
  class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
   <!-- setting maximum upload size -->
  <beans:property name="maxUploadSize" value="100000" />

 </beans:bean>
4.コントローラーのインターフェース

@RequestMapping(value = "/uploadFile", method = RequestMethod.POST)
 public @ResponseBody
 String uploadFileHandler(@RequestParam("name") String name,
   @RequestParam("file") MultipartFile file)


参考
http://www.journaldev.com/2573/spring-mvc-file-upload-example-tutorial-single-and-multiple-files

2015年3月20日金曜日

Spring MVC 3.1ではRedirectAttributesが便利

Spring MVC 3.1ではリダイレクト先のページに値を受け渡しするのにRedirectAttributesが使えるので便利。


redirectAttributes.addFlashAttribute("key", value);

そしてリダイレクトするには、


return "redirect:someView";

http://www.tikalk.com/redirectattributes-new-feature-spring-mvc-31/

2014年11月7日金曜日

MavenでWeb Applicationプロジェクトの作成方法

1.mvnコマンドで以下をEclipseのworkspaceで実行

$ mvn archetype:generate -DgroupId=com.test
-DartifactId=TestApp
-DarchetypeArtifactId=maven-archetype-webapp
-DinteractiveMode=false

2.WTPプロジェクトに変換

$ mvn eclipse:eclipse -Dwtpversion=2.0

3.pom.xml、web.xmlを自分用に編集していく

参考リンク
http://www.mkyong.com/maven/how-to-create-a-web-application-project-with-maven/


Spring MVCでreCaptchaを使うには?

1.GoogleでreCaptchを使用するのに必要なプライベートキー、パブリックキーを取得。

http://www.google.com/recaptcha


2.pom.xmlに追加。

<dependency>
 <groupId>net.tanesha.recaptcha4j<groupId>
     <artifactId>recaptcha4j<artifactId>
   <version>0.0.7<version>
<dependency>

3.JSPでタグを追加。

<tags:captcha privateKey='XXXX' publicKey='YYYY'><tags:captcha>

4.コントローラー(サーブレット)でのパラメータと認証。

@RequestMapping(value='', method=RequestMethod.POST)
 public String submitForm(@ModelAttribute('userInfo') UserInfo userInfo, @RequestParam('recaptcha_challenge_field') String challangeField, @RequestParam('recaptcha_response_field') String responseField, ServletRequest servletRequest) {
 String remoteAddress = servletRequest.getRemoteAddr();

 ReCaptchaResponse reCaptchaResponse = this.reCaptcha.checkAnswer(remoteAddress, challangeField, responseField);

 if(reCaptchaResponse.isValid()) {
  return 'success';
 } else {
  return 'fail'; 
 }
}

参考リンク
http://www.javacodegeeks.com/2012/11/use-recaptcha-in-a-spring-mvc-web-application.html
https://code.google.com/p/recaptcha/wiki/HowToSetUpRecaptcha#Java/JSP

2013年10月30日水曜日

Springでページのエンコーディング設定方法

<filter>  
    <filter-name>encodingFilter</filter-name>  
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>  
    <init-param>  
       <param-name>encoding</param-name>  
       <param-value>UTF-8</param-value>  
    </init-param>  
    <init-param>  
       <param-name>forceEncoding</param-name>  
       <param-value>true</param-value>  
    </init-param>  

</filter>

をweb.xmlに設定すれば、エンコーディングはUTF-8で出力。

http://stackoverflow.com/questions/5928046/spring-mvc-utf-8-encoding

2013年10月25日金曜日

Spring 3.xでJSON型を返す@Controllerのクラスを実装する時に気をつけたい事

Spring 3.xで@Controllerのクラスを実装して、JSON型を返すRESTfulなサービスを作る時に気をつけたい事がある。ここは少しハマった。。。

まず仕様の抜粋から、

Underneath the covers, Spring MVC delegates to a HttpMessageConverter to perform the serialization. In this case, Spring MVC invokes a MappingJacksonHttpMessageConverter built on the Jackson JSON processor. This implementation is enabled automatically when you use the mvc:annotation-driven configuration element with Jackson present in your classpath.

つまり、Spring MVCはJSONの場合、JavaオブジェクトのシリアライズをMappingJacksonHttpMessageConverterに委譲する。その為には、applicationContext.xmlで<mvc:annotation-driven/>を追加しないと委譲が行われない。そして、これはメソッドの戻り値が@ResponseBodyで指定される。

そして、ハマったところ。。。

JSONにマップするクラスがgetter/setterを持っていない場合、HTTP 406のエラーコードが返されてうまくいかない。つまりJavaBeansでなければならないよう。おそらくMessageConverterの仕様でしょうが、ここがブラックボックスで分からない。。(?)

ということで、ここには気をつけましょう。


  1. <mvc:annotation-driven/>
  2. jackson-mapper-asl.jar, jackson-xc.jarが必要
  3. @ResponseBody
  4. JavaBeans(?)パターンの実装 -------> 調査中


http://spring.io/blog/2010/01/25/ajax-simplifications-in-spring-3-0/

2013年10月22日火曜日

applicationContext.xmlとhibernate.cfg.xmlとSessionBeanでちょっと手こずった

Spring MVC 3とHibernate 4を設定してる時に、設定ファイルの分割などやちょっとハマったところをメモ。

※この辺のフレームワークはメジャーバージョンアップしたりすると、やり方が変わったりパッケージ名も変わるので厄介。そしてドキュメントも散財していて分からん。。。

まず設定ファイルの分割。Hibernate 3の時は、

applicationContext.xml
hibernate.cfg.xml
jdbc.properties

と分割してたけど、

applicationContext.xml
database1.cfg.xml
database2.cfg.xml
..
..
という構成に分割。jdbc.propertiesは捨てて、なるべくHibernateのコンフィグファイルに書いてやろうと思いました。そして、データベース(スキーマ)毎にSessionFactoryを分割。

※jdbc.propertiesまであると、なんかコンフィグファイルが多く感じで分かりくいから捨てた。


    <bean id="sessionFactory1"
        class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name="configLocation">
            <value>/WEB-INF/database1.cfg.xml</value>
        </property>
    </bean>

そしてハマったところ。。。

Hibernate3とHibernate4はパッケージ名が違った。。。気が付かなかった。。。泣ける。。

org.springframework.orm.hibernate3.LocalSessionFactoryBean
じゃなくって、
org.springframework.orm.hibernate4.LocalSessionFactoryBean