基于IDEA+Maven+SpringMVC的入门web程序分析(一)
第一步:Maven项目的创建【手动创建Maven项目而没有使用Maven的自动构建web项目】
使用Maven模板自动构建web项目图如下,这里不细讲:
手动创建Maven Web项目流程如下:
1.1 File->New->Project 出现下图:
1.2 然后点击next,出现下图
由GroupId、ArtifactId、Version三个元素直接确定了唯一的一个Maven模块
填写相应的GroupId、ArtifactId
注意,上面的三个属性会出现在Maven的pom.xml文件中
1.3 点击next,出现如下所示的图片
这里的Project name(上面)和Module name(下面)根据上一步的ArtifactId默认生成,这里自己可以随意修改的。这里的项目名称和模块名称是一样的,也可以不一样。
1.4 点击finish,出现如下图所示界面:
中间显示的是pom.xml文件,可以看见之前所选择的GroupId、ArtifactId和Version都出现在pom.xml文件中,右下角这个小标签提示Maven projects need to be imported(Maven项目需要导入),可以点击下面的Import Changes选项,导入所发生的变化,以后的Maven项目的pom.xml文件发生变化时,右下角都会提醒,自己可以选择性的导入相应的变化。
第二步:构建基于Maven和SpringMVC的Web项目目录结构
2.1 在上面点击finish后的Web项目目录结构如下图所示:
1.2 现在对上面的Web项目目录结构做相应的更改,得到如下所示的项目目录结构
第三步:一些必须的准备工作
3.1 File->Project Stricture设置(在整个软件界面的上方也能看到Project Structure前面的图标,点击进去,同样设置),如下图:
3.2 先进行Project的设置,这里最重要的就是Project SDK的设置,其他的默认就可以了。下面的Project compiler output指示了项目编译后,生成的相应文件都放在哪!所以编译后整个目录结构是会多一个out文件夹的。
3.2 现在进行Modules的设置
3.2.1 可以看到Modules有三个重要标签,Source标签已经显示出来了,这里不用设置,默认就好,如下如所示:
3.2.2 再来看Path标签,重要的Compile output标签,选着第二项,可以发现,项目编译后的classes文件都放在target目录下,所以后面的目录结构也新增了一个target文件夹。
3.2.3 设置Dependecies标签,这里很重要
(1) 导入依赖JAR包,点击右边的+,然后选择第一个选项Jars or Directories
方框1:里面的jar包路径,选择自己jar包所在的位置就好
方框2:选择相应的jar包,然后点击OK导入
导入后的结果如下所示:
这里的导入的Jar包是作为外部库(External Librarise)存在的,可以在Web项目目录结构中看到:
(2) 这里先新增一个web结构,开发web项目必须要添加此配置,主要是对Web.xml和Web根目录做一个配置,否则最后项目运行时,会出现404错误
新增前:
新增后:
新增后以及配置前:
这里要根据你实际的Web项目目录来进行路径设置:
实际Web项目目录结构如下:
配置后的结果如下:
路径设置好后:
会发现相应的图标发生了变化,主要是web.xml和文件夹webapp:
配置前:
配置后:
到目前为止,Modules部分就全都配置好了,不过可以看到上面的图里面有一个警告:Web Facet resources are not included in an artifact,这里我们在Artifact设置部分(下面)来解决;
3.3 Artifact部分设置: 这里设置的主要是看最后我们的项目是以怎么一种形式发布,web项目的发布一般选择war包的形式进行发布,不需要直接发布源代码。
配置前,可以发现中间部分什么都没有:
点击+,进行配置:
选择From Modules:
点击OK:
到此为止,Project Structure就全部设置好了
第四步,代码、配置文件整理
4.1 控制器Controller相关代码,这里是基于XML配置的方式,控制器的实现需要实现Controller接口
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 package com.wangfei.firstspringmvc.controller; 2 3 4 import org.springframework.web.servlet.ModelAndView; 5 import org.springframework.web.servlet.mvc.Controller; 6 7 import javax.servlet.http.HttpServletRequest; 8 import javax.servlet.http.HttpServletResponse; 9 10 public class IndexController implements Controller{ 11 12 public IndexController(){ 13 14 } 15 16 17 public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception { 18 19 ModelAndView mv = new ModelAndView("index.jsp"); 20 mv.addObject("message","Hello Spring MVC"); 21 22 return mv; 23 } 24 }
1 package com.wangfei.firstspringmvc.controller; 2 3 4 import org.springframework.web.servlet.ModelAndView; 5 import org.springframework.web.servlet.mvc.Controller; 6 7 import javax.servlet.http.HttpServletRequest; 8 import javax.servlet.http.HttpServletResponse; 9 10 public class IndexController implements Controller{ 11 12 public IndexController(){ 13 14 } 15 16 17 public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception { 18 19 ModelAndView mv = new ModelAndView("index.jsp"); 20 mv.addObject("message","Hello Spring MVC"); 21 22 return mv; 23 } 24 }
4.2 web.xml文件配置,这里主要配置的是处理客户端浏览器发出请求的前端控制器DispatcherServlet,既然是一个Servlet,所以就和Servlet的配置很类似:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 5 http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> 6 7 8 <!-- 配置SpringMVC的请求处理接口 前端控制器--> 9 <servlet> 10 <servlet-name>firstspringmvc</servlet-name> 11 <servlet-class> 12 org.springframework.web.servlet.DispatcherServlet 13 </servlet-class> 14 <load-on-startup>1</load-on-startup> 15 </servlet> 16 <servlet-mapping> 17 <servlet-name>firstspringmvc</servlet-name> 18 <url-pattern>/</url-pattern> 19 </servlet-mapping> 20 </web-app>
1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 5 http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> 6 7 8 <!-- 配置SpringMVC的请求处理接口 前端控制器--> 9 <servlet> 10 <servlet-name>firstspringmvc</servlet-name> 11 <servlet-class> 12 org.springframework.web.servlet.DispatcherServlet 13 </servlet-class> 14 <load-on-startup>1</load-on-startup> 15 </servlet> 16 <servlet-mapping> 17 <servlet-name>firstspringmvc</servlet-name> 18 <url-pattern>/</url-pattern> 19 </servlet-mapping> 20 </web-app>
注意这里的<servlet-name>标签里面的名字firstspringmvc是可以随便取的,不是固定的;但是下面的<servlet-mapper>标签里面的<servlet-name>里面的名字要和上面的一致
4.3 firstspringmvc-servlet.xml的配置;这里的文件名格式为: 模块名-servlet.xml 这里绝不不能错,错了以后你会发现tomact可以正常运行,但是访问index.jsp文件时就会报错:报错如下所示
具体错误如下:
1 Could not open ServletContext resource [/WEB-INF/firstspringmvc-servlet.xml]
这里已经提示你找不到firstspringmvc-servlet.xml文件,所以只需要把你的.xml文件改成firstspringmvc-servlet.xml这个名字就好
具体的firstspringmvc-servlet.xml配置如下:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 <?xml version="1.0" encoding="UTF-8"?> 2 3 <beans xmlns="http://www.springframework.org/schema/beans" 4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 5 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> 6 7 <!--[注意]此处的xml文件的名称为 模块名-servlet.xml,而不是 项目名-servlet.xml--> 8 <!-- vivo-firstspringmvc这个是项目名 旁边的firstspringmvc为模块名--> 9 10 <!--编写处理器映射器:拦截URL--> 11 <bean id="simpleUrlHandlerMapping" 12 class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> 13 <property name="mappings"><!--这里的name值不是随便写的--> 14 <props> 15 <!--对于浏览器发出的url(/index)请求,通过前端控制器交给处理器映射器,然后找到合适的控制器(handler)来进行处理--> 16 <prop key="/index">indexController</prop> 17 </props> 18 </property> 19 </bean> 20 21 <!--通过XML装配bean--> 22 <!--这里声明bean的id名称,是为了方便引用(见上面的处理器拦截器)--> 23 24 <bean id="indexController" class="com.vivo.firstspringmvc.controller.IndexController"></bean> 25 </beans>
1 <?xml version="1.0" encoding="UTF-8"?> 2 3 <beans xmlns="http://www.springframework.org/schema/beans" 4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 5 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> 6 7 <!--[注意]此处的xml文件的名称为 <servlet-name>-servlet.xml,而不是 项目名/模块名-servlet.xml--> 8 9 10 <!--编写处理器映射器:拦截URL--> 11 <bean id="simpleUrlHandlerMapping" 12 class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> 13 <property name="mappings"><!--这里的name值不是随便写的--> 14 <props> 15 <!--对于浏览器发出的url(/index)请求,通过前端控制器交给处理器映射器,然后找到合适的控制器(handler)来进行处理--> 16 <prop key="/index">indexController</prop> 17 </props> 18 </property> 19 </bean> 20 21 <!--通过XML装配bean--> 22 <!--这里声明bean的id名称,是为了方便引用(见上面的处理器拦截器)--> 23 24 <bean id="indexController" class="com.wangfei.firstspringmvc.controller.IndexController"></bean> 25 </beans>
代码中的备注,都是很重要的地方
4.4 JSP代码,里面用JSTL语法,来读取ModelAndView中的message
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8" isELIgnored="false"%> 3 4 <h1>${message}</h1>
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8" isELIgnored="false"%> 3 4 <h1>${message}</h1>
4.5 pom.xml文件不改也可以,web应用可以正常运行,但是模块编译的时候会出现错误:
pom.xml文件配置如下:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 <?xml version="1.0" encoding="UTF-8"?> 2 <project xmlns="http://maven.apache.org/POM/4.0.0" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 5 <modelVersion>4.0.0</modelVersion> 6 7 <groupId>com.vivo.firstspringmvc</groupId> 8 <artifactId>vivo-firstspringmvc</artifactId> 9 <version>1.0-SNAPSHOT</version> 10 11 <!--下面的这一部分不是必须的,但是没有会影响maven模块的编译--> 12 <build> 13 <defaultGoal>compile</defaultGoal> 14 <finalName>vivo-firstspringmvc</finalName> 15 </build> 16 17 18 </project>
1 <?xml version="1.0" encoding="UTF-8"?> 2 <project xmlns="http://maven.apache.org/POM/4.0.0" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 5 <modelVersion>4.0.0</modelVersion> 6 7 <groupId>com.wangfei.firstspringmvc</groupId> 8 <artifactId>vivo-firstspringmvc</artifactId> 9 <version>1.0-SNAPSHOT</version> 10 11 <!--下面的这一部分不是必须的,但是没有会影响maven模块的编译--> 12 <build> 13 <defaultGoal>compile</defaultGoal> 14 <finalName>firstspringmvc</finalName> 15 </build> 16 17 18 </project>
第五步,配置运行环境,主要是Maven的配置和Tomcat的配置,如下图所示1处,2处是之前的Project Structure设置(快捷键Shift+Alt+Ctrl+S)
5.1 Maven的配置
1处的名字可以随便取,2处的配置很重要,这里需要根据你自己的maven版本以及settings.xml文件和repository文件所在的路径进行配置
5.2 Tomcat的配置
5.2.1 首先是server的配置:
方框1: 名字可以随便取
方框2:tomcat的版本根据自己的设定
方框3:这里主要是对虚拟机VM的设置,比如字符编码设置-Dfile.encoding=UTF-8
方框4:这是很重要,主要是选取什么War包进行Deployment,【这里和之前的Project Structure里面Modulers的Web设置有很大关系】点击Fix后如下图所示:
第六步,运行: