第一个Spring MVC项目的磕磕绊绊

一、安装Maven

1、在官网下载Maven:Maven – Welcome to Apache Maven

2、解压到想要安装的路径

3、配置环境变量

(1)新建一个系统变量M2_HOME

           

(2)在path中新增一个值%M2_HOME%\bin

3、检验是否安装成功:在命令行输入mvn -version,显示如下则表示安装成功。

4、修改Maven的配置文件

将Maven目录\conf\settings.xml文件以下两处安照图片的内容修改,并把文件放在${user.home}/.m2(一般是C:\Users\用户名\.m2)下面。

二、eclipse集成Maven

1、下载合适版本的eclipse,建议4.3版本以上(集成了maven的插件m2e)

2、配置eclipse

(1)将我们安装的Maven添加到eclipse中:Windows=》preference=》maven=》Installations

(2)检测usersetting是不是我们刚刚修改的setting.xml的路径

三、创建Hello Spring MVC

1、在要创建项目的目录下打开命令行,输入以下命令让maven为我们自动创建一个典型的web应用的目录结构。

mvn archetype:generate -DgroupId=itanken-arthur -DartifactId=spring-mvc-study -DarchetypeArtifactId=maven-archetype-webapp

该命令的意思是mvn调用了某种插件,并将插件上的某种目标应用(archetype:generate)后面是一连串的这个插件所需要的参数。

groupId:坐标

artifactId:坐标中的一个元素,它的值会成为所创建的目录结构的根目录的名称

archetypeArtifactId:指明创建目录类型的一个类型,这里是一个webapp的类型

相应的目录下出现相应的文件

2、将项目导入到eclipse中:在项目栏中右键=》import=》existing maven project,选择已经创建的文档结构地址,这里的pom.xml应该是勾选的,因为这个目录我已经导入了所以这里的显示是这样的。

导入之后目录结构如下:

(2)解决目录缺失问题

右键项目根目录=》properties=》java Build Path,发现有两个缺失,在相应的目录下新建两个文件夹即可

缺失文件创建后的目录结构如下:

(2)解决目录中的小红叉问题,是因为缺少 Server Runtime,右键项目properties=》Java Build Path按照如下方式进行配置,配置完后小红叉消失。

Server Runtime中没有可选的Tomcat可以右键项目=》Run as=》Run on Server,添加一个server,选择合适的版本号,选择本来安装的Tomcat的目录位置即可

(3)配置pom.xml文件

a. 将packing改为jar,保存

b.删除不需要的内容

c. 加入一些变量替代以下我们需要的一些工程版本,这样在工程依赖比较复杂、工程比较大的情况下回比较清晰的理解到我们所用到的一些软件包的版本

d.配置依赖管理<dependencyManagement>,是Maven 中的核心,可以管理一些传递的依赖。比如Spring MVC和hebernet都引用了Spring包但是版本不一样时我们应该是使用哪个版本的spring包呢,这就依赖于依赖管理中指定的spring包,我们项目中所用引用spring文件都将使用这里指定的版本。

e.配置具体的依赖管理即项目所依赖的包

e.添加一些插件:为我们提供一些额外的功能

添加jetty可以测试我们项目的部署,但是和项目本身没有太大的关联

(4)创建web应用:配置web.xml文件

a.因为我们要使用spring MVC所以需要一个servlet和一个servlet-mapping将spring的前端控制器配入我们的web环境

(5)配置DispatcherServlet对应的上下文配置,根据web.xml在相应的文件夹(/WEB-INF/configs/spring)下创建相应名称的文件(mvc-dispatcher-servlet.xml)

(6)按照mvc-dispatcher-servlet.xml创建jsp存放的文件夹/WEB-INF/jsps/

(7)写代码,写我们的hello mvc ,在src/main/java下创建一个类,一个controller——HelloMvcController

(8)创建home.jsp

四、测试项目

按照学习的资料是在jetty上部署运行,然后就遇到了各种问题,具体的过程记不太清了,就主要把出问题的几处地方列出来。

(1)在jetty上部署运行

在命令行定位到目录结构的根目录下也就是spring-mvc-study,在根目录下运行maven也就是mvn jetty:run来启动jetty(因为我们在我们的配置文件中有加入插件jetty,为我们提供运行的容器环境)

运行后,jetty启动成功

运行后,我发现jetty启动成功,但是访问却是503的错误

仔细看一下jetty启动时的信息发现有很多的错误

(2)我上网查了一下,说在Tomcat中运行更能发现问题,于是我就把jetty给关了(Ctrl+C)在Tomcat下部署该项目

a.首先部署前我发现项目上有个小红叉,发现下面有这样错误提示

于是上网查了一下,解决方案是:右击项目=》Maven=》update project=》进入一个页面=》默认选项,点击OK。等一小会儿,小红叉消失,错误提示消失。

b.将项目在Tomcat下运行,项目启动成功,直接进入项目的index.jsp,但是跳转到controller拦截的url下就报404的错误

找了好久的原因都不知道什么原因,后来才发现后台有报错

在网上查了好久说是没有导包的原因,解决方法:右击properties=》Deployment Assembly

c.此时重新启动Tomcat,访问页面,错误变成了500

后台提示如下

SEVERE: StandardWrapper.Throwable
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.web.servlet.view.ContentNegotiatingViewResolver#0' defined in ServletContext resource [/WEB-INF/configs/spring/mvc-dispatcher-servlet.xml]: Error setting property values; nested exception is org.springframework.beans.NotWritablePropertyException: Invalid property 'viewClass' of bean class [org.springframework.web.servlet.view.ContentNegotiatingViewResolver]: Bean property 'viewClass' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter?

然后去mvc-dispatcher-servlet.xml下检查ContentNegotiatingViewResolver#0发现,我写错了这里应该是org.springframework.web.servlet.view.InternalResourceViewResolver而不是org.springframework.web.servlet.view.ContentNegotiatingViewResolver

d. 此时启动后台没有报错了,但是又出现了404的错误,无意中发现这个包名写错了

e.修改包名之后重新启动,又出现了505的错误

错误说明如下

SEVERE: Servlet.service() for servlet [mvc-dispatcher] in context with path [/spring-mvc-study] threw exception [Handler processing failed; nested exception is java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/core/Config] with root cause
java.lang.ClassNotFoundException: javax.servlet.jsp.jstl.core.Config

查了一下,说是缺少jstl的依赖包,于是在pom.xml中添加了jstl的包

f.至此终于把问题都解决了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值