Chinaunix首页 | 论坛 | 博客
  • 博客访问: 293725
  • 博文数量: 30
  • 博客积分: 732
  • 博客等级: 军士长
  • 技术积分: 439
  • 用 户 组: 普通用户
  • 注册时间: 2012-05-10 00:13
文章分类

全部博文(30)

文章存档

2015年(1)

2013年(5)

2012年(24)

我的朋友

分类: 系统运维

2012-07-06 16:17:18

学习目的:
1.掌握spring MVC开发步骤
2.理解实现原理
3.理解框架运行时原理
一.原理小结

主要由DispatcherServlet、处理器映射、处理器、视图解析器、视图组成

1.DispatcherServlet接收到一个HTTP请求,根据对应配置文件中的处理机映射,找到处理器(Handler)

点击(此处)折叠或打开

  1. <property name="mappings">
  2.             <props>
  3.                 <prop key="login.do">loginControler</prop>
  4.                 <prop key="userFormcontroler.do">userFormcontroler</prop>
  5.             </props>
  6.         </property>
2.调用Handler中的方法,处理该请求,处理完后返回一个ModelAndView类型的数据给DispatcherServlet

点击(此处)折叠或打开

  1. public class UserFormControler extends AbstractCommandController {

  2.     private String result;

  3.     // 相当于Action中的execute
  4.     protected ModelAndView handle(HttpServletRequest request,
  5.             HttpServletResponse response, Object obj,
  6.             BindException bindexception) throws Exception {
  7.         // 将页面返回的数据丢到obj中来
  8.         UserBean user = (UserBean) obj;
  9.         System.out.println(user.getName());
  10.         // 将数据封装成一个map丢到V层去
  11.         Map<String, Object> map = new HashMap<String, Object>();
  12.         map.put("user", user);
  13.         return new ModelAndView(this.result, map);
  14.     }
  15. }
其中包含了处理结果的视图和视图中要使用的数据。

3.DispatcherServlet根据得到的ModelAndView中的视图对象,找到一个合适的ViewResolver(视图解析器),根据视图解析器的配置,DispatcherServlet将视图要显示的数据传给对应的视图,最后给浏览器构造一个HTTP响应。

DispatcherServlet是整个Spring MVC的核心。它负责接收HTTP请求组织协调Spring MVC的各个组成部分。其主要工作有以下三项:
1)截获符合特定格式的URL请求。
2)初始化DispatcherServlet上下文对应的WebApplicationContext,并将其与业务层、持久化层的WebApplicationContext建立关联。
3)初始化Spring MVC的各个组成组件,并装配到DispatcherServlet中。


二.简单应用

Spring MVC 一般步骤:

1、创建webproject,加入Spring MVC(spring中 web jar)
2、编写jsp login.jsp  welcome.jsp
3、编写Controller(命令 handler、form onsubmit)
   a、接收页面的数据
   b、调用service代码
   c、将处理结果传给view
4、编写View Object对象      Percesitence Oject
   UserBean
5、配置
   a、Controller和Service 配置Bean
   b、配置handlerMapping(请求--》controller)
   c、配置ViewResolver(实现页面的转向)

6、jsp《-》CommandClass之间的写法____________传值问题:页面标签名==javaBean属性名

7、jsp中怎么从ModelAndView中获取值___________map.put("user", user); //此处值可在页面显示  ${user.userName }欢迎你来了

1)第一个demo实现

1.index.jsp

点击(此处)折叠或打开

  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  3. <html>
  4.   <head>
  5.     <title>My JSP 'index.jsp' starting page</title>
  6.   </head>
  7.   
  8.   <body>
  9.     <form action="login.do" method="post">
  10.              用户名:<input type="text" name="userName"/>
  11.     <input type="submit" value="提交"/>
  12.     </form>
  13.   </body>
  14. </html>
2.login.jsp

点击(此处)折叠或打开

  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  3. <html>
  4.   <head>
  5.     <title>My JSP 'login.jsp' starting page</title>
  6.   </head>
  7.   
  8.   <body>
  9.      <br>
  10.      ${user.userName }欢迎你来了
  11.   </body>
  12. </html>
3.LoginControler.java 登陆的controler 

注意: 1.extends AbstractController
       2.protected ModelAndView handleRequestInternal(HttpServletRequest request,
HttpServletResponse response)
       该方法相当于action中的excute方法
       3.return new ModelAndView("login"); //其中login为页面名称,在applicationContext.xml中实用视图与视图解析器拼凑为完整页面访问URL
      class="org.springframework.web.servlet.view.UrlBasedViewResolver">
   
   

点击(此处)折叠或打开

  1. package cn.com.sxt.controler;

  2. import javax.servlet.http.HttpServletRequest;
  3. import javax.servlet.http.HttpServletResponse;

  4. import org.springframework.web.servlet.ModelAndView;
  5. import org.springframework.web.servlet.mvc.AbstractController;

  6. public class LoginControler extends AbstractController {
  7.     protected ModelAndView handleRequestInternal(HttpServletRequest request,
  8.             HttpServletResponse response) throws Exception {
  9.         System.out.println("我来了啊");
  10.         return new ModelAndView("login");
  11.     }

  12. }
4.UserFormControler.java

点击(此处)折叠或打开

  1. package cn.com.sxt.controler;

  2. import java.util.HashMap;
  3. import java.util.Map;

  4. import javax.servlet.http.HttpServletRequest;
  5. import javax.servlet.http.HttpServletResponse;

  6. import org.springframework.validation.BindException;
  7. import org.springframework.web.servlet.ModelAndView;
  8. import org.springframework.web.servlet.mvc.AbstractCommandController;

  9. import cn.com.bean.UserBean;

  10. public class UserFormControler extends AbstractCommandController {

  11.     private String result;

  12.     // 相当于Action中的execute
  13.     protected ModelAndView handle(HttpServletRequest request,
  14.             HttpServletResponse response, Object obj,
  15.             BindException bindexception) throws Exception {
  16.         // 将页面返回的数据丢到obj中来
  17.         UserBean user = (UserBean) obj;
  18.         System.out.println(user.getName());
  19.         // 将数据封装成一个map丢到V层去
  20.         Map<String, Object> map = new HashMap<String, Object>();
  21.         map.put("user", user);
  22.         return new ModelAndView(this.result, map);
  23.     }
  24. }
5.UserBean.java 编写View Object对象      Percesitence Oject

点击(此处)折叠或打开

  1. package cn.com.bean;

  2. public class UserBean {
  3.     private String name;

  4.     public String getName() {
  5.         return name;
  6.     }

  7.     public void setName(String name) {
  8.         this.name = name;
  9.     }
  10.     
  11. }
6.配置applicationContext.xml

a、Controller和Service 配置Bean 

点击(此处)折叠或打开

  1. <bean id="loginControler" class="cn.com.sxt.controler.LoginControler">
  2.     </bean>

  3.     <bean id="userFormcontroler" class="cn.com.sxt.controler.UserFormControler">
  4.         <property name="commandClass" value="cn.com.sxt.bean.User"></property>
  5.         <property name="formView" value="index"></property>
  6.         <property name="successView" value="login"></property>
  7.     </bean>

b、配置handlerMapping(请求--》controller)

点击(此处)折叠或打开

  1. <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
  2.         <property name="mappings">
  3.             <props>
  4.                 <prop key="login.do">loginControler</prop>
  5.                 <prop key="userFormcontroler.do">userFormcontroler</prop>
  6.             </props>
  7.         </property>
  8.     </bean>

c、配置ViewResolver(实现页面的转向)

点击(此处)折叠或打开

  1. <bean
  2.         class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  3.         <!-- 制定前缀后缀 jsp/login.jsp-->
  4.         <property name="prefix" value="jsp/"></property>
  5.         <property name="suffix" value=".jsp"></property>
  6.     </bean>



阅读(18026) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~