zoukankan      html  css  js  c++  java
  • springMVC学习(1)

    spring mvc的位置:
    springMVC只是spring的一个模块;
     
    第一步:发起请求到前端控制器(DispatcherServlet)
    第二步:DispatcherServlet请求HandlerMapping查找Handler(可以根据xml配置或注解进行查找)
    第三步:HandlerMapping向DispatcherServlet返回Handler
    第四步:DispatcherServlet调用HandlerAdapter去执行Handler
    第五步:HandlerAdapter去执行Handler
    第六步:Handler执行完成给HandlerAdapter返回ModalAndView
    第七步:HandlerAdapter向DispatcherServlet前端控制器返回ModalAndView
    第八步:DispatcherServlet请求视图解析器进行解析,根据逻辑视图名解析成真正的视图(jsp等);
    第九步:视图解析器向DispatcherServlet返回View
    第十步:DispatcherServlet进行视图渲染,将数据填充到request域;response响应结果
     
    组件:
    1.前端控制器DispatcherServlet,相当于转发器
    2.处理器映射器HandlerMapping,根据url查找Handler
    3.处理器适配器HandlerAdapter,执行Handler
    4.处理器Handler
    5.视图解析器View resolver,进行视图解析,根据逻辑视图名解析真正的视图
    6.视图View,是一个接口,实现类支持不同的View类型(jsp、freemarker、pdf...);
     
    一、环境搭建:
    springmvc独立运行的jar包:
    二、入门程序
    1、前端控制器DispatcherServlet配置:
    <!-- springmvc前端控制器 -->
      <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!-- contextConfigLocation配置springmvc加载的配置文件(配置处理器映射器、适配器等等)
            如果不配置contextConfigLocation,默认加载的是/WEB-INF/servlet名称-serlvet.xml(springmvc-servlet.xml)
           -->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc.xml</param-value>
        </init-param>  
      </servlet>
      <servlet-mapping>
          <servlet-name>springmvc</servlet-name>
          <!-- 
          第一种:*.action,访问以.action结尾 由DispatcherServlet进行解析
          第二种:/,所以访问的地址都由DispatcherServlet进行解析,对于静态文件的解析需要配置不让DispatcherServlet进行解析
                          使用此种方式可以实现 RESTful风格的url
          第三种:/*,这样配置不对,使用这种配置,最终要转发到一个jsp页面时,
                         仍然会由DispatcherServlet解析jsp地址,不能根据jsp页面找到handler,会报错。
           -->
          <url-pattern>*.action</url-pattern>
      </servlet-mapping>

     springmvc.xml下配置:

    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
        xmlns:context="http://www.springframework.org/schema/context"
        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-3.2.xsd 
            http://www.springframework.org/schema/mvc 
            http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd 
            http://www.springframework.org/schema/context 
            http://www.springframework.org/schema/context/spring-context-3.2.xsd 
            http://www.springframework.org/schema/aop 
            http://www.springframework.org/schema/aop/spring-aop-3.2.xsd 
            http://www.springframework.org/schema/tx 
            http://www.springframework.org/schema/tx/spring-tx-3.2.xsd ">
        
        <!-- 配置Handler -->
        <bean name="/queryItems.action" class="com.cy.controller.ItemsController1"/>
        
        <!-- 处理器映射器 
            将bean的name作为url进行查找 ,需要在配置Handler时指定beanname(就是url)所有的映射器都实现 HandlerMapping接口。
         -->
        <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />
        
        <!-- 处理器适配器  所有处理器适配器都实现 HandlerAdapter接口 -->
        <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />
        
        <!-- 视图解析器
            解析jsp视图,默认使用jstl标签,classpath下的得有jstl的包
         -->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"></bean>
    </beans>

    编写handler:

    开发handler,要实现controller接口,才能由org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter执行
    public class ItemsController1 implements Controller{
    
        @Override
        public ModelAndView handleRequest(HttpServletRequest request,HttpServletResponse response) throws Exception {
            //调用service查找 数据库,查询商品列表,这里使用静态数据模拟
            List<Items> itemsList = new ArrayList<Items>();
            Items items_1 = new Items();
            items_1.setName("联想笔记本");
            items_1.setPrice(6000f);
            items_1.setDetail("ThinkPad T430 联想笔记本电脑!");
            
            Items items_2 = new Items();
            items_2.setName("苹果手机");
            items_2.setPrice(5000f);
            items_2.setDetail("iphone6苹果手机!");
            
            itemsList.add(items_1);itemsList.add(items_2);
    
            //返回ModelAndView
            ModelAndView modelAndView =  new ModelAndView();
            //相当 于request的setAttribut,在jsp页面中通过itemsList取数据
            modelAndView.addObject("itemsList", itemsList);
            
            //指定视图
            modelAndView.setViewName("/WEB-INF/jsp/itemsList.jsp");
            return modelAndView;
        }
    }

    视图jsp编写:

    <table width="100%" border=1>
    <tr>
    <td><input type="submit" value="查询"/></td>
    </tr>
    </table>
    商品列表:
    <table width="100%" border=1>
        <tr>
            <td>商品名称</td>
            <td>商品价格</td>
            <td>生产日期</td>
            <td>商品描述</td>
            <td>操作</td>
        </tr>
        <c:forEach items="${itemsList }" var="item">
        <tr>
            <td>${item.name }</td>
            <td>${item.price }</td>
            <td><fmt:formatDate value="${item.createtime}" pattern="yyyy-MM-dd HH:mm:ss"/></td>
            <td>${item.detail }</td>
            <td><a href="${pageContext.request.contextPath }/item/editItem.action?id=${item.id}">修改</a></td>
        </tr>
        </c:forEach>
    </table>

    url访问http://localhost:8080/springMVC/queryItems.action,图:

     三、对入门程序的补充:

    1)另一个非注解的处理器映射器:在上述springmvc.xml中添加简单url映射器:

    可以看到:多个处理器映射器可以并存,前端控制器判断url能让那些映射器映射,就让正确的映射器处理.

    <!-- 配置Handler -->
        <bean id="itemsController1" name="/queryItems.action" class="com.cy.controller.ItemsController1"/>
        
        <!-- 处理器映射器 
            将bean的name作为url进行查找 ,需要在配置Handler时指定beanname(就是url)所有的映射器都实现 HandlerMapping接口。
         -->
        <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />
        
        <!--简单url映射  -->
        <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
            <property name="mappings">
                <props>
                    <!-- 对itemsController1进行url映射,url是/queryItems1.action -->
                    <prop key="/queryItems1.action">itemsController1</prop>
                    <prop key="/queryItems2.action">itemsController1</prop>
                </props>
            </property>
        </bean>

    现在url中访问:

    http://localhost:8080/springMVC/queryItems1.action

    http://localhost:8080/springMVC/queryItems2.action

    http://localhost:8080/springMVC/queryItems.action都可以正确访问;

     2)另一个非注解的适配器:

    这个HttpRequestHandlerAdapter适配器要求Handler实现HttpRequestHandler接口:

    <!-- 配置另外一个Handler -->
        <bean id="itemsController2" name="/queryItems3.action" class="com.cy.controller.ItemsController2" />
        
        <!-- 处理器映射器 
            将bean的name作为url进行查找 ,需要在配置Handler时指定beanname(就是url)所有的映射器都实现 HandlerMapping接口。
         -->
        <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />
        
        <!-- 另一个非注解的适配器 -->
        <bean class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter"/>
        
        <!-- 视图解析器
            解析jsp视图,默认使用jstl标签,classpath下的得有jstl的包
         -->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"></bean>

    Handler:

    public class ItemsController2 implements HttpRequestHandler{
    
        @Override
        public void handleRequest(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
                //调用service查找 数据库,查询商品列表,这里使用静态数据模拟
                List<Items> itemsList = new ArrayList<Items>();
                Items items_1 = new Items();
                items_1.setName("联想笔记本");
                items_1.setPrice(6000f);
                items_1.setDetail("ThinkPad T430 联想笔记本电脑!");
                
                Items items_2 = new Items();
                items_2.setName("苹果手机");
                items_2.setPrice(5000f);
                items_2.setDetail("iphone777苹果手机!");
                
                itemsList.add(items_1);itemsList.add(items_2);
                
                //设置模型数据
                request.setAttribute("itemsList", itemsList);
                //设置转发的视图
                request.getRequestDispatcher("/WEB-INF/jsp/itemsList.jsp").forward(request, response);
                
                //使用此方法可以通过修改response,设置响应的数据格式,比如响应json数据
                /*
                response.setCharacterEncoding("utf-8");
                response.setContentType("application/json;charset=utf-8");
                response.getWriter().write("json串");*/
        }
    }

    现在浏览器中访问http://localhost:8080/springMVC/queryItems3.action就能访问了;

  • 相关阅读:
    A Simple Problem with Integers poj 3468 多树状数组解决区间修改问题。
    Fliptile 开关问题 poj 3279
    Face The Right Way 一道不错的尺取法和标记法题目。 poj 3276
    Aggressive cows 二分不仅仅是查找
    Cable master(二分题 注意精度)
    B. Pasha and String
    Intervals poj 1201 差分约束系统
    UITextField的快速基本使用代码块
    将UIImage转换成圆形图片image
    color转成image对象
  • 原文地址:https://www.cnblogs.com/tenWood/p/6267342.html
Copyright © 2011-2022 走看看