zoukankan      html  css  js  c++  java
  • Spring+SpringMVC+MyBatis深入学习及搭建(十二)——SpringMVC入门程序(一)

    1需求

    以案例作为驱动。

    SpringMVC和MyBatis使用一个案例(商品订单管理)。

    功能需求:商品列表查询

    2环境准备

    数据库环境:mysql5.6

    java环境:

    jdk1.7

    MyEclipse2014

    SpringMVC版本:spring3.2

    需要spring3.2所有jar(一定要包括spring-webmvc-3.2.0.RELEASE.jar)

    新建一个web项目,将所需jar包拷贝至lib下。

    3配置前端控制器

    在web.xml中配置前端控制器。

    复制代码
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
      <display-name>SpringMVC</display-name>
      <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
      </welcome-file-list>
      
      <!-- springmvc前端控制器  -->
      <servlet>
          <servlet-name>springmvc</servlet-name>
          <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
          <!-- contextConfigLocation配置springmvc加载的配置文件(该配置文件中配置了处理器映射器、适配器等等) 
               如果不配置contextConfigLocation,默认加载的是/WEB-INF/servlet名称-servlet.xml(即springmvc-servlet.xml)
          -->
          <init-param>
              <param-name>contextConfigLocation</param-name>
              <param-value>classpath:springmvc.xml</param-value>
          </init-param>
          <!-- 表示servlet随服务启动 -->
          <load-on-startup>1</load-on-startup>
      </servlet>
      
      <servlet-mapping>
          <servlet-name>springmvc</servlet-name>
          <!--Servlet拦截方式
              方式一:*.action,访问以.action结尾由DispatcherServlet进行解析
              方式二:/,所有访问的地址都由DispatcherServlet进行解析,对于静态文件的解析需要配置不让DispatcherServlet进行解析。
              使用此方式可以实现RESTful风格的url
              方式三:/*,这样配置不对,使用这种配置,最终要转发到一个jsp页面时,
              仍然会由DispatcherServlet解析jsp地址,不能根据jsp页面找到handler,会报错
            -->
          <url-pattern>*.action</url-pattern>
      </servlet-mapping>
      
    </web-app>
    复制代码

    DispathcerServlet作为springmvc的中央调度器存在,DispatcherServlet创建时会默认从DispatcherServlet.properties文件加载springmvc所用的各个组件,如果在springmvc.xml中配置了组件则以springmvc.xml中配置的为准,DispatcherServlet的存在降低了springmvc各各组件之间的耦合度。

    4配置处理器适配器

    在classpath下的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 ">
    
        <!-- 处理器适配器
               所有处理器适配器都实现HandlerAdapter接口
         -->
        <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
    
    </beans>
    复制代码

    通过查看源码:

    此适配器能执行实现Controller接口的Handler。

    5开发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();
            modelAndView.addObject("itemsList", itemsList);
            modelAndView.setViewName("/WEB-INF/jsp/items/itemsList.jsp");
            return modelAndView;
        }
    
    }
    复制代码

    6视图编写

     创建/WEB-INF/jsp/order/itemsList.jsp视图页面。

    复制代码
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt"  prefix="fmt"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>查询商品列表</title>
    </head>
    <body> 
    <form action="${pageContext.request.contextPath }/item/queryItem.action" method="post">
    查询条件:
    <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>
    </form>
    </body>
    
    </html>
    复制代码

    7配置Handler

    在spring容器中(springmvc.xml)加载编写的Handler。

      <!-- 配置Handler -->
        <bean name="/queryItems.action" class="joanna.yan.ssm.controller.ItemsController1"/>

    8配置处理器映射器

    在classpath下的springmvc.xml中配置处理器映射器。

      <!-- 配置处理器映射器 
             将bean的name作为url进行查找,需要在配置Handler时指定beanname(就是url)
        -->
        <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>

    9配置视图解析器

    需要在springmvc.xml中配置解析jsp的视图解析器。

     <!-- 配置视图解析器 
             解析jsp视图,默认使用jstl标签,所有classpath下得有jstl的包
        -->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"/>

    10项目部署调试

    将项目部署至Tomcat,访问http://localhost:8080/SpringMVC/queryItems.action

    效果图:

    从目前上面的代码来看,springmvc中一个类就一个方法,而struts中一个类可以写多个方法,很不方便。早期确实是这么干的,但是后来SpringMVC提倡用注解开发。

  • 相关阅读:
    帝国cms留言表模板修改
    帝国cms内容页模版
    百度竞价中的精确匹配,短语匹配,广泛匹配有什么区别。
    Android打包之多版本、多环境、多渠道
    Jenkins修改默认目录 /root/.jenkins
    Centos挂载硬盘完整图文教程(查看、分区、格式化、挂载)磁盘
    Linux安装mysql后systemctl start mysqld.service不能启动 修改datadir路径后不能启动
    Jenkins版本回滚
    Linux 调整时区与时间同步
    jenkins忘记admin密码的处理方法
  • 原文地址:https://www.cnblogs.com/wangyage/p/7198966.html
Copyright © 2011-2022 走看看