如何学习框架技术?
就像如上的图示一样,先掌握新技术的体系流程图。在快速弄明白程序执行流程后,在使用过程中
了解细节。
工作流程:
1.客户端发送请求
2.客户端发送的请求到达服务器控制器 , 服务器控制器由 Servlet(DispatcherServlet)实现的,来完成请求的转发
3.该控制器(DispatcherServlet)调用了一个用于映射的类 HandlerMapping,该类用于将请求映射到对应的处理器来处理请求。
4.HandlerMapping 将请求映射到对应的处理器 Controller(相当于 Action) 在 Spring 当中如果写一些处理器组件,一般实现 Controller 接口
5.在 Controller 中就可以调用一些 Service 或 DAO 来进行数据操作
6.ModelAndView 用于存放从 DAO 中取出的数据,还可以存放响应视图的一些数据。
7.如果想将处理结果返回给用户,那么在 Spring 框架中还提供一个视图组件 ViewResolver,
该组件根据 Controller 返回的标示,找到对应的试图,将响应 response 返回给用户
DEMO:
1. 创建springMVC环境
2. 在web.xml中配置中央控制器 DispatcherServlet
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <display-name></display-name> <servlet> <servlet-name>springmvcExample</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <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>springmvcExample</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
3.新建spring配置文件 springMVC.xml
4.编写一个简单的页面. index.jsp, 及成功后跳转的页面WEB-INF/(success.jsp)
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <html> <body style="font-size:30px"> <form action="login.do" method="post"> 用户名:<input type="text" name="email"><br /> 密码: <input type="text" name="password"><br /> <input type="submit"value="登录"> </form> <span>${msg}这个是登陆错误后返回的信息</span> </body> </html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'success.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> </head> <body> <h2> 登陸成功! <%=request.getAttribute("msg") %></h2> </body> </html>
5.编写LoginControl 等价于我们之前写的 LoginAction,handleRequest()相当于 execute()方法
package com.control; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.ui.ModelMap; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.Controller; public class LoginControl implements Controller { public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { ModelMap map = new ModelMap(); String email = request.getParameter("email"); String pwd = request.getParameter("password"); if(email.equals("[email protected]")&&pwd.equals("123456")) { map.put("msg", email); return new ModelAndView("success",map); } map.put("msg", "用戶名或密碼錯!"); return new ModelAndView("index",map); //默认是采用 dispatcher 方式跳转,重定向可以用下面的方式 //return new ModelAndView("redirect:/index.jsp",map); } }
6.在 Spring 配置文件中,注入 bean(loginControl) ,从如上步骤中,我们已经完成了 Spring MVC 控制流程中的 DispatcherServlet、
Controller、ModelAndView、View 还有 HandlerMapping、ViewResolver,它们不需要自己写,需要配置
<?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:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"> <bean id="loginControl" class="com.control.LoginControl"/> <!-- 配置HandlerMapping组件用于实现请求与处理器之间的映射 --> <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="mappings"> <props> <prop key="login.do">loginControl</prop> </props> </property> </bean> <!-- 定义ViewResolver组件, 实现根据视图标识获取JSP响应 --> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- View中用到的相关技术 --> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> <!-- 后缀 --> <property name="suffix" value=".jsp"/> <!-- 前缀 --> <property name="prefix" value="/" /> </bean> </beans>
注意:viewResolver中 jsp 文件的名字,是根据我们在 LoginControl 中的具体业务返回的字符串决定
“success”或者“login”
如果响应的页面位于WEB-INF下则可以采用下面的方式配置:
<!-- 后缀 --> <property name="suffix" value=".jsp"/>
<!-- 前缀 --> <property name="prefix" value="WEB-INF/" />
2.HandleMapping 组件有很多的实现技术,我们使用的是较为简单的 org.springframework.web.servlet.handler.SimpleUrlHandlerMapping
ViewResolver 组件也有很多的实现技术,我们使用 org.springframework.web.servlet.view.InternalResourceViewResolver
此外,在 ViewResolver 组件中使用的主要解析技术是 JstlView org.springframework.web.servlet.view.JstlView
(以预防&&配合页面使用 jstl 标签的情况)
7.部署测试