SpringMVC入门教程及其原理讲解

来源:互联网 发布:通达信软件怎么样 编辑:程序博客网 时间:2024/04/29 09:31
  • 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类:

01package com.pb.entity;02 03public class Account {04private String cardNo;05private String password;06private float balance;07public String getCardNo() {08return cardNo;09}10public void setCardNo(String cardNo) {11this.cardNo = cardNo;12}13public String getPassword() {14return password;15}16public void setPassword(String password) {17this.password = password;18}19public float getBalance() {20return balance;21}22public void setBalance(float balance) {23this.balance = balance;24}25 26}

LoginController类:

01package com.pb.web.controller;02 03import java.util.HashMap;04import java.util.Map;05 06import javax.servlet.http.HttpServletRequest;07import javax.servlet.http.HttpServletResponse;08 09import org.springframework.web.servlet.ModelAndView;10import org.springframework.web.servlet.mvc.AbstractController;11 12import com.pb.entity.Account;13 14public class LoginController extends AbstractController {15private String successView;16private String failView;//这两个参数是返回值传给applicationContext.xml,进行页面分配17 18public String getSuccessView() {19return successView;20}21public void setSuccessView(String successView) {22this.successView = successView;23}24public String getFailView() {25return failView;26}27public void setFailView(String failView) {28this.failView = failView;29}30@Override31protected ModelAndView handleRequestInternal(HttpServletRequest request,32HttpServletResponse response) throws Exception {33// TODO Auto-generated method stub34String cardNo=request.getParameter("cardNo");35String password=request.getParameter("password");36Account account =getAccount(cardNo,password);37Map<String ,Object> model=new HashMap<String,Object>();38if(account !=null){39model.put("account", account);40return new ModelAndView(getSuccessView(),model);41}else{42model.put("error""卡号和密码不正确");43return new ModelAndView(getFailView(),model);44}45}//本应该这个方法写在模型层,这地方直接给放在了逻辑层这个地方偷懒了。46public Account getAccount(String cardNo,String password){47if(cardNo.equals("123")&&password.equals("123")){48Account account =new Account();49account.setCardNo(cardNo);50account.setBalance(88.8f);51return account;52}else{53return 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"04xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"05xmlns:aop="http://www.springframework.org/schema/aop"06xmlns:tx="http://www.springframework.org/schema/tx"07xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd08http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd09http://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"02pageEncoding="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"02pageEncoding="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"02pageEncoding="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"03xmlns="http://java.sun.com/xml/ns/j2ee"04xmlns:javaee="http://java.sun.com/xml/ns/javaee"05xmlns: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的理由是什么呢?

只有各个框架之间彼此了解他们之间的优缺点,使用场合,使用原理,才能让我们的更快的成长。

0 0