您的位置:首页 > 编程语言 > Java开发

SpringMVC入门教程及其原理讲解

2016-03-29 18:22 501 查看
SpringMVC框架介绍

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
package 
com.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
}
LoginController类:
01
package 
com.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
}
applicationContext.xml
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>
Jsp页面:
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>
login.jsp
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>
showAccount.jsp
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>
Web.xml
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>
SpringMVC总结

以上就是我理解的Spring MVC可能不够深刻。其实对于任何的框架来说,一个框架是一个可复用设计,框架的最大的好处就是复用。每个框架都有存在的理由,那Spring MVC的理由是什么呢?

只有各个框架之间彼此了解他们之间的优缺点,使用场合,使用原理,才能让我们的更快的成长。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: