在Eclipse中使用Maven构建SpringMVC项目
环境搭建
- 安装JDK, Eclipse, Tomcat等 – 请参考网上常见攻略.
- 安装Maven:
- 下载需要的Maven 版本( http://maven.apache.org/download.cgi), 解压至本地.
- 配置环境变量:
- M2_HOME: 值为解压路径.
- 添加” %M2_HOME%\Bin;”到PATH中.
- 打开cmd, 输入mvn –version确认安装成功.
- 在Eclipse->Window->Preferences->Maven->Installations中添加安装的版本
- 在Eclipse->Window->Preferences->Maven->User Settings中, 将配置文件选为安装目录下的conf/setting.xml.
- 注意, 对setting.xml如果进行改动, 可以在User Settings中点击Update Settings, 使改动立即生效
Note:
如果由于网络问题无法连接maven repository, 进而导致无法下载或更新dependencies/plugins, 可以尝试添加proxy. 仍然无效, 请尝试用ip代替host.
<proxy>
<id>optional</id>
<active>true</active>
<protocol>http</protocol>
<host>proxy.xxx.xxx</host>
<port>8080</port>
</proxy>
此类错误常见提示:
- xxx or one of its dependencies could not be resolved ...
- Failed to read artifact descriptor for …
- Could not transfer artifact xxx from/to central (https://repo.maven.apache.org/maven2)
如果个别jar包下载有问题, 请尝试在local repository中删除对应文件夹下的***.lastUpdated文件, 让Maven尝试重新下载.
如果使用Proxy依旧无法从remote repository下载关联jar包, 有可能是当前的网络供应商无法访问maven的repo. 请使用mirror:
<mirror>
<id>ibiblio.org</id>
<name>ibiblio Mirror of http://repo1.maven.org/maven2/</name>
<url>http://mirrors.ibiblio.org/pub/mirrors/maven2</url>
<mirrorOf>central</mirrorOf>
<!-- United States, North Carolina -->
</mirror>
<mirror>
<id>jboss-public-repository-group</id>
<mirrorOf>central</mirrorOf>
<name>JBoss Public Repository Group</name>
<url>http://repository.jboss.org/nexus/content/groups/public</url>
</mirror>
参考文章: maven联通网络下中央仓库不能访问的解决办法
新建Maven Web项目
- 打开Eclipse, 在Project Exproler中右键, New->Project->Maven->Maven Project
- 选择maven-archetype-webapp.
选择所需的packaging类型为war, 填写group id和artifact id, 按自己的版本习惯填写version, 点击Finish完成创建.
可参考 http://www.cnblogs.com/leiOOlei/p/3361633.html#3099423
遇到的问题:
创建Maven Project后, "src/main/java" (missing)
解决方法: project->property->Java Build Path->Libraries->选择正确的JRE版本
为项目添加Dependencies
- 当项目中需要调用常用的框架jar包时, 例如Spring, 右键点击pom文件->Maven->Add Dependency, 把对应的group id等信息填写正确即可. 如果不清楚具体group id或者artifact id, 在下面搜索框中输入关键字即可查询到相关信息.
例如输入Spring, 可以看到spring-aop等各个artifacts.
如果无法正常使用search:
解决方法: Window->Show View->Other->Maven Repositories. Local Repositories->Rebuild Index - 选择需要的一项, 该项所依赖的jar包也会被自动导入.
比如, 选择spring-context, commons-logging-x.x.jar也会被加载 - 注意: 如果不选择version, 自动导入最新版本的jar包.
- 对于Web Project, 若遇到JSP页面错误"superclass javax.servlet.http.HttpServlet was not found on the Java Build Path", 可以添加Maven Dependency
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
Maven自动部署Web项目到Tomcat
- 配置Tomcat安装目录->conf->tomcat-users.xml, 使用户具备manager和admin的权限
<role rolename="admin"/>
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<user username="admin" password="admin" roles="admin,manager-gui,manager-script"/> - 配置maven的setting.xml文件
<server>
<id>tomcat7</id>
<username>admin</username>
<password>admin</password>
</server> - 为pom.xml添加build配置
<build>
<finalName>SpringMVCDemo</finalName>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<url>http://localhost:8080/manager/text</url>
<server>tomcat7</server> <!-- 此处的名字必须和setting.xml中配置的ID一致-->
</configuration>
</plugin>
</plugins>
</build> - 在run/debug configuration中设置Goals为 tomcat7:redeploy, 运行.
- 注意, 工程的web.xml文件必须位于src/main/webapp/WEB-INF/ 路径下, 否则会报错
SpringMVC Demo
参考博文: http://www.cnblogs.com/fangjins/archive/2012/05/06/2485459.html#2842487
1. 配置web.xml
web.xml中ContextLoaderListener和DispatcherServlet的作用:
- ContextLoaderListener实现了ServletContextListener接口, 负责监听Web容器的启动和关闭的事件. Spring容器通过该接口的contextInitialized方法初始化.
- ContextLoaderListener继承自ContextLoader, 启动Spring容器时, 会基于"contextClass" and "contextConfigLocation"所对应的配置文件(applicationContext.xml), 去创建root application context并放入ServletContext中, Spring-Managed Beans都是在此Context中被加载. 该context中一般用于配置数据源, Session Factory, Services等.
- DispatcherServlet会创建自己的WebApplicationContext(child application context), 用于管理handlers/controllers/view-resolvers等.
- Root Context和Child Context的关系:
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app 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"> <listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener> <servlet>
<servlet-name>demo</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet> <servlet-mapping>
<servlet-name>demo</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping> <welcome-file-list>
<welcome-file>home.html</welcome-file>
</welcome-file-list>
</web-app>
2. 配置applicationContext.xml
默认情况下, Spring容器的配置文件是WEB-INF/applicationContext.xml.
在HelloWorld中,因暂时不需要Session, Services, DataSource等bean, 所以直接使用最简单的applicationContext.xml如下
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd">
<beans>
</beans>
注1: 如果部署到server发生启动Application失败, 报"UnknownHostException www.springframework.org", 则需要更新bean的dtd.
注2: 如果applicationContext.xml文件没有在/WEB-INF/下,或文件名不一致,或存在多个Spring配置文件,则在web.xml文件中可以参考下面代码修改
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath*:applicationContext-*.xml,/WEB-INF/applicationContext.xml,/WEB-INF/classes/applicationContext-*.xml
</param-value>
</context-param>
注: web.xml中classpath:和classpath*的区别
- classpath: 只在class路径中查找文件
- classpath*: 在class路径,以及路径下的jar文件中进行查找
3. 配置servlet:
默认情况下, 配置文件为/WEB-INF/[your-servlet-name]-servlet.xml. 因为在web.xml中servlet命名为demo, 所以对应配置文件名为demo-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:p="http://www.springframework.org/schema/p"
xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context"
xmlns:util="http://www.springframework.org/schema/util"
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
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd"> <mvc:annotation-driven /> <context:component-scan base-package="com.demo.springmvc.controller" /> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" /> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix">
<value>/ui/</value>
</property>
<property name="suffix">
<value>.jsp</value>
</property>
</bean>
</beans>
如果不在默认路径/WEB-INF/下放置servlet配置文件(比如需要放置在名为config的自定义文件夹中, 方便统一管理配置文件), 则需要在Web.xml中把<servlet>...</servlet>一节进行如下修改:
<servlet>
<servlet-name>demo</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:config/demo-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
4. 在pom.xml中添加Spring Dependencies: spring-webmvc, spring-web.
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.1.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.1.4.RELEASE</version>
</dependency>
pom.xml
测试HelloWorld
1. 创建View:
选择一个自己喜欢的路径, 创建jsp文件, 如: webapp/ui/user/pages/login.jsp
注意: 路径, 以及文件后缀名, 需和demo-servlet.xml中定义的一致.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="ISO-8859-1"%>
<!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>Login</title>
</head>
<body>
This is the login page.
</body>
</html>
login.jsp
2. 创建控制器:
利用annotation, Spring会在demo-servlet.xml所配置的base-package中自动扫描带@Controller的控制器
注意: ViewName需和login.jsp保持一致.
package com.demo.springmvc.controller; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView; @Controller
public class LoginController {
@RequestMapping("/login")
public ModelAndView handleLoginRequest() {
ModelAndView mv = new ModelAndView();
mv.setViewName("user/pages/login");
// mv.addObject(attributeName, attributeValue);
return mv;
}
}
LoginController
3. 运行机制简单描述:
根据web.xml的配置, 部署并启动后, 默认访问页面是home.html(放在webapp目录下).
<html>
<head>
<title>Home</title>
</head>
<body>
<h2>Welcome to Spring MVC by Maven - Hello World!</h2>
</body>
</html>
home.html
当我们在URL上输入login.do时, 根据web.xml的配置, servlet "demo"会得到该request, 并且根据RequestMapping的值, 找到匹配的controller, 也即LoginController, 来进行处理. LoginController则根据ViewName, 找到最终需要展示的view页面, 也即login.jsp. 最终得到结果:
附: 项目结构图
在Eclipse中使用Maven构建SpringMVC项目的更多相关文章
- JavaWeb之Eclipse中使用Maven构建SpringMVC项目
为了学习spring和maven我这也是拼了老命了,光使用maven配置springmvc我花了上周一周的时间,下班回来就搞,一直有bug,一个bug接着一个,昨天一整天都在解决配置的问题,让大学同学 ...
- 利用Eclipse中的Maven构建Web项目(三)
利用Eclipse中的Maven构建Web项目 1.将Maven Project转换成动态Web项目,鼠标右键项目,输入"Project Facets" 2.依据Dynamic W ...
- 利用Eclipse中的Maven构建Web项目报错(二)
利用Eclipse中的Maven构建Web项目 1.错误描述 [INFO] Scanning for projects... [INFO] [INFO] Using the builder org.a ...
- 利用Eclipse中的Maven构建Web项目报错(一)
利用Eclipse中的Maven构建Web项目 1.在进行上述操作时,pom.xml一直报错 <project xmlns="http://maven.apache.org/POM/4 ...
- 利用Eclipse中的Maven构建Web项目(二)
利用Eclipse中的Maven构建Web项目 1.新建源文件夹,Java Resources鼠标右键,"New-->Source Folder" 2.新建src/main/ ...
- 利用Eclipse中的Maven构建Web项目(一)
利用Eclipse中的Maven构建Web项目 1.新建一个Maven Project,"New-->Other..." 2.选择"Maven Project&qu ...
- 在eclipse中使用maven创建springMVC项目
一.在eclipse中创建maven-archetype-webapp项目: 1.新建项目选择maven项目 2.默认,下一步 3.选择maven-archetype-webapp,其他保持默认即可 ...
- Eclipse中使用maven构建web项目中遇到的问题
构建过程参考: http://blog.csdn.net/smilevt/article/details/8215558/ http://www.cnblogs.com/dcba1112/archiv ...
- SpringMVC教程--eclipse中使用maven创建springMVC项目
一.在eclipse中创建maven-archetype-webapp项目: 1.新建项目选择maven项目 2.默认,下一步 3.选择maven-archetype-webapp,其他保持默认即可 ...
随机推荐
- 用C#实现生成PDF文档
using System; using System.IO; using System.Text; using System.Collections; namespace PDFGenerator { ...
- POJ3253 Fence Repair(贪心)
分割木板的顺序是自由的,所以每次选择两块最短的板,组合在一起,增加队列,原来两个板出队,直到队列中为空或者仅仅剩下一个板时结束.这里使用优先队列较为方便. #include<iostream&g ...
- 把war包放到Tomcat安装文件夹下,不能直接訪问的解决方式
临床表现: Tomcat启动后首页能訪问(http://localhost:8080/). 将自己写的一个webprojectwar包放到Tomcat安装文件夹下的/webapps以下(比方hello ...
- JavaScript 的DOM操作
HTML DOM (文档对象模型) 当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model). HTML DOM 模型被构造为对象的树. Windows 对象操作 ...
- SQL事务与并发
1.Transaction(事务)是什么: 事务是作为单一工作单元而执行的一系列操作.包括增删查改. 2.事务的种类: 事务分为显示事务和隐式事务: 隐式事务:就是平常我们使用每一条sql 语句就是一 ...
- windows下,用绝对路径向html文件中插入图片
首先注意路径中是否包含中文名比如 <img src="F:\头像\小黄人.jpg" width="500" height="200"/ ...
- gcc -lpthread 干什么用
#include <stdio.h> #include <pthread.h> void *ThreadFunc(void *pArg) //参数的值为123 { int i ...
- dedecms一些技巧
有时我们很多栏目公用一个模版,但栏目展示的图片又不同,并且要考虑到多级栏目下的 {dede:field.typeid function="GetTopid(@me)"/} 这个能获 ...
- 【转】Pjax是什么以及为什么推荐大家用
http://my.oschina.net/sub/blog/12344 技术增强的文章,可以看一下 .
- 解决“无法连接到Python代码运行助手。请检查本机的设置”问题
廖雪峰老师python课程里有个代码运行助手,可以让你在线输入Python代码,然后通过本机运行的一个Python脚本来执行代码,很方便的一个脚本工具,但是很多人用过之后出现了这样的提示:“无法连接到 ...