struts 2のvelocity統合


今のJAVAのフレームワークはますます多くなって、複雑な感じがします.一つのフレームワークを徹底的に研究し、その中のいくつかの共通のものを理解したいと思ってstruts 2を選びました.
多くのstruts 2のドキュメントを見て、struts 2とJSPが多くのラベルライブラリを使用していることを話していることが多く、私はそんなに多くのラベルを使用するのが好きではありません.そこで、velocityとstruts 2の統合をどのように使用するかを研究しました.
 
主に4つのステップがあります.
 
1,pom依存を追加(ここではmaven管理依存を採用しており、かなり便利)
  <dependency>
			<groupId>org.apache.velocity</groupId>
			<artifactId>velocity</artifactId>
			<version>1.6</version>
			<scope>compile</scope>
		</dependency>
		<dependency>
			<groupId>org.apache.velocity</groupId>
			<artifactId>velocity-tools</artifactId>
			<version>1.3</version>
			<scope>compile</scope>
		</dependency>

2,webを修正する.xml 
<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
	<display-name>Archetype Created Web Application</display-name>

	<filter>
		<filter-name>struts2</filter-name>
		<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>struts2</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

	<servlet>
		<servlet-name>velocity</servlet-name>
		<servlet-class>org.apache.velocity.tools.view.servlet.VelocityViewServlet</servlet-class>
	</servlet>

	<!-- Map *.vm files to Velocity -->
	<servlet-mapping>
		<servlet-name>velocity</servlet-name>
		<url-pattern>*.vm</url-pattern>
	</servlet-mapping>

	<welcome-file-list>
		<welcome-file>index.vm<welcome-file>
	</welcome-file-list>
</web-app>

 
3,増加/WEB-INF/velocity.properties
ここでは必要に応じてvelocityパラメータを追加します.私はしばらくパラメータを追加しません.空のファイル全体をデフォルトでいいでしょう.必要なときに追加します.
 
4,増加/EB-INF/toolbox.xml
<?xml version="1.0"?>

<toolbox>
	<tool>
		<key>link</key>
		<scope>request</scope>
		<class>org.apache.velocity.tools.struts.StrutsLinkTool</class>
	</tool>
	<tool>
		<key>msg</key>
		<scope>request</scope>
		<class>org.apache.velocity.tools.struts.MessageTool</class>
	</tool>
	<tool>
		<key>errors</key>
		<scope>request</scope>
		<class>org.apache.velocity.tools.struts.ErrorsTool</class>
	</tool>
	<tool>
		<key>form</key>
		<scope>request</scope>
		<class>org.apache.velocity.tools.struts.FormTool</class>
	</tool>
	<tool>
		<key>tiles</key>
		<scope>request</scope>
		<class>org.apache.velocity.tools.struts.TilesTool</class>
	</tool>
	<tool>
		<key>validator</key>
		<scope>request</scope>
		<class>org.apache.velocity.tools.struts.ValidatorTool</class>
	</tool>
</toolbox>

 
はい、ここまで統合しました.
 
最後にhelloworldを追加します.vm
velocity helloWorld
#foreach( $header in $request.HeaderNames )
  <b>$header:</b> $request.getHeader($header)<br>
#end

 
試してみましょう.ブラウザのリクエストのheadが出てきます.もとはhelloworldではありませんて、ほほほ.でもやっぱり達成感があって、せめて何か出てきたのかな.
 
========================================
 
次は本物のhelloWorldに行きましょう.
 
1,indexを確立する.vm
<html>
<body>
<form action="HelloWorld">
    <input type="text" name="userName"/>
    <input type="submit" value="  " />
</form>
</body>
</html>

  
2、strutsを修正する.xml
以下の構成を加える
	<package name="default" extends="struts-default">
		<action name="HelloWorld" class="com.yajun.helloworld.HelloWorld">
			<result name="SUCCESS">/success.vm</result>
		</action>
	</package>

3、上記の構成に示すように、追加する必要があります.
com.yajun.helloworld.HelloWorldという類:
package com.yajun.helloworld;

public class HelloWorld {

    private String message;
    private String userName;

    public HelloWorld(){
    }

    public String execute() {
        setMessage("Hello " + getUserName());
        return "SUCCESS";
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

}

 
とsuccess.vm
<html>
<head>
<title>Hello World</title>
</head>
<body>
<h1>$message</h1>
</body>
</html>

 
完成しました、運行しましょう.ははは.
 
ラベルよりずっと爽やかな感じで、velocityはstruts 2のvalueStackから直接必要な値を得ることができて、やはりいいですね.
 
しかし、ふと気づいたのは、中国語表示に問題があることですね.それで考えたんだpropertiesのファイルには、次のものが必要です.
 
input.encoding = GBKoutput.encoding = GBK
 
これで次のハローワールドはOKだと思います.