这里有新鲜出炉的 Java 设计模式,程序狗速度看过来!
Java 程序设计语言
java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 程序设计语言和 Java 平台(即 JavaEE(j2ee), JavaME(j2me), JavaSE(j2se))的总称.
Spring MVC 属于 SpringFrameWork 的后续产品,已经融合在 Spring web Flow 里面.今天先从写一个 Spring MVC 的 HelloWorld 开始,让我们看看如何搭建起一个 Spring mvc 的环境并运行程序,感兴趣的朋友一起学习吧
什么是 Spring MVC
Spring MVC 属于 SpringFrameWork 的后续产品,已经融合在 Spring Web Flow 里面.Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块.使用 Spring 可插入的 MVC 架构,从而在使用 Spring 进行 WEB 开发时,可以选择使用 Spring 的 SpringMVC 框架或集成其他 MVC 开发框架,如 Struts1,Struts2 等.
今天先从写一个 Spring MVC 的 HelloWorld 开始,让我们看看如何搭建起一个 Spring mvc 的环境并运行程序.
软件参数
新建项目
Eclipse:Mars.1 Release (4.5.1)
Tomcat: 8.0.36
JDK:1.8.0_60
Spring-framework:4.0.4.RELEASE
File-New-Other, 选择 Dynamic web project
项目建好之后,目录结构如下:
导入 jar 包
我们基于 Spring mvc 框架进行开发,需要依赖一下的 spring jar 包:
spring-aop-4.0.4.RELEASE.jar
spring-beans-4.0.4.RELEASE.jar
spring-context-4.0.4.RELEASE.jar
spring-core-4.0.4.RELEASE.jar
spring-expression-4.0.4.RELEASE.jar
spring-web-4.0.4.RELEASE.jar
spring-webmvc-4.0.4.RELEASE.jar
commons-logging-1.1.1.jar(用来打印log)
在 WEB-INF 目录下新建 lib 文件夹,并将上面的 jar 包放入其中.
配置文件及编写代码
web.xml(WEB-INF下)
注意:1. line12-15 用于配置 spring mvc 的配置文件的位置和名称,这里说明会新建一个 springmvc.xml 的配置文件
<?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">
<!-- 配置DispatchcerServlet -->
<servlet>
<servlet-name>springDispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 配置Spring mvc下的配置文件的位置和名称 -->
<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>
<servlet-name>springDispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
2. 我们也可以不新建 springmvc.xml,而是用默认的,默认的配置文件格式为 / WEB-INF/[servlet-name]-servlet.xml,对应这里的就是 springDispatcherServlet-servlet.xml
3. 这里的 servlet-mapping 表示拦截的模式,这里是 "/",表示对于所有的请求的拦截,包括静态资源如 html, js, jpg 等.这时候对于静态资源的访问就会报 404 的错误.关于如何解决后面会介绍
Springmvc.xml(scr 下)
在 src 目录下新建 springmvc.xml
注意:1. line12 表示 spring 监听的范围,这里是在 com.jackie.springmvc 下
<?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-4.0.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
<!-- 配置自动扫描的包 -->
<context:component-scan base-package="com.jackie.springmvc">
</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>
</beans>
2. line15-18, 是添加了一个视图解析器,用于把在控制器中 handler 的结构解析为实际的物理视图,这个要配合 controller 类来解析,详见下面.
HelloWorld.java(com.jackie.springmvc.handlers下)
* 1. 使用RequestMapping注解来映射请求的URL
package com.jackie.springmvc.handlers;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class HelloWorld {
/**
* 2. 返回值会通过视图解析器解析为实际的物理视图, 对于InternalResourceViewResolver视图解析器,会做如下解析
* 通过prefix+returnVal+suffix 这样的方式得到实际的物理视图,然后会转发操作
注意:
* "/WEB-INF/views/success.jsp"
* @return
*/
@RequestMapping("/helloworld")
public String hello(){
System.out.println("hello world");
return "result";
}
}
1. 首先要在类的前面添加 "Controller" 注解,表示是 spring 的控制器,这里会写一个方法 hello()
2. hello 方法上方有一个 @RequestMapping, 是用于匹配请求的路径,比如这里匹配的请求路径就是 "http://localhost:8080/springTest/springmvc/helloworld",即当 tomcat 服务启动后,在浏览器输入这个 url 时,如果在这个方法打断点了,就会跳入该方法.
3. 这个 return 的结果不是乱写的,这个返回的字符串就是与上面 springmvc.xml 中 line15-18 进行配合的,springmvc.xml 中声明了 prefix 和 suffix,而夹在这两者之间的就是这里返回的字符串,所以执行完这个方法后,我们可以得到这样的请求资源路径 "/WEB-INF/views/success.jsp",这个 success.jsp 是需要我们新建的
index.jsp(WebContent 下)
在新建 success.jsp 之前,我们需要有一个入口,也就是这里的 index.jsp
当访问 index.jsp 时,页面上会展示一个超链接,点击超链后,url 中的地址就会发生跳转,由 "http://localhost:8080/springTest/index.jsp" 跳转到 "http://localhost:8080/springTest/helloworld",而这个 url 请求就会进入 HelloWorld 中的 hello 方法,因为其与该方法上的 "/helloworld" 匹配.
<%@ 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>
<a href="helloworld" rel="external nofollow" >hello world</a>
</body>
</html>
success.jsp(WEB-INF/views 下)
该页面是作为请求成功后的相应页面
至此,我们完成了基于 Spring mvc 框架的 HelloWorld 程序的开发,包括要依赖的 jar 包,配置的文件,控制器代码的编写和展示页面的编写等.
<%@ 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>
<h4>Success Page</h4>
</body>
</html>
除此以外,再介绍下整个配置过程中遇到的一些小问题:1. tomcat 服务器的添加
从前面的介绍可以看出,我们的程序是通过浏览器发请求来获取想要的页面,那么这里就免不了要有一个 web 服务器,这里就是 tomcat.
首先你需要下载个 tomcat,然后在 eclipse->windows->preference->servers 中绑定这个 tomcat 服务器;
其次你需要在你新建的 spring mvc 项目中添加 tomcat 的支持,否则在新建的 jsp 文件中会提示报错 "The superclass javax.servlet.http.HttpServlet was not found on the Java Build Path"
右键项目 ->build path->configure build path->add library->server runtime, 选择你的 tomcat 即可
有了 tomcat 服务器,你就可以在 index.jsp 上右键 run on server, 选择你的 tomcat 服务器,这样就可以启动 tomcat 服务,帮助你完成网页的请求和响应操作.
2. spring mvc 如何访问静态资源
关于使用 spring mvc 处理静态资源,比如 html(发现之前的 springmvc.xml 中定义为 jsp 结尾就可以成功跳转,但是如果改为 html 并在 web-inf 下面新建了 html 文件后,并将 suffix 这里的 ".jsp" 改为 ".html",无法跳转到想要的 html 页面,并且给出 404 错误,同时 console 给出错误信息为:No mapping found for HTTP request with URI [/springTest/WEB-INF/views/result.html] in DispatcherServlet)
最后发现是需要让 spring 明确要处理静态资源,原来的 web.xml 中只有
其匹配的都是 controller 中类似 @RequestMapping("/springmvc/helloworld") 这样的注解配置的请求,而对于类似 html/CSS/jpg 等资源的访问就会得不到,所以需要在 web.xml 中加入以下类型的支持
<servlet-mapping>
<servlet-name>springDispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
这样就可以保证 spring 能够拦截并处理静态资源
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.css</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.gif</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.jpg</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.js</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
这里将 HelloWorld.java 中的 hello 方法改为:
Springmvc.xml 改为:
@RequestMapping("/helloworld")
public String hello(){
System.out.println("hello world");
return "Jackie";
}
总结
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name = "prefix" value="/WEB-INF/views/"></property>
<property name = "suffix" value = ".jpg"></property>
</bean>
以上所述是小编给大家介绍的 Spring MVC 简介,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的.在此也非常感谢大家对 PHPERZ 网站的支持!
来源: http://www.phperz.com/article/18/0114/354410.html