前言
springmvc和mybatis是当前最流行的创建java web项目的框架组合,有了它们就能创建一个简单的Web项目。笔者将相关内容以系列文的形式撰写,本文将详细演示如何搭建起一个最简单的web应用骨架。
由于涉及到的内容比较多,深究起来细节非常多且繁琐,所以有些内容并不会讲得很细,仅仅对过程进行大致描述。按理来说,要理解本系列文章需要一定的基础,包括:
- spring基础
- J2EE基础
- 数据库基础
有了上述基础,看起来就会比较轻松。如果基础计较薄弱,也可以直接从本文中的内容开始着手,遇到不清楚的内容再查资料,这样就可以有的放矢。
本文的主要内容包括:
- 相关的知识点概要介绍;
- 安装eclipse、maven等相关开发工具
- 使用springMVC搭建一个简单的Web应用。
相关知识介绍
在正式介绍创建步骤之前,先简单的介绍了其中会涉及到的一些软件和工具。
- Maven:基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。其最重要的功能是自动下载所需的依赖包,让开发者再也不用为下载依赖包而发愁了!
- Jetty:一个开源的servlet容器,它为基于Java的web容器,例如JSP和servlet提供运行环境。Jetty是使用Java语言编写的,它的API以一组JAR包的形式发布。它可以嵌入在应用程序内部,作为web容器对外提供服务。
- Springmvc:Spring框架中的一个子模块,提供了构建 Web 应用程序的全功能 MVC 模块。
- Mybatis:本是apache的一个开源项目iBatis,后迁移到google code,并改名为Mybatis。它是一个半自动的ORM(对象-关系映射)框架。我们可以通过编写原生的SQL语句来操作数据库。
要准备的东西
工欲善其事,必先利其器。Java环境是必须要事先搭好的,具体搭建步骤可以看这里。在正式搭建框架之前,还需要安装相关的环境和软件。下面的内容是针对Java初学者,如果是“老鸟”,请忽略。
安装Maven
进入Maven的官方下载站点,下载Maven安装包。直接下载如图所示的安装版本(*-bin.zip),就不必要自己编译了。
注意,不同版本的Maven要求的环境不一样,如果自己电脑不满足最新版本的要求的话,可进入这里或者这里下载更低版本。
将下载下来的压缩包直接解压安装成功,解压后的目录结构如下图所示。请记住Maven的安装位置。
安装Eclipse
Eclipse是最流行的Java集成开发工具(IDE),功能十分强大。虽然近年出现了以IntelliJ IDEA为代码的IDE强力重启,但其仍是使用最广泛的Java IDE。
从官网下载最新版本(代号为Mars)的Eclipse,可选择下图所示的两种不同类型的版本。for java EE版本针对Java企业级开发环境,for java版本针对普通Java开发环境。可以看到for java EE版本比for java版本要大很多,这是因为它集成了更多的功能插件,所以功能也更加强大。不过,也正是由于其功能集成更多,导致其启动速度更慢。可以根据自己电脑配置下载不同的版本,笔者推荐for java的版本。注意,也请根据自己电脑操作系统的版本,下载不同位数的版本。
下载完成后,直接解压即可。解压缩之后的目录结构如下图所示,双击eclipse.exe
即可运行eclipse。
安装Jetty和Maven插件
安装Jetty
接下来安装eclipse下的Jetty插件,有两种安装方式:在线安装和安装包安装。
- 在线安装。
运行eclipse,点击菜单栏中的Help->Eclipse Marketplace菜单,在搜索框中输入jetty并回车。搜索过程可能会很慢,因为毕竟服务器在国外。选择第一条搜索结果,并点击【install】按钮安装插件。按照下面的图所示的步骤即可开始在线安装jetty插件。最后点击【finish】按钮后,等待期下载并自动安装即可。
安装完成后,eclipse会提示是否restart,点击restart重启。点击【Run】->【Run Configurations】菜单,如果侧边菜单栏中出现下图中的Jetty WebApp则表示安装成功!
- 安装包安装
在这里下载Jetty插件安装包,将安装包直接丢入eclipse安装目录下的plugins目录下即可。譬如笔者的eclipse安装目录为:D:\ProgramFiles\eclipse-java-luna-SR2-win32-x86_64\eclipse
,则将下载的安装包放入D:\ProgramFiles\eclipse-java-luna-SR2-win32-x86_64\eclipse\plugins
目录下即可。按照上面的验证步骤即可验证Jetty插件是否成功安装
上面的安装方式不仅仅针对Jetty插件,所有eclipse插件都可以用类似的方法进行安装。通过情况下,只有运气非常好才能一次安装成功,可能会出现很多种错误。如果安装失败,可以根据相应的错误信息找度娘或者谷歌找寻解决方案
安装Maven插件
一般说来,下载的较高版本的eclipse中已自带了Maven插件,所以无需安装。由于内置的版本可能比较旧,我们也可以手动配置Maven,下面就用自己下载的Maven来替换掉它。
打开eclipse,点击【Windows】->【Preferences】,弹出的窗口面板就是eclipse的配置主面板。选择【Maven】->【Installations】,点击【Add】按钮。在弹出的窗口中点击【Directory…】按钮,在文件选择器中选择之前安装的Maven的路径,然后点击【Finish】。在复选框中选中刚刚添加的Maven,点击【OK】按钮即可。
一步一步搭建Web工程
好了,刀已经磨好了,下面就正式进入开发阶段。
创建简单的Maven Web工程
先创建一个Maven Web工程,然后在工程的基础上编写代码。
1、打开eclipse软件,依次点击“File”->“New”->“Other”,弹出eclipse的工程选择窗口。
2、点击“Maven”菜单,选择下拉菜单中的“Maven Project”子菜单。
3、勾选【Create a simple project】的复选框,点击“Next >”。
4、填写工程信息如图所示。
上面的主要信息的含义如下:
- Group Id:项目所属组织的唯一标识符,通常以公司地址+部门的方式填写。每个不同的部分以“.”号分开,所表示的范围从左至右依次减小。目标是从Group Id就能看到该工程出自哪里。譬如Group Id为
org.springframework
一看就知道是属于Spring。 - Artifact Id:项目在组织内的唯一标识符,一般就是项目的名称。
- Version:项目的版本信息。如果是以SNATSHOT结尾,则表示该版本不是稳定版本。
- Packaging:项目的打包方式,由于是web项目,这里选择war。
点击“Finish”就创建了一个简单的Maven工程,下图是该工程的目录结构。
其中:
- src/main/java目录放置Java源代码
- src/main/resources目录放置资源文件(如配置文件)
- src/test/java目录方式一些测试用例
- src/test/resources目录方式测试利用所需的资源文件
加入SpringMVC框架
好了,接下来在所创建的Maven工程中加入SpringMVC的内容,并且创建一个简单的用例来测试是否创建成功。首先看看加入SpringMVC后的整个代码的结构,这是一个SpringMVC项目的最简单、最基本的结构。
下面贴一下各个文件的内容,并对核心内容做了相应的注释。
1、pom.xml:Maven要求的文件。
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>xiale.demo.blog</groupId>
<artifactId>spring-mybatis-webapp</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>spring-mybatis-webapp</name>
<description>简单的spring+mybatis的web应用</description>
<properties>
<spring.version>4.2.0.RELEASE</spring.version>
</properties>
<!-- 配置项目依赖 -->
<dependencies>
<!-- spring framework -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</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-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- serlvet jsp -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
<type>jar</type>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
</project>
2、web.xml:jave ee所需要的文件。
<?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">
<display-name>springmvc+mybatis web项目</display-name>
<!-- 过滤器,所有输出的数据都使用UTF-8编码 -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 创建一个Servlet,这是配置SpringMVC的关键。 -->
<servlet>
<servlet-name>dispatch</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatch</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
3、dispatch-servlet.xml:spring mvc的核心文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
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.0.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
<!-- JSP视图解析器 -->
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix">
<value>/WEB-INF/jsp/</value>
</property>
<property name="suffix">
<value>.jsp</value>
</property>
</bean>
<!-- 配置Spring可识别特定注解 -->
<context:annotation-config/>
<!-- 配置Spring要在哪些基础包下扫描主机 -->
<context:component-scan base-package="demo.controller"/>
<!-- 配置静态资源的位置及其pattern -->
<mvc:resources location="/static/" mapping="/static/**"/>
<!-- 配置Spring MVC可识别Controller等注解 -->
<mvc:annotation-driven />
</beans>
4、IndexController:用于检测可用性的一个简单控制器。
package demo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* Index控制器,拦截请求并进行业务逻辑处理。
* @author xialei
* @version 1.0 2016年3月21日下午8:38:45
*/
@Controller
public class IndexController {
/**
* 主页映射。表示拦截url path为"/index"的请求。
* @return 返回String类型的数据,表示不附加任何数据,直接将请求转发到index.jsp。
*/
@RequestMapping("/index")
public String index() {
return "index";
}
}
4、index.jsp:与IndexController
中配置的@RequestMapping("/index")
所对应的jsp文件。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html >
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Hello</title>
</head>
<body>
Hello World!
</body>
</html>
大功告成,现在来试着运行一下这个项目,这时需要用到之前安装的Jetty插件。由于是第一次使用Jetty应用,需要进行下面的步骤来生成一个Jetty应用。
首先,依次点击“Run”->Debug Configurations..”。
其次,选中“Jetty Webapp”,点击左上角的图形按钮新建一个Jetty运行实例如下。
最后,选中刚刚新建的Jetty实例(通常为工程名),点击“Browse…”,在弹出的对话框中选择新创建的Web项目。点击“OK”->“Run”就开始运行这个Web项目了。如果Console(控制台)中没有出现红色的异常信息,那么恭喜你成功地创建了一个SpringMVC项目。
如果出现下面的信息,则表示项目成功运行。
____ ___ __ __ __ ___
/ __/___/ (_)__ ___ ___ __ / /__ / /_/ /___ __ ( _ )
/ _// __/ / / _ \(_-</ -_) / // / -_) __/ __/ // / / _ |
/___/\__/_/_/ .__/___/\__/ \___/\__/\__/\__/\_, / \___/
/_/ /___/
Configuration: C:\Users\xialei\AppData\Local\Temp\eclipseJettyPlugin.spring_mybatis_webapp.xml
Version: 8.1.12.v20130726
Context: /
Port: 8080
Classpath: E:/repositorys/mavenRepository/aopalliance/aopalliance/1.0/aopalliance-1.0.jar
E:/repositorys/mavenRepository/commons-logging/commons-logging/1.2/commons-logging-1.2.jar
E:/repositorys/mavenRepository/org/aspectj/aspectjweaver/1.8.6/aspectjweaver-1.8.6.jar
E:/repositorys/mavenRepository/org/springframework/spring-aop/4.2.0.RELEASE/spring-aop-4.2.0.RELEASE.jar
E:/repositorys/mavenRepository/org/springframework/spring-aspects/4.2.0.RELEASE/spring-aspects-4.2.0.RELEASE.jar
E:/repositorys/mavenRepository/org/springframework/spring-beans/4.2.0.RELEASE/spring-beans-4.2.0.RELEASE.jar
E:/repositorys/mavenRepository/org/springframework/spring-context-support/4.2.0.RELEASE/spring-context-support-4.2.0.RELEASE.jar
E:/repositorys/mavenRepository/org/springframework/spring-context/4.2.0.RELEASE/spring-context-4.2.0.RELEASE.jar
E:/repositorys/mavenRepository/org/springframework/spring-core/4.2.0.RELEASE/spring-core-4.2.0.RELEASE.jar
E:/repositorys/mavenRepository/org/springframework/spring-expression/4.2.0.RELEASE/spring-expression-4.2.0.RELEASE.jar
E:/repositorys/mavenRepository/org/springframework/spring-jdbc/4.2.0.RELEASE/spring-jdbc-4.2.0.RELEASE.jar
E:/repositorys/mavenRepository/org/springframework/spring-tx/4.2.0.RELEASE/spring-tx-4.2.0.RELEASE.jar
E:/repositorys/mavenRepository/org/springframework/spring-web/4.2.0.RELEASE/spring-web-4.2.0.RELEASE.jar
E:/repositorys/mavenRepository/org/springframework/spring-webmvc/4.2.0.RELEASE/spring-webmvc-4.2.0.RELEASE.jar
E:/workspaces/eclipse/demo-blog/spring-mybatis-webapp/target/classes
2016-03-21 22:42:19.538:INFO:oejs.Server:jetty-8.1.12.v20130726
2016-03-21 22:42:20.168:INFO:/:Initializing Spring FrameworkServlet 'dispatch'
三月 21, 2016 10:42:20 下午 org.springframework.web.servlet.DispatcherServlet initServletBean
信息: FrameworkServlet 'dispatch': initialization started
三月 21, 2016 10:42:20 下午 org.springframework.web.context.support.XmlWebApplicationContext prepareRefresh
信息: Refreshing WebApplicationContext for namespace 'dispatch-servlet': startup date [Mon Mar 21 22:42:20 CST 2016]; root of context hierarchy
三月 21, 2016 10:42:20 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from ServletContext resource [/WEB-INF/dispatch-servlet.xml]
三月 21, 2016 10:42:20 下午 org.springframework.web.servlet.handler.SimpleUrlHandlerMapping registerHandler
信息: Mapped URL path [/static/**] onto handler 'org.springframework.web.servlet.resource.ResourceHttpRequestHandler#0'
三月 21, 2016 10:42:20 下午 org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping register
信息: Mapped "{[/index]}" onto public java.lang.String demo.controller.IndexController.index()
三月 21, 2016 10:42:21 下午 org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter initControllerAdviceCache
信息: Looking for @ControllerAdvice: WebApplicationContext for namespace 'dispatch-servlet': startup date [Mon Mar 21 22:42:20 CST 2016]; root of context hierarchy
三月 21, 2016 10:42:21 下午 org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter initControllerAdviceCache
信息: Looking for @ControllerAdvice: WebApplicationContext for namespace 'dispatch-servlet': startup date [Mon Mar 21 22:42:20 CST 2016]; root of context hierarchy
三月 21, 2016 10:42:21 下午 org.springframework.web.servlet.DispatcherServlet initServletBean
信息: FrameworkServlet 'dispatch': initialization completed in 1170 ms
2016-03-21 22:42:21.442:INFO:oejs.AbstractConnector:Started SelectChannelConnector@0.0.0.0:8080
-------------------------------------------------
Jetty startup finished in 2.256 s.
Used memory: 9.8 MB of 77.5 MB (894.5 MB maximum)
-------------------------------------------------
注意,如果不是第一次在该项目上运行Jetty,如下图所示,先点击工具栏中的红框所示的按钮,在下来应用中选择自己的Jetty应用就可以直接运行了。
我们在浏览器中测试一下是否真的创建成功。打开浏览器,在地址栏中输入http://localhost:8080/index
,如果出现下图所示的内容,则表示web项目成功创建了。
总结
本文介绍了从零开始搭建一个最简单的SpringMVC Web应用,该系列的下一篇介绍如何在应用中加入数据库,并使用mybatis来操作数据库。
本文由xialei原创,转载请说明出处http://hinylover.space/2016/03/23/springmvc-mybatis-createproject-demo-1/。