您的位置:首页 > 编程语言 > Java开发

详细配置maven+springmvc入门项目及会碰到的问题

2017-03-17 11:19 507 查看
注:有光标的都为动图有的浏览器为什么不能自动播放,可以换个浏览器或者可以在图片上选择在新标签页打开图片就可以观看了。

首先创建一个maven webapp项目



然后将三个资源包补齐,这是maven的标准结构,再在部署中就test相关资源删除,因为test是我们用来测试的自然不用发布部署了,再检查outputfolder的路径是否正确



项目结构如下:



再配置pom.xml文件添加相应的jar依赖,并指定编译的JDK版本为1.6,因为maven是靠JDK(java开发工具)来编译的不是靠JRE(java运行环境,jre主要针对应用程序)来编译;并且1.6的JDK,maven版本必须在3.3以下。

<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"> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<spring.version>3.1.2.RELEASE</spring.version>
</properties>
<modelVersion>4.0.0</modelVersion>
<groupId>com.wavenet</groupId>
<artifactId>MavenDemo</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>MavenDemo 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>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>

<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin
11a67
</artifactId>
<configuration>
<source>6</source>
<target>6</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
</project>


再次声明注意事项:

**1.因为我使用的是1.6jdk来编译的,所以maven版本必须在3.3以下,不然会通不过编译,会报错:Exception in thread “main” java.lang.UnsupportedClassVersionError: org/apache/maven/cli/MavenCli : Unsupported major.minor version 51.0,jdk版本会在pom.xml中指定

2.将有关test的资源都从部署的时候删除,因为test是用来测试的不需要部署

3.新创建的maven项目没有servlet依赖会报错,这是没有影响的,因为项目部署在web容器中,web容器自带有servlet依赖,我们可以添加一个不在编译时servlet依赖**

然后看能否通过编译,通不过编译是项目肯定有问题的,后面搭建的springmvc项目也会出错,例如不能注入controller,再次认真检查下:



几个maven常用命令:

打包:mvn package

编译:mvn compile

编译测试程序:mvn test-compile

清空:mvn clean

运行测试:mvn test

生成站点目录: mvn site

生成站点目录并发布:mvn site-deploy

安装当前工程的输出文件到本地仓库: mvn install

现在开始搭建springmvc

那么首先我们要知道springmvc是什么,网上很多资料很详细但也是症结所在不容易理解,我尽量简化描述但又怕出现偏差,所以要深入理解的同学还请看了我的理解再去深入下:

用户请求过来–>Web.xml配置的DispatchServlet根据url请求让controller进行处理并返回ModeAndView–>DispatchServlet收回控制权将接收的模型数据传给相应springmvc.xml配置的视图解析器进行渲染–>前端控制器再次收回控制权返回响应给用户

首先配置web.xml,关于web的知识可以再学习下Java web,就很好理解了,力荐博客:http://www.cnblogs.com/xdp-gacl/tag/JavaWeb%E5%AD%A6%E4%B9%A0%E6%80%BB%E7%BB%93/

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<!-- 如果修改了Dynamic Web Module的版本,则需要修改web.xml头部为对应的版本 ,此处我使用的是2.5-->

<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springMvc.xml</param-value>
</context-param>
<!-- 配置DispatchcerServlet -->
<servlet>
<servlet-name>springDispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 配置Spring mvc下的配置文件的位置和名称,不配置下面的参数和context-param,默认回去WEB-INF目录下去找springmvc-servlet.xml -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springMvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
<!-- 第一种:*.action。访问以.action结尾由DispatcherServlet进行解析;
第二种:/,所有访问的地址都由DispatcherServlet进行解析,对于静态文件的解析,
我们要配置不让DispatcherServlet进行解析。使用此种方法可以实现RESTful风格的url;
第三种:/*,这样配置不对,使用这种配置,最终要转发到一个jsp页面时,仍然会由
DispatcherServlet进行解析jsp地址,它不能根据jsp页面找到Handler,会报错-->
<servlet-name>springDispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>

</web-app>


这里有两个问题需要注意,我在注解里已经说明了:

第一,/这样配置比较好,表示所有的请求都由dispatchservlet解析,可以配置单独让静态文件不让它解析

第二,要重新配置springmvc.xml的路径,否则默认会去WEB-INF目录下去找springmvc-servlet.xml

接下来在src/main/java下创建包cn.com.wavenet,在包下创建类HelloWorld,将其作为我们的控制层controller,也就是handler

package cn.com.wavenet;

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

@Controller
public class HelloWorld {

/**
* 1. 使用RequestMapping注解来映射请求的URL
* 2. 返回值会通过视图解析器解析为实际的物理视图, 对于InternalResourceViewResolver视图解析器,会做如下解析
* 通过prefix+returnVal+suffix 这样的方式得到实际的物理视图,然后会转发操作
* "/WEB-INF/views/success.jsp"
* @return
*/
@RequestMapping("/helloworld")
public ModelAndView hello(){

//返回ModelAndView
ModelAndView modelAndView = new ModelAndView();
//相当于request的setAttribute方法,在jsp页面中通过itemsList取数据
modelAndView.addObject("success","maven+springmvc到此结束了");

//指定视图
modelAndView.setViewName("success");
return modelAndView;

}
}
//注意:1. 首先要在类的前面添加“Controller”注解,表示是spring的控制器,这里会写一个方法hello()

//2. hello方法上方有一个@RequestMapping, 是用于匹配请求的路径,比如这里匹配的请求路径就是“http://localhost:8080/springTest/springmvc/helloworld”,即当tomcat服务启动后,在浏览器输入这个url时,如果在这个方法打断点了,就会跳入该方法。

//3. 返回modelAndView给前端控制器,让它根据setView的要求选择视图解析器传入模型数据进行渲染


再在src/main/resources下配置springmvc.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-3.2.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd"> <!-- 隐式地向 Spring容器注册AutowiredAnnotationBeanPostProcessor、RequiredAnnotationBeanPostProcessor、CommonAnnotationBeanPostProcessor以及PersistenceAnnotationBeanPostProcessor这4个BeanPostProcessor。 -->
<context:annotation-config />

<!-- 配置自动扫描的包 -->
<context:component-scan base-package="cn.com.wavenet"></context:component-scan>

<!-- 配置视图解析器 如何把handler 方法返回值解析为实际的物理视图 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name = "prefix" value="/WEB-INF/views/"></property>
<property name = "suffix" value = ".jsp"></property>
</bean>

<!-- 使用mvc:annotation-driven代替注解映射器和注解适配器配置
mvc:annotation-driven默认加载很多的参数绑定方法,
比如json转换解析器就默认加载了,如果使用mvc:annotation-driven就不用配置的
RequestMappingHandlerMapping和RequestMappingHandlerAdapter -->
<mvc:annotation-driven></mvc:annotation-driven>

</beans>


这里没什么好说的,大多数都注解了,自动注解,扫描包注册将注解的类或方法装配为bean,也都是spring的内容,看起来比较吃力的话再去系统的复习下spring就可以了。

最后再添加src/main/webapp/WEB-INF/views/success.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>Insert title here</title>
</head>
<body>
${success}
</body>
</html>


最后我们还需要一个src/main/webapp/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>Insert title here</title>
</head>
<body>
<a href="helloworld">hello word</a>
</body>
</html>


我们来运行一下:



参考博客:http://www.cnblogs.com/bigdataZJ/p/springmvc1.html

谢谢该博主对知识的分享
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: