使用Intellij IDEA从零使用Spring MVC
黑了Java这么多年, 今天为Java写一篇文章吧.
这篇文章主要是想帮助那些刚接触到Java, 同时想从事Java WEB GUI开发的人. 对我而言, 我很早就有想尝试用Java写WEB的想法, 可是没有一次成功过, 不管是用struts, 还是纯JSP, 总是配置不好, tomcat不能正确的运行我的程序.
自打那以后, 我一直在抱怨Java的application, 尤其是要部署于tomcat的, 太难了, 太复杂了. 而且还没有什么文档是专门讲这个, 全部都是讲如何用eclipse配置SSH, 然后开发, 然后部署. 对于一个不想使用eclipse的人, 简直无从下手.
好了, 不多说废话了, 今天我要讲的是Srping MVC的使用和tomcat的部署, 以及如何用maven来管理dependency. 我用的工具是Intellij IDEA, 不过我会说明程序的目录结构是什么样的, 这样不管你用什么IDE, 都可以参考.
- 建立一个空的java项目, 在select type那里, 选择maven module, 项目名字什么的, 随便起一个
- 在下一个页面里, 什么都不改, 什么都不选, 点finish
-
默认打开了pom.xml, 这个是maven的配置文件, 为了让程序能够自动倒入spring mvc和jsp, selvlet等的依赖, 我们在里面加入如下配置:
<properties><java-version>1.7</java-version><org.springframework-version>3.1.3.RELEASE</org.springframework-version></properties><dependencies><!-- Spring --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${org.springframework-version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${org.springframework-version}</version></dependency><!-- servlet jsp and jstl --><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.0.1</version><scope>provided</scope></dependency><dependency><groupId>javax.servlet.jsp</groupId><artifactId>jsp-api</artifactId><version>2.0</version><scope>provided</scope></dependency><dependency><groupId>javax.servlet</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency></dependencies>
-
等待Intellij自动导入里面写的包
- 确保我们有一个跟src目录平级的web目录, 然后在里面简历一个目录叫WEB-INF. 说到这里, 就要说一下tomcat的webapp目录结构了. 首先要有一个WEB-INF目录, 然后在WEB-INF里, 有classes目录: 存放所有代码的目录; lib目录: 存放所有jar文件; web.xml文件, 存放webapp的配置.
-
编辑web.xml文件, 改成如下内容:
<?xml version="1.0" encoding="UTF-8"?><web-appxmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"version="3.0"><!-- Handles all requests into the application --><servlet><servlet-name>appServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>appServlet</servlet-name><url-pattern>/</url-pattern></servlet-mapping></web-app>
这段的内容, 是将url跳转到appServlet配置里, 在appServlet的配置里, 使用servlet-context.xml.
-
servlet-context.xml内容如下:
<?xml version="1.0" encoding="UTF-8"?><beansxmlns="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/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd"><!-- Scans the classpath of this application for @Components to deploy as beans --><context:component-scanbase-package="me.davidx.LearnJava"/><!-- Configures the @Controller programming model --><mvc:annotation-driven/><!-- Resolves view names to protected .jsp resources within the /WEB-INF/views directory --><beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver"><propertyname="prefix"value="/WEB-INF/views/"/><propertyname="suffix"value=".jsp"/></bean></beans>
这段的大概意思是, 自动扫描包”me.davidx.LearnJava”来找到controller定义. 同时, controller都使用@Controller来定义. bean里的定义, 表明所有的View文件都到/WEB-INF/views目录来找, 后缀都为.jsp.
-
在me.davidx.LearnJava包里, 定义一个HomeController类, 这里给一个范例:
package me.davidx.LearnJava.controllers;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.RequestMapping;@ControllerpublicclassHomeController{@RequestMapping("/home")publicString home(Model model){ model.addAttribute("message","hello, world");//return "WEB-INF/views/home.jsp";return"home";}}
-
看完了controller的定义, 我们再来看看view文件: home.jsp:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@ page session="false" %> <html><head><title>Home</title></head><body><h1><c:outvalue="${message}"/></h1><h2>Again!</h2></body></html>
这里使用了jstl, 以前写过jsp的童鞋, 应该一看就明白了.
- 代码工作都完成啦, 下面就是部署了.