SpringMVC入门教程及其原理讲解
2016-03-29 18:22
501 查看
SpringMVC框架介绍
Spring框架提供了构造Web应用程序的全能MVC模块。Spring MVC分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行制定。是一个标准的MVC框架。
原创不易,转载请注明出处:SpringMVC入门教程及其原理讲解和实例代码下载
代码下载地址:http://www.zuidaima.com/share/1751859714182144.htm
那你猜一猜哪一部分应该是哪一部分?
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. 视图负责将结果显示到客户端
LoginController类:
applicationContext.xml
Jsp页面:
login.jsp
showAccount.jsp
Web.xml
SpringMVC总结
以上就是我理解的Spring MVC可能不够深刻。其实对于任何的框架来说,一个框架是一个可复用设计,框架的最大的好处就是复用。每个框架都有存在的理由,那Spring MVC的理由是什么呢?
只有各个框架之间彼此了解他们之间的优缺点,使用场合,使用原理,才能让我们的更快的成长。
Spring框架提供了构造Web应用程序的全能MVC模块。Spring MVC分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行制定。是一个标准的MVC框架。
原创不易,转载请注明出处:SpringMVC入门教程及其原理讲解和实例代码下载
代码下载地址:http://www.zuidaima.com/share/1751859714182144.htm
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 | packagecom.pb.entity; |
02 |
03 | [code]public class Account { |
04 | private String cardNo; |
05 | private String password; |
06 | private float balance; |
07 | public String getCardNo() { |
08 | return cardNo; |
09 | [code]} |
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 | } |
01 | packagecom.pb.web.controller; |
02 |
03 | [code]import java.util.HashMap; |
04 | [code]import java.util.Map; |
05 |
06 | [code]import javax.servlet.http.HttpServletRequest; |
07 | [code]import javax.servlet.http.HttpServletResponse; |
08 |
09 | [code]import org.springframework.web.servlet.ModelAndView; |
10 | [code]import org.springframework.web.servlet.mvc.AbstractController; |
11 |
12 | [code]import com.pb.entity.Account; |
13 |
14 | [code]public class LoginController extends AbstractController { |
15 | private String successView; |
16 | private String failView;//这两个参数是返回值传给applicationContext.xml,进行页面分配 |
17 |
18 | public String getSuccessView() { |
19 | return successView; |
20 | [code]} |
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 | } |
01 | <?xml version="1.0" encoding="UTF-8"?> |
02 |
03 | [code]<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[/code] |
09 | http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">[/code] |
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> |
01 | <%@ page language="java" contentType="text/html; charset=GB18030" |
02 | pageEncoding="GB18030"%> |
03 | [code]<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> |
04 | [code]<html> |
05 | <head> |
06 | <meta http-equiv="Content-Type" content="text/html; charset=GB18030"> |
07 | [code]<title>Insert title here</title> |
08 | </head> |
09 | <body> |
10 | <a href="login.jsp">进入</a> |
11 |
12 | </body> |
13 | </html> |
01 | <%@ page language="java" contentType="text/html; charset=GB18030" |
02 | pageEncoding="GB18030"%> |
03 | [code]<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> |
04 | [code]<html> |
05 | <head> |
06 | <meta http-equiv="Content-Type" content="text/html; charset=GB18030"> |
07 | [code]<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> |
01 | <%@ page language="java" contentType="text/html; charset=GB18030" |
02 | pageEncoding="GB18030"%> |
03 | [code]<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> |
04 | [code]<html> |
05 | <head> |
06 | <meta http-equiv="Content-Type" content="text/html; charset=GB18030"> |
07 | [code]<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> |
01 | [code]<?xml version="1.0" encoding="UTF-8"?> |
02 | [code]<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 | [code]</web-app> |
以上就是我理解的Spring MVC可能不够深刻。其实对于任何的框架来说,一个框架是一个可复用设计,框架的最大的好处就是复用。每个框架都有存在的理由,那Spring MVC的理由是什么呢?
只有各个框架之间彼此了解他们之间的优缺点,使用场合,使用原理,才能让我们的更快的成长。
相关文章推荐
- Mockito:一个强大的用于Java开发的模拟测试框架
- Java数据类型中String、Integer、int相互间的转换
- Java远程方法调用,RMI入门教程
- 算法9-5:最大流算法的Java代码
- myeclipse服务器打不开的问题
- springmvc 用拦截器+token防止重复提交
- java线程安全总结
- WebLogic下运行错误java.lang.LinkageError: loader constraint violation in interface itable initialization
- <Manning-Java-Swing> - Note.01
- Spring AOP中pointcut expression表达式解析
- [Java并发包学习七]解密ThreadLocal
- java导出txt
- Java的正则表达式
- JDK内置性能监测工具使用
- 《编写高质量代码:改善Java程序的151个建议》
- struts2类型转换
- JAVA反射机制
- 桶排序 【Java】
- spring启动过程之源码跟踪(下)--spring Debug
- SpringMVC使用中遇到的问题总结