Spring MVC hello world 示例


这篇文章使用的工具是:

  • Eclipse
  • Maven plugin(m2eclipse)
  • JDK 1.7
  • Apache tomcat 8

创建 Spring MVC hello world 示例的步骤。

1) 在eclipse中为maven插件安装m2eclipse。

2) 转到新 -> 项目-> Maven 项目,然后单击下一步

img

3) 你会看到下面的屏幕,再次点击下一步

img

4) 我们需要在这里选择原型类型。当我们在这里创建网络应用程序时,请在过滤器中输入以下文本:maven-archetype-webapp

img

5) 我们需要在此处放置组 ID 和工件 ID。

让我告诉你更多关于组 ID 和工件 ID 的信息。

Group id : 它在所有项目中唯一标识您的项目。所以它可能类似于 com.companyname

Artifact id :它是没有版本的 jar 或 war 的名称。它可能类似于项目,所以在这里我们将工件 id 设置为 mavenWebApp

版本: 版本用于工件 id 的版本控制。如果您分发此项目,您可能会逐步创建它的不同版本。

img

当您按照上述步骤操作时,您的项目结构将如下所示:

如您所见,我们在 index.jsp 中收到错误(“在 java 构建路径中找到超类“javax.servlet.http.HttpServlet””)。

要解决此问题,请执行以下步骤:

您需要将目标运行时间设置为 Apache Tomcat。为此,请右键单击项目 -> 属性 -> 目标运行时

img

添加 Spring MVC 依赖

6)在 pom.xml 中添加 spring 依赖。我们在这里需要 spring core 和 spring mvc 依赖。

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>com.arpit.java2blog</groupId>
<artifactId>SpringMVCHelloWorldExample</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>SpringMVCHelloWorldExample 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>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
</dependencies>
<build>
<finalName>SpringMVCHelloWorldExample</finalName>

<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>${jdk.version}</source>
<target>${jdk.version}</target>
</configuration>
</plugin>
</plugins>

</build>
<properties>
<spring.version>4.2.1.RELEASE</spring.version>
<jdk.version>1.7</jdk.version>
</properties>
</project>

创建控制器并查看

7)创建一个名为“org.arpit.java2blog.springmvc.controller”的包创建一个名为“HelloWorldController.java” 的控制器类

package org.arpit.java2blog.springmvc.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class HelloWorldController {

    @RequestMapping("/helloworld")
    public ModelAndView hello() {

        String helloWorldMessage = "Hello world from java2blog!";
        return new ModelAndView("hello", "message", helloWorldMessage);
    }
}

当请求首先到达 dispatcherServlet 并重定向到控制器类。这里@Controller 描述了这是我们的控制器类。@RequestMapper 用于将传入的 http 请求映射到处理程序方法(上面控制器中的 hello())。所以 HelloWorldController.java 的 hello() 方法将处理来自调度程序的 GET 请求。所以当我们有

http://localhost:8080/SpringMVCHelloWorldExample/helloworld or
http://localhost:8080/SpringMVCHelloWorldExample/helloworld.html

上面的方法将被调用。

如您所见,ModelAndView 对象在 hello() 方法中返回。它将调用 ModelAndView 类的下面的构造函数。 ModelAndView(String viewName, String modelName, Object modelObject) 下图就清楚了

img

8)修改index.jsp如下

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>HelloWorld</title>
</head>
<body>
<a href="helloworld.html">Click here to read hello message </a>
</body>
</html>

在 / WEB-INF/ 文件夹中创建hello.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Hello</title>
</head>
<body>
${message}
</body>
</html>

配置spring mvc应用

9)现在我们需要配置两个文件“web.xml”和“springmvc-dispatcher-servlet.xml” 我们需要在web.xml中为spring MVC声明DispatcherServlet。当 DisplatcherServlet 初始化时,spring 尝试从 [servlet name]-servet.xml 文件加载应用程序上下文。所以在这种情况下,它将尝试加载 springmvc-dispatcher-servlet.xml。

<web-app 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_3_0.xsd"
version="3.0">
<display-name>Archetype Created Web Application</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>springmvc-dispatcher</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>springmvc-dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>

10)在**/WEB-INF**文件夹中创建名为“springmvc-dispatcher-servlet.xml”的 xml 文件,如下所示。

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc" 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-3.0.xsd http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">

<context:component-scan base-package="org.arpit.java2blog.springmvc.controller" />

<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix">
<value>/WEB-INF/</value>
</property>
<property name="suffix">
<value>.jsp</value>
</property>
</bean>
<mvc:annotation-driven/>

</beans>

context:component-scan 允许 spring 加载它的类和子类。如您所见,我们在这里给出了控制器包,因此它将加载 HelloWorldController.class。 InternalResourceViewResolver 是资源视图解析器 bean,它将解析视图,前缀和后缀将添加到 ModelViewObject 中使用的视图。因为我们在 ModelAndView 对象中使用了“hello”作为 viewName。它将在/WEB-INF/hello.jsp 中搜索视图。

img

11) 是时候做 Maven 构建了。

右键单击项目-> 运行方式-> Maven 构建

img

12)提供干净安装的目标(如下所示)并单击运行

img

运行应用程序

13)右键单击项目->运行为->在服务器上运行

选择apache tomcat并点击finish

img

14)您将看到以下屏幕:

img

当您单击上面的链接时,您将进入以下屏幕

img

我们完成了 Spring MVC hello 示例。如果您仍然遇到任何问题,请发表评论。

下载

点击开始

20KB .zip

项目结构:

img

如果您在上述步骤中遇到 404 错误,您可能需要按照以下步骤操作:

**1)** 如果您在 Tomcat 启动控制台日志中收到此警告,则可能会导致问题

警告:[SetPropertiesRule]{Server/Service/Engine/Host/Context} 将属性“源”设置为“org.eclipse.jst.j2ee.server:SpringMVCHelloWorldExample”未找到匹配的属性。

这个特定的警告基本上意味着 Tomcat 的 server.xml 中的元素包含未知的属性源,并且 Tomcat 不知道如何处理该属性,因此将忽略它。 要在 Eclipse 中解决此问题, 请从服务器视图中删除服务器中的项目。右键单击服务器->添加和删除

img

然后从服务器配置中删除项目。

然后在同一台服务器下运行项目。现在应该删除 警告或者如果警告仍然存在那么

  • 转到服务器视图
  • 双击您的 Tomcat 服务器。它将打开服务器配置。
  • 在服务器选项下选中“将模块内容发布到单独的 XML 文件”复选框。
  • 重新启动您的服务器。这次您的页面将没有任何问题。

2)尝试更新Maven项目。 右键项目->Maven->更新项目

img

然后

img

这应该可以解决您的问题。


原文链接:https://codingdict.com/