原创不易,转载请注明出处:SpringMVC入门教程及其原理讲解和实例代码下载
代码下载地址:http://www.zuidaima.com/share/1751859714182144.htm
SpringMVC框架介绍
Spring框架提供了构造Web应用程序的全能MVC模块。Spring MVC分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行制定。是一个标准的MVC框架。
SpringMVC框架图
那你猜一猜哪一部分应该是哪一部分?
SpringMVC接口解释
DispatcherServlet接口:
Spring提供的前端控制器,所有的请求都有经过它来统一分发。在DispatcherServlet将请求分发给Spring Controller之前,需要借助于Spring提供的HandlerMapping定位到具体的Controller。
HandlerMapping接口:
能够完成客户请求到Controller映射。
Controller接口:
需要为并发用户处理上述请求,因此实现Controller接口时,必须保证线程安全并且可重用。Controller将处理用户请求,这和Struts Action扮演的角色是一致的。一旦Controller处理完用户请求,则返回ModelAndView对象给DispatcherServlet前端控制器,ModelAndView中包含了模型(Model)和视图(View)。从宏观角度考虑,DispatcherServlet是整个Web应用的控制器;从微观考虑,Controller是单个Http请求处理过程中的控制器,而ModelAndView是Http请求过程中返回的模型(Model)和视图(View)。
ViewResolver接口:
Spring提供的视图解析器(ViewResolver)在Web应用中查找View对象,从而将相应结果渲染给客户。
SpringMVC运行原理
1. 客户端请求提交到DispatcherServlet
2. 由DispatcherServlet控制器查询一个或多个HandlerMapping,找到处理请求的Controller
3. DispatcherServlet将请求提交到Controller
4. Controller调用业务逻辑处理后,返回ModelAndView
5. DispatcherServlet查询一个或多个ViewResoler视图解析器,找到ModelAndView指定的视图
6. 视图负责将结果显示到客户端
SpringMVC运行实例
Account类:
01 |
package com.pb.entity;
|
02 |
03 |
public class Account {
|
04 |
private String cardNo;
|
05 |
private String password;
|
06 |
private float balance;
|
07 |
public String getCardNo() {
|
08 |
return cardNo;
|
09 |
}
|
10 |
public void setCardNo(String cardNo) {
|
11 |
this .cardNo = cardNo;
|
12 |
}
|
13 |
public String getPassword() {
|
14 |
return password;
|
15 |
}
|
16 |
public void setPassword(String password) {
|
17 |
this .password = password;
|
18 |
}
|
19 |
public float getBalance() {
|
20 |
return balance;
|
21 |
}
|
22 |
public void setBalance( float balance) {
|
23 |
this .balance = balance;
|
24 |
}
|
25 |
|
26 |
} |
LoginController类:
01 |
package com.pb.web.controller;
|
02 |
03 |
import java.util.HashMap;
|
04 |
import java.util.Map;
|
05 |
06 |
import javax.servlet.http.HttpServletRequest;
|
07 |
import javax.servlet.http.HttpServletResponse;
|
08 |
09 |
import org.springframework.web.servlet.ModelAndView;
|
10 |
import org.springframework.web.servlet.mvc.AbstractController;
|
11 |
12 |
import com.pb.entity.Account;
|
13 |
14 |
public class LoginController extends AbstractController {
|
15 |
private String successView;
|
16 |
private String failView; //这两个参数是返回值传给applicationContext.xml,进行页面分配
|
17 |
|
18 |
public String getSuccessView() {
|
19 |
return successView;
|
20 |
}
|
21 |
public void setSuccessView(String successView) {
|
22 |
this .successView = successView;
|
23 |
}
|
24 |
public String getFailView() {
|
25 |
return failView;
|
26 |
}
|
27 |
public void setFailView(String failView) {
|
28 |
this .failView = failView;
|
29 |
}
|
30 |
@Override
|
31 |
protected ModelAndView handleRequestInternal(HttpServletRequest request,
|
32 |
HttpServletResponse response) throws Exception {
|
33 |
// TODO Auto-generated method stub
|
34 |
String cardNo=request.getParameter( "cardNo" );
|
35 |
String password=request.getParameter( "password" );
|
36 |
Account account =getAccount(cardNo,password);
|
37 |
Map<String ,Object> model= new HashMap<String,Object>();
|
38 |
if (account != null ){
|
39 |
model.put( "account" , account);
|
40 |
return new ModelAndView(getSuccessView(),model);
|
41 |
} else {
|
42 |
model.put( "error" , "卡号和密码不正确" );
|
43 |
return new ModelAndView(getFailView(),model);
|
44 |
}
|
45 |
} //本应该这个方法写在模型层,这地方直接给放在了逻辑层这个地方偷懒了。
|
46 |
public Account getAccount(String cardNo,String password){
|
47 |
if (cardNo.equals( "123" )&&password.equals( "123" )){
|
48 |
Account account = new Account();
|
49 |
account.setCardNo(cardNo);
|
50 |
account.setBalance( 88 .8f);
|
51 |
return account;
|
52 |
} else {
|
53 |
return null ;
|
54 |
}
|
55 |
}
|
56 |
57 |
} |
applicationContext.xml
01 |
<?xml version= "1.0" encoding= "UTF-8" ?>
|
02 |
03 |
<beans xmlns= "http://www.springframework.org/schema/beans"
|
04 |
xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
|
05 |
xmlns:aop= "http://www.springframework.org/schema/aop"
|
06 |
xmlns:tx= "http://www.springframework.org/schema/tx"
|
07 |
xsi:schemaLocation="http: //www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
|
08 |
http: //www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
|
09 |
http: //www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
|
10 |
<bean id= "loginController" class = "com.pb.web.controller.LoginController" >
|
11 |
<property name= "successView" value= "showAccount" ></property>
|
12 |
<property name= "failView" value= "login" ></property>
|
13 |
</bean>
|
14 |
<bean id= "urlMapping" class = "org.springframework.web.servlet.handler.SimpleUrlHandlerMapping" >
|
15 |
<property name= "mappings" >
|
16 |
<props>
|
17 |
<prop key= "/login.do" >loginController</prop>
|
18 |
</props>
|
19 |
</property>
|
20 |
</bean>
|
21 |
<bean id= "viewResolver" class = "org.springframework.web.servlet.view.InternalResourceViewResolver" >
|
22 |
<property name= "prefix" value= "/" ></property>
|
23 |
<property name= "suffix" value= ".jsp" ></property>
|
24 |
</bean>
|
25 |
</beans> |
Jsp页面:
01 |
<%@ page language= "java" contentType= "text/html; charset=GB18030"
|
02 |
pageEncoding= "GB18030" %>
|
03 |
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd" >
|
04 |
<html> |
05 |
<head> |
06 |
<meta http-equiv= "Content-Type" content= "text/html; charset=GB18030" >
|
07 |
<title>Insert title here</title> |
08 |
</head> |
09 |
<body> |
10 |
<a href= "login.jsp" >进入</a>
|
11 |
12 |
</body> |
13 |
</html> |
login.jsp
01 |
<%@ page language= "java" contentType= "text/html; charset=GB18030"
|
02 |
pageEncoding= "GB18030" %>
|
03 |
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd" >
|
04 |
<html> |
05 |
<head> |
06 |
<meta http-equiv= "Content-Type" content= "text/html; charset=GB18030" >
|
07 |
<title>Insert title here</title> |
08 |
</head> |
09 |
<body> |
10 |
${error } |
11 |
<form action= "login.do" method= "post" >
|
12 |
账号登陆<br>
|
13 |
<hr>
|
14 |
卡号:<input type= "text" name= "cardNo" ><br>
|
15 |
密码:<input type= "text" name= "password" ><br>
|
16 |
<input type= "submit" value= "登陆" >
|
17 |
</form>
|
18 |
19 |
</body> |
20 |
</html> |
showAccount.jsp
01 |
<%@ page language= "java" contentType= "text/html; charset=GB18030"
|
02 |
pageEncoding= "GB18030" %>
|
03 |
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd" >
|
04 |
<html> |
05 |
<head> |
06 |
<meta http-equiv= "Content-Type" content= "text/html; charset=GB18030" >
|
07 |
<title>Insert title here</title> |
08 |
</head> |
09 |
<body> |
10 |
账户信息<br>
|
11 |
卡号:${account.cardNo }<br>
|
12 |
密码:${account.password }<br>
|
13 |
钱数:${account.balance }<br>
|
14 |
</body> |
15 |
</html> |
Web.xml
01 |
<? xml version = "1.0" encoding = "UTF-8" ?>
|
02 |
< web-app xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
|
03 |
xmlns = "http://java.sun.com/xml/ns/j2ee"
|
04 |
xmlns:javaee = "http://java.sun.com/xml/ns/javaee"
|
05 |
xmlns:web = "http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation = "http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version = "2.4" >
|
06 |
< welcome-file-list >
|
07 |
< welcome-file >index.jsp</ welcome-file >
|
08 |
</ welcome-file-list >
|
09 |
< servlet >
|
10 |
< servlet-name >Dispatcher</ servlet-name >
|
11 |
< servlet-class >org.springframework.web.servlet.DispatcherServlet</ servlet-class >
|
12 |
< init-param >
|
13 |
< param-name >contextConfigLocation</ param-name >
|
14 |
< param-value >classpath:applicationContext.xml</ param-value >
|
15 |
</ init-param >
|
16 |
</ servlet >
|
17 |
< servlet-mapping >
|
18 |
< servlet-name >Dispatcher</ servlet-name >
|
19 |
< url-pattern >*.do</ url-pattern >
|
20 |
</ servlet-mapping >
|
21 |
</ web-app >
|
工程原码:原码
SpringMVC总结
以上就是我理解的Spring MVC可能不够深刻。其实对于任何的框架来说,一个框架是一个可复用设计,框架的最大的好处就是复用。每个框架都有存在的理由,那Spring MVC的理由是什么呢?
只有各个框架之间彼此了解他们之间的优缺点,使用场合,使用原理,才能让我们的更快的成长。
相关推荐
在教程资料中,教案部分通常会详细讲解SpringMVC和MyBatis的原理,包括它们的核心概念、配置、使用方法以及最佳实践。课堂笔记则可能包含了讲师在教学过程中的重点讲解和实例演示,对于理解和回顾课程内容非常有帮助...
在这个"springMVC笔记以及实例"的压缩包中,可能包含了关于SpringMVC的详细讲解、代码示例,特别是关于文件上传和跨服务器文件传输的部分。 1. **SpringMVC基础**:SpringMVC通过DispatcherServlet作为前端控制器...
这些教材由知名IT专家开涛撰写,深入浅出地讲解了Spring框架和SpringMVC的相关知识,对于想要掌握这两项技术的开发者来说,是非常宝贵的资源。 Spring框架是Java企业级应用开发中的核心框架,它提供了全面的依赖...
在IT行业中,构建Web应用程序是常见的任务之一,而Spring、SpringMVC和Mybatis(SSM)框架的组合是Java开发者常使用的工具。...这不仅有助于理解和掌握SSM框架的工作原理,也为实际的Web开发打下了坚实的基础。
《Java EE企业级应用开发教程Spring+Spring MVC+MyBatis》是一本深入探讨Java企业级应用程序开发的书籍,源代码包含多个章节的实例,旨在帮助读者理解和掌握使用Spring、Spring MVC和MyBatis框架进行实际开发的关键...
这个环境的搭建涉及到多个组件的配置和整合,下面将详细讲解SSH环境的搭建过程及其核心知识点。 首先,Spring是SSH框架中的核心,它提供了依赖注入(DI)和面向切面编程(AOP)等功能,极大地简化了Java应用的开发。在...
通过这个实战案例,开发者不仅可以深入理解这三个框架的原理和使用方法,还能学习到如何在实际项目中整合它们,提升开发效率和代码质量。同时,对于初学者来说,这是一个很好的学习资源,有助于掌握企业级Java Web...
本文将围绕"powernode_springmvc源码.zip"中的各个章节,深入剖析 Spring MVC 的核心概念和工作原理。 1. **第一章:Hello Spring MVC** 这部分通常会介绍如何创建一个基本的 Spring MVC 项目,包括配置文件的设置...
本文将详细讲解如何利用Spring MVC结合开源库实现Excel和PDF的生成。 首先,我们要引入两个关键的库:Apache POI用于生成Excel,iText或Flying Saucer用于生成PDF。Apache POI是一个流行的API,它允许Java程序员...
这本书详细讲解了SpringMVC的工作原理和使用方法,对于想要快速掌握SpringMVC的初学者和开发者来说,是一个非常好的学习资源。它不但介绍了SpringMVC框架的核心功能,还深入探讨了如何利用SpringMVC开发出结构清晰、...
这本SSM讲义通过详细讲解和实例演示,将帮助你快速上手并精通SSM框架,无论你是初学者还是有一定经验的开发者,都能从中受益匪浅。在实际项目中,SSM框架的合理运用能够极大地提高开发效率,降低维护成本,是Java ...
**Spring MVC 入门项目详解*...这个入门项目提供了一个简单的Spring MVC应用实例,通过实际操作可以更好地理解框架的工作原理和使用方式。对于Java Web开发者来说,掌握Spring MVC是提升开发效率和项目质量的重要步骤。
PDF和PPTX格式便于读者在线阅读或离线下载,内容可能涉及SpringBoot的起步依赖、SpringMVC、数据访问(JPA与MyBatis)、安全控制(Spring Security)、集成测试、微服务架构(Spring Cloud)等方面,帮助初学者快速...
在实例应用方面,文档会进一步讲解如何应用FreeMarker,例如如何创建模板、如何在模板中使用变量和标签、如何利用宏和函数等高级特性。这些实例将帮助开发者掌握FreeMarker的常用语法和高级特性,进而在实际的项目中...
SSM(Spring、SpringMVC、MyBatis)是一个经典的Java web开发框架组合,用于构建高效、可维护的Web应用程序。...通过阅读源代码和注释,你可以深入理解SSM框架的工作原理,提升你的Java Web开发能力。
1. **基础概念**:讲解Ajax的基本原理,包括异步通信的概念和工作流程。 2. **XMLHttpRequest对象**:详细阐述如何创建和使用XMLHttpRequest对象,包括打开连接、设置请求头、发送数据和接收响应等步骤。 3. **发送...
在压缩包"ssm课程"中,可能包含的资源有教程文档、示例代码、视频讲解等,这些都能帮助你系统地学习和掌握SSM框架。通过阅读文档,你可以了解每个组件的基本用法;通过实例代码,你可以直观地看到框架在实际项目中的...