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年12月2日水曜日
2015年5月15日金曜日
Spring MVCでファイルアップロードのやり方
Spring MVCでファイルアップロードのやり方は、必要最低限以下の設定でできる。
1. POMにApache Commons FileUploadとIOを付け足す
参考
http://www.journaldev.com/2573/spring-mvc-file-upload-example-tutorial-single-and-multiple-files
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が使えるので便利。
そしてリダイレクトするには、
http://www.tikalk.com/redirectattributes-new-feature-spring-mvc-31/
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/
$ 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/
ラベル:
Eclipse WTP,
Maven,
Spring MVC
Spring MVCでreCaptchaを使うには?
1.GoogleでreCaptchを使用するのに必要なプライベートキー、パブリックキーを取得。
http://www.google.com/recaptcha
2.pom.xmlに追加。
3.JSPでタグを追加。
4.コントローラー(サーブレット)でのパラメータと認証。
参考リンク
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
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
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の仕様でしょうが、ここがブラックボックスで分からない。。(?)
ということで、ここには気をつけましょう。
http://spring.io/blog/2010/01/25/ajax-simplifications-in-spring-3-0/
まず仕様の抜粋から、
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の仕様でしょうが、ここがブラックボックスで分からない。。(?)
ということで、ここには気をつけましょう。
- <mvc:annotation-driven/>
- jackson-mapper-asl.jar, jackson-xc.jarが必要
- @ResponseBody
- 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
登録:
投稿 (Atom)