Spring MVC 入门 - 框架搭建
感觉网上从环境搭建讲起的教程不多,好多示例也比较复杂,而且也没个图啥的,所以就上一个简单易懂的版本。
有多简单捏?从eclipse建立工程开始,结束后作出一个可以响应请求的Servlet。
在这个文章里面,我们需要 -
建立一个eclipse工程;
编写两个xml;
编写两个jsp页面;
编写一个Java文件。
准备工作 -
Eclipse J2EE版本;
Tomcat 一只;
注:所有斜体字代表-文件名,类名,变量名等可替换内容。
第一步:
使用Eclipse建立动态网页工程。
输入项目名字,点击下一步。
点击下一步。
选上生成web.xml然后点击完成。
创建/WebContent/WEB-INF/Views目录,用于存放JSP网页
创建两个空页面,Index.jsp和hello.jsp。
在Java resources 中创建Java包 bob.sun.controller。
在包中创建一个空的IndexController类
在/WebContent/WEB-INF/中创建springtest-servlet.xml文件。
工程的源码树应该如下图所示:
第二步:
复制Jar包。
在Spring MVC 框架中,框架依赖的Jar包不能像其他Java工程那样在BuildPath里面添加。
添加Jar包需要直接拷贝jar文件到/WebContent/WEB-INF/lib。
Spring MVC依赖于以下的几个包包。
拷贝完了之后在工程树那边右键刷新下工程。
第三步:
打开/WebContent/WEB-INF/web.xml,参照下面的code编辑:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> 3 <display-name>springtest</display-name> 4 <welcome-file-list> 5 <welcome-file>/WEB-INF/Views/index.jsp</welcome-file> 6 </welcome-file-list> 7 <servlet> 8 <servlet-name>springtest</servlet-name> 9 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>10 <load-on-startup>1</load-on-startup> 11 </servlet> 12 13 <servlet-mapping> 14 <servlet-name>springtest</servlet-name> 15 <url-pattern>*.do</url-pattern> 16 </servlet-mapping> 17 18 </web-app>
其中,
<welcome-file-list>指定了整个servlet的首页,这里我们定义为index.jsp。
<servlet>定义了servlet以及所使用的类。由于我们使用的是SpringMVC,所以servlet的类指定到spring的DispatcherServlet。
<servlet-mapping>中的<url-pattern>指定了所有“.do”的请求都由我们刚刚定义的springtest来处理。可以理解为把所有的".do"请求过滤出来交给springtest这个servlet。
第四步:
Spring MVC 框架需要一个上下文配置文件。如果在web.xml中没有定义的话,Spring MVC就会搜素 /WEB-INF这个路径下有木有名字是" [servlet名字]-servlet.xml" 这样的一个配置。我们这里servlet的名字是springtest,那么默认的配置文件名是springtest-servlet.xml。刚才在web.xml中我们并没有指定配置文件是哪个,所以Spring会去自动的找springtest-servlet.xml。
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xmlns:p="http://www.springframework.org/schema/p" 5 xmlns:context="http://www.springframework.org/schema/context" 6 xsi:schemaLocation="http://www.springframework.org/schema/beans 7 http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 8 http://www.springframework.org/schema/context 9 http://www.springframework.org/schema/context/spring-context-3.0.xsd"> 10 11 <context:component-scan base-package="bob.sun.controller" /> 12 <bean id="viewResolver" 13 class="org.springframework.web.servlet.view.UrlBasedViewResolver"> 14 <property name="viewClass" 15 value="org.springframework.web.servlet.view.JstlView" /> 16 <property name="prefix" value="/WEB-INF/Views/" /> 17 <property name="suffix" value=".jsp" /> 18 </bean> 19 </beans>
其中,
<context:component-scan> 告诉Spring去哪个包扫描带有它注释的Java code。Spring的注释是什么呢?在下文的Java 代码里我们会看到。
为了简单起见,这个xxx-servlet.xml只有一个bean,指定了MVC中的V(iew)由哪个类去解析。prefix和suffix两个property指定了View的前缀和后缀。这样如果我们想在Java返回一个View,只需要返回View的名字即可。比如我们想要返回一个/WEB-INF/Views/hello.jsp,由于指定了前缀为/WEB-INF/View,后缀为.jsp,在java中我们只需要返回一个"hello"。
第五步:
编写JSP
index.jsp长这样:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Spring 3.0 MVC demo</title> </head> <body> <a href="hello.do">Say Hello</a> </body> </html>
<a href="hello.do">,当用户点击这个链接时,会向servlet发送一个hello.do的动作。根据我们在web.xml中的定义,"*.do"会交给我们的springtest servlet 处理。
hello.jsp 长这个样子:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 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=ISO-8859-1"> <title>Insert title here</title> </head> <body> <h1>hello spring</h1> Just a simple printing. </body> </html>
值得注意的是,这时在首页中点击hello.do的链接并不会直接跳转到这个页面,因为我们还没有编写Controller。
那么 -
第六步:
编写Java code。
bob.sun.controller.IndexController.java:
package bob.sun.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class IndexController {
@RequestMapping("/hello.do")
public ModelAndView helloMethod(){
String ret = ".... you spring";
return new ModelAndView("hello","ret",ret);
}
}
是的你没看错在这个例子中Java code 就是这么简单。
其中 -
@Controller 这是一个Spring框架的注释,出现在类前面。它表明整个类都是Spring中的C(ontroller)。Controller用于控制View,填充View的数据等。
@RequestMapping("xxx") 这也是一个Spring框架的注释,出现在方法前面,表明这个方法是响应xxx请求的。你也可以在后面加上Http的方法。有关这部分的详情会放在下一篇文章之中。
由于Controller用于控制View,所以这个方法的结尾我返回了一个ModelAndView对象。这个类的构造函数可以接受三个参数。
第一个参数的是一个字符串,表明返回的是哪一个View。你可以返回View的全路径(/WEB-INF/Views/xxx.jsp)。由于我们之前在servlet的配置文件中指定了View的前缀和后缀,所以这里我们只返回View的名字。
如果用两个参数构造这个对象,那么第二个参数为一个Map,包含了传给View的键值对,可以在JSP中调用。
如果用三个参数构造,那么第二个参数就是传给View的参数名称,第三个则是参数的值。
所有的代码就是这些。剩下的步骤是配置一个tomcat server。
第七步:
在Eclipse里面配置tomcat是很简单的。按照下面的图示一步一步来就可以。
首先选择将工程放在server 上 debug。
选择tomcat 7
选择tomcat的解压位置和jre。
配置工程,点击结束。
之后tomcat会启动,加载Servlet,显示我们的主页。点击主页上的链接,Controller会响应并返回View。
结束。
其实我也是刚入门,摸爬滚打两天总结出俩文档,又抽出来这么一个博客。
有好多东西没有说到。Spring的注释(@Component),参数传递(@RequestParam),Tiles,等,放到下次一并讲吧。