spring mvc + velocity 搭建实例程序maven版本并且使用的是tomcat容器而不是jetty(step by step)

时间:2023-03-09 04:11:29
spring mvc + velocity 搭建实例程序maven版本并且使用的是tomcat容器而不是jetty(step by step)

笔者最近在学习spring mvc 查了很多资料,但用jsp的居多,但项目中需要用velocity,所以说就学习了一下,现将所查资料以及搭建过程陈述如下,供需要的人参考

1.楼主用的是eclipse+maven,如果需要安装请参照其他教程(网上能搜到很多,这里不多赘述)

2.创建maven工程:

file--new--other--maven--maven project

spring mvc + velocity 搭建实例程序maven版本并且使用的是tomcat容器而不是jetty(step by step)

spring mvc + velocity 搭建实例程序maven版本并且使用的是tomcat容器而不是jetty(step by step)

spring mvc + velocity 搭建实例程序maven版本并且使用的是tomcat容器而不是jetty(step by step)

  • Group Id: org.o7planning
  • Artifact Id: SpringMVCVelocity
  • Package: org.o7planning.tutorial.springmvcvelocity
spring mvc + velocity 搭建实例程序maven版本并且使用的是tomcat容器而不是jetty(step by step)
项目创建目录如下:
spring mvc + velocity 搭建实例程序maven版本并且使用的是tomcat容器而不是jetty(step by step)
不用担心现在的错误,错误的原因是没有相应的servlet library.这个错误在后续过程中会自动消除!
Note:
Eclipse 4.4 (Luna) create Maven project structure may be wrong. You need to check.检查文件目录结构,保证在工程下有如下的目录结构:
spring mvc + velocity 搭建实例程序maven版本并且使用的是tomcat容器而不是jetty(step by step)
如果没有就建立相应的source file
spring mvc + velocity 搭建实例程序maven版本并且使用的是tomcat容器而不是jetty(step by step)

3.配置pom.xml文件:

  • pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion>
<groupId>org.o7planning</groupId>
<artifactId>SpringMVCVelocity</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>SpringMVCVelocity Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency> <!-- Spring framework START -->
<!-- http://mvnrepository.com/artifact/org.springframework/spring-core -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.1.4.RELEASE</version>
</dependency> <!-- http://mvnrepository.com/artifact/org.springframework/spring-web -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.1.4.RELEASE</version>
</dependency> <!-- http://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.1.4.RELEASE</version>
</dependency> <!-- contains: VelocityEngineFactory -->
<!-- http://mvnrepository.com/artifact/org.springframework/spring-context-support -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.1.4.RELEASE</version>
</dependency>
<!-- Spring framework END --> <!-- Servlet API -->
<!-- http://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency> <!-- http://mvnrepository.com/artifact/org.apache.velocity/velocity -->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity</artifactId>
<version>1.7</version>
</dependency> <!-- http://mvnrepository.com/artifact/org.apache.velocity/velocity-tools -->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-tools</artifactId>
<version>2.0</version>
</dependency> </dependencies> <build>
<finalName>SpringMVCVelocity</finalName>
<plugins> <!-- Config: Maven Tomcat Plugin -->
<!-- http://mvnrepository.com/artifact/org.apache.tomcat.maven/tomcat7-maven-plugin -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<!-- Config: contextPath and Port (Default - /SpringMVCVelocity : 8080) -->
<!--
<configuration>
<path>/</path>
<port>8899</port>
</configuration>
-->
</plugin>
</plugins>
</build> </project>

4.插入xml文件后的目录结构:

spring mvc + velocity 搭建实例程序maven版本并且使用的是tomcat容器而不是jetty(step by step)
  • web.xml
<web-app id="WebApp_ID" 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>Archetype Created Web Application</display-name> <servlet>
<servlet-name>spring-mvc</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet> <servlet-mapping>
<servlet-name>spring-mvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping> <!-- Other XML Configuration -->
<!-- Load by Spring ContextLoaderListener -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/root-context.xml,
/WEB-INF/spring-mvc-servlet.xml
</param-value>
</context-param> <!-- Spring ContextLoaderListener -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener> </web-app>
  • spring-mvc-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:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.1.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd"> <!-- Register the annotated components in the container eg : annotated controllers -->
<context:component-scan base-package="org.o7planning.tutorial.springmvcvelocity.*" /> <!-- Tell the container that we are going to use annotations -->
<context:annotation-config /> <bean id="velocityConfig"
class="org.springframework.web.servlet.view.velocity.VelocityConfigurer">
<property name="resourceLoaderPath">
<value>/</value>
</property>
</bean> <bean id="viewResolver"
class="org.springframework.web.servlet.view.velocity.VelocityLayoutViewResolver">
<property name="cache" value="true" />
<property name="prefix" value="/WEB-INF/views/" />
<property name="layoutUrl" value="/WEB-INF/layouts/layout.vm" />
<property name="suffix" value=".vm" />
</bean> </beans>
  • root-context.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- Empty --> </beans>

5.需要的velocity文件(.vm文件)文件结构:

spring mvc + velocity 搭建实例程序maven版本并且使用的是tomcat容器而不是jetty(step by step)
  • /WEB-INF/fragments/_header.vm
<div style="background: #E0E0E0; height: 80px; padding: 5px;">
<div style="float: left">
<h1>My Site</h1>
</div>
<div style="float: right; padding: 10px;">
Search <input name="search">
</div>
</div>
  • /WEB-INF/fragments/_footer.vm
<div
style="background: #E0E0E0; text-align: center; padding: 5px; margin-top: 10px;">
@Copyright mysite.com
</div>
  • /WEB-INF/layouts/layout.vm
<html>
<head>
<title>Spring & Velocity</title>
</head>
<body>
<div>
#parse("/WEB-INF/fragments/_header.vm")
</div> <div> <!-- View abc.vm is inserted here -->
<!-- Noi dung View abc.vm se duoc tren tai day -->
$screen_content </div> <div>
#parse("/WEB-INF/fragments/_footer.vm")
</div>
</body>
</html>
The $screen_content variable is used by the VelocityLayoutViewResolver to include the result of an other VM in the layout
  • /WEB-INF/views/index.vm
<h1>Index</h1>

<h2>Department list</h2>
<table border="1">
<tr>
<th>Dept No</th>
<th>Dept Name</th>
</tr>
#foreach($dept in $departments)
<tr>
<td>$dept.deptNo</td>
<td>$dept.deptName</td>
</tr>
#end
</table>

6.项目的mvc模式java文件结构视图:

spring mvc + velocity 搭建实例程序maven版本并且使用的是tomcat容器而不是jetty(step by step)
  • Department.java
package org.o7planning.tutorial.springmvcvelocity.model;

public class Department {

   private Integer deptId;
private String deptNo;
private String deptName;
private String location; public Department() {
} public Department(Integer deptId, String deptName, String location) {
this.deptId = deptId;
this.deptNo = "D" + deptId;
this.deptName = deptName;
this.location = location;
} public Integer getDeptId() {
return deptId;
} public void setDeptId(Integer deptId) {
this.deptId = deptId;
} public String getDeptNo() {
return deptNo;
} public void setDeptNo(String deptNo) {
this.deptNo = deptNo;
} public String getDeptName() {
return deptName;
} public void setDeptName(String deptName) {
this.deptName = deptName;
} public String getLocation() {
return location;
} public void setLocation(String location) {
this.location = location;
}
}
  • DepartmentService.java
package org.o7planning.tutorial.springmvcvelocity.model;

import java.util.ArrayList;
import java.util.List; import org.springframework.stereotype.Service; @Service
public class DepartmentService { public List<Department> listDepartment() {
List<Department> list = new ArrayList<Department>(); list.add(new Department(1, "Operations", "Chicago"));
list.add(new Department(2, "HR", "Hanoi"));
return list;
}
}
The classes annotated by @Controller or @Service be regarded as the Bean, and Spring will automatically inject dependencies in the Field annotated by @Autowired annotation.
  • MainController.java
package org.o7planning.tutorial.springmvcvelocity.controller;

import java.util.List;

import org.o7planning.tutorial.springmvcvelocity.model.Department;
import org.o7planning.tutorial.springmvcvelocity.model.DepartmentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod; @Controller
public class MainController { @Autowired
private DepartmentService deptService; @RequestMapping(value = { "/", "/welcome" }, method = RequestMethod.GET)
public String welcomePage(Model model) {
List<Department> list = deptService.listDepartment();
model.addAttribute("departments", list);
return "index";
}
}

7.maven运行步骤,使用的是tomcat容器,而不是jetty

In the first, before running the application you need to build the entire project.
Right-click the project and select:
spring mvc + velocity 搭建实例程序maven版本并且使用的是tomcat容器而不是jetty(step by step)
spring mvc + velocity 搭建实例程序maven版本并且使用的是tomcat容器而不是jetty(step by step)

运行配置参数:

spring mvc + velocity 搭建实例程序maven版本并且使用的是tomcat容器而不是jetty(step by step)
spring mvc + velocity 搭建实例程序maven版本并且使用的是tomcat容器而不是jetty(step by step)
Enter:
  • Name: Run SpringMVCVelocity
  • Base directory: ${workspace_loc:/SpringMVCVelocity}  //其中SpringMVCVelocity指的是项目的名字,这行的意思就是找到硬盘中的项目位置,点击下面的 Browse Workspace进行选择
  • Goals: tomcat7:run
spring mvc + velocity 搭建实例程序maven版本并且使用的是tomcat容器而不是jetty(step by step)
Click Run:
spring mvc + velocity 搭建实例程序maven版本并且使用的是tomcat容器而不是jetty(step by step)
spring mvc + velocity 搭建实例程序maven版本并且使用的是tomcat容器而不是jetty(step by step)

端口号的设置在pom.xml中

执行后的效果图如下:

spring mvc + velocity 搭建实例程序maven版本并且使用的是tomcat容器而不是jetty(step by step)