码迷,mamicode.com
首页 > 编程语言 > 详细

springmvc入门程序

时间:2016-09-29 21:40:47      阅读:269      评论:0      收藏:0      [点我收藏+]

标签:

springmvc的入门程序(和前面的mybatis使用同一个案例,商城的案例。订单,购物车等)

 

需求:

功能需求:

商品的列表查询

环境准备:

技术分享

Java环境:

Jdk1.7

Myeclipes9

Springmvc版本:spring3.2

需要spring3.2所有jar,一定要包括spring-webmvc那个

 

开发步骤:

1、导入jar包,这个不解释了。

2、在web.xml中配置前端控制器:

<servlet>
      <servlet-name>springmvc</servlet-name>
      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
      <!-- contextConfigLocation配置springmvc记载的配置文件(配置处理器映射器、适配器等等)
      如果不配置contextConfigLocation,默认加载的是/WEB-INF/servlet名称-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>

 

3、在springmvc.xml中操作。

使用spring的mvc组件,首先需要在你的spring配置文件中加入mvc命名空间:

xmlns:mvc=http://www.springframework.org/schema/mvc
...
http://www.springframework.org/schema/mvc           
http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">

 

2、配置处理器映射器(根据请求查找handler)

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

 

3、配置处理器适配器(对应的处理器需要遵守适配器规则)

<!-- 处理器适配器 
    所有的处理器适配器都实现HandlerAdapter接口
-->
    <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>

 

4、编写handler,配置handler

编写前面控制器规则的handler:

package cn.itcast.ssm.controller;

import java.util.ArrayList;
import java.util.List;

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

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

import cn.itcast.ssm.domain.Items;

/**
 * 实现Controller接口的处理器
 * @author Administrator
 *
 */
public class ItemsController1 implements Controller{

    public ModelAndView handleRequest(HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        //调用service查找数据库,查找商品列表,这里使用静态数据模拟
        List<Items> itemsList=new ArrayList<Items>();
        //向list中填充静态数据
        
        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的setAttribute
        modelAndView.addObject("itemsList", itemsList);
        
        //指定视图
        modelAndView.setViewName("/WEB-INF/jsp/items/itemsList.jsp");
        
        return modelAndView;
    }

}

装载handler进spring容器:  

<bean name="/queryItems.action" class="cn.itcast.ssm.controller.ItemsController1"/> 

然后前面的处理器映射器就可以根据name属性找到指定的handler了

 

5、视图的编写:

我们书写处理器的时候需要指定视图:

//指定视图
        modelAndView.setViewName("/WEB-INF/jsp/items/itemsList.jsp");

所以我的jsp视图:

技术分享
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>查询商品列表</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">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->

  </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>
itemsList.jsp

 

6、配置视图解析器

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

 

补充代码:

技术分享
package cn.itcast.ssm.domain;

import java.util.Date;

public class Items {
    private int id; 
    private String name;
    private double price;
    private String detail; //商品描述
    private String pic;  //商品图片路径
    private Date createtime;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public double getPrice() {
        return price;
    }
    public void setPrice(double price) {
        this.price = price;
    }
    public String getDetail() {
        return detail;
    }
    public void setDetail(String detail) {
        this.detail = detail;
    }
    public String getPic() {
        return pic;
    }
    public void setPic(String pic) {
        this.pic = pic;
    }
    public Date getCreatetime() {
        return createtime;
    }
    public void setCreatetime(Date createtime) {
        this.createtime = createtime;
    }
    

}
items.java
技术分享
package cn.itcast.ssm.controller;

import java.util.ArrayList;
import java.util.List;

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

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

import cn.itcast.ssm.domain.Items;

/**
 * 实现Controller接口的处理器
 * @author Administrator
 *
 */
public class ItemsController1 implements Controller{

    public ModelAndView handleRequest(HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        //调用service查找数据库,查找商品列表,这里使用静态数据模拟
        List<Items> itemsList=new ArrayList<Items>();
        //向list中填充静态数据
        
        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的setAttribute
        modelAndView.addObject("itemsList", itemsList);
        
        //指定视图
        modelAndView.setViewName("/WEB-INF/jsp/items/itemsList.jsp");
        
        return modelAndView;
    }

}
itemsController1.java
技术分享
<?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:context="http://www.springframework.org/schema/context"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       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/context
           http://www.springframework.org/schema/context/spring-context-2.5.xsd
           http://www.springframework.org/schema/tx
           http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
           http://www.springframework.org/schema/mvc
           http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd" >
           
           <!-- 可以扫描controller、service、...
           这里让扫描controller,指定controller的包
            -->
           <context:component-scan base-package="cn.itcast.ssm.controller"></context:component-scan>
    
    <!-- 配置Handler -->
    <!--  
    因为我使用注解handler开发的名字和这里一样,我先将原来的这个名字改一下。
    <bean id="itemsController1" name="/queryItems.action" class="cn.itcast.ssm.controller.ItemsController1"/> 
    -->
    <bean id="itemsController1" name="/queryItems_test.action" class="cn.itcast.ssm.controller.ItemsController1"/>
    <bean id="itemsController2" class="cn.itcast.ssm.controller.ItemsController2"/>
           
<!-- 处理器映射器 
将bean的name作为url查找,需要在配置Handler时指定beanname(就是url)
-->
    <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />

<!-- 处理器适配器 
    所有的处理器适配器都实现HandlerAdapter接口
-->
    <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
    
    <bean class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter"/>
    
    <!-- 简单url映射 器-->
    <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
            <props>
                <prop key="/queryItems1.action">itemsController1</prop>
                <prop key="/queryItems2.action">itemsController1</prop>
                <prop key="/queryItems3.action">itemsController2</prop>
            </props>
        </property>
    </bean>
    
    <!-- 注解的映射器 -->
    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
    <!-- 注解的适配器 -->
    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>
    
    <!-- 使用 mvc:annotation-driven可以代替上面注解映射器和注解适配器配置
    mvc:annotation-driven默认加载了很多的参数绑定方法,比如json转换解析器就默认加载了
    实际开发中使用mvc:annotation-driven
    -->
    
    <!--  <mvc:annotation-driven></mvc:annotation-driven>-->
    
    <!-- 对于注解的Handler可以单个配置
    实际开发中建议使用组件扫描
    bean的id可以不写,因为已经使用注解完成了url映射对应 -->
    <!--  <bean class="cn.itcast.ssm.controller.ItemsController3"/> -->

<!-- 视图解析器 
解析jsp解析,默认使用jstl标签,classpath下得有jstl的包
-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!-- 配置jsp路径的前缀 -->
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <!-- 配置jsp路径的后缀 -->
        <property name="suffix" value=".jsp"/>
    </bean>

</beans>
springmvc.xml
技术分享
<?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>    
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
      <servlet-name>springmvc</servlet-name>
      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
      <!-- contextConfigLocation配置springmvc记载的配置文件(配置处理器映射器、适配器等等)
      如果不配置contextConfigLocation,默认加载的是/WEB-INF/servlet名称-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>
  
</web-app>
web.xml

说明:

springmvc.xml和web.xml都是我完成了整个入门程序后的效果,前面有关的可以看笔记自己推演。

 

测试

 

 

7、测试:

测试链接:

http://localhost:8080/9-29-01/queryItems.action

两种404的分析:

技术分享

 

前者404后面没有跟东西,表示找不到地址栏上的对应地址

技术分享

后者404后面有东西,说明到了目标地址,然后message中有东西,指定这一个地址,表示到了目标地址后无法跳转到目标地址跳转的地址,那个地址找不到。

 

 

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

非注解的处理器映射器和适配器(查找handler)

1、bean名称映射器

org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping

这个是上一个入门程序我们所使用的处理器映射器,它根据容器中handler的name属性与链接的url进行对应扫描,查找匹配的handler


配置:

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

 

2、简单url映射器

org.springframework.web.servlet.handler.SimpleUrlHandlerMapping

配置:

<bean id="itemsController1" name="/queryItems.action" class="cn.itcast.ssm.controller.ItemsController1"/>

...
<!-- 简单url映射 器-->
    <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
            <props>
                <prop key="/queryItems1.action">itemsController1</prop>
                <prop key="/queryItems2.action">itemsController1</prop>
                <prop key="/queryItems3.action">itemsController2</prop>
            </props>
        </property>
    </bean>

在该配置器中定义key-value键值对将url和handler由id属性对应起来。可以实现一个handler对应多个url

 

一个配置文件中可以配置多个处理器映射器吗?

  答案是可以的。两个映射器同时使用,谁先捕获到能处理就交给谁处理。

 

非注解的适配器(定义handler规则):

1、org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter

  要求:你编写的Handler需要实现Controller接口

配置:

<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>

使用该规则的handler:

package cn.itcast.ssm.controller;

import java.util.ArrayList;
import java.util.List;

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

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

import cn.itcast.ssm.domain.Items;

/**
 * 实现Controller接口的处理器
 * @author Administrator
 *
 */
public class ItemsController1 implements Controller{

    public ModelAndView handleRequest(HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        //调用service查找数据库,查找商品列表,这里使用静态数据模拟
        List<Items> itemsList=new ArrayList<Items>();
        //向list中填充静态数据
        
        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的setAttribute
        modelAndView.addObject("itemsList", itemsList);
        
        //指定视图
        modelAndView.setViewName("/WEB-INF/jsp/items/itemsList.jsp");
        
        return modelAndView;
    }

}

 

2、org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter

  要求:你编写的Handler需要实现HttpRequestHandler接口

配置:

<bean class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter"/>

使用的handler代码:

package cn.itcast.ssm.controller;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.HttpRequestHandler;

import cn.itcast.ssm.domain.Items;

/**
 * 实现Controller接口的处理器
 * @author Administrator
 *
 */
public class ItemsController2 implements HttpRequestHandler{

    public void handleRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        /*
         * 我们发现它的方法和我们Servlet中的service差不多。其实用法也是差不多的
         */
        //调用service查找数据库,查找商品列表,这里使用静态数据模拟
        List<Items> itemsList=new ArrayList<Items>();
        //向list中填充静态数据
        
        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的addObject方法
        request.setAttribute("itemsList", itemsList);
        
        //设置转发的视图
        request.getRequestDispatcher("/WEB-INF/jsp/items/itemsList.jsp").forward(request, response);
        
        /*
         * 可以通过response修改定义响应内容,比如返回json数据:
         * response.setCharacterEncoding("utf-8");
         * response.setContentType("application/json;charset=utf-8");
         * response.getWriter().write("json串");
         */
    }


}

这种处理器适配器和原始的service差不多,可以通过response修改定义响应的内容。

 

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

注解的处理器和适配器

1、DispatcherServlet.properties:

在/org/springframework/web/servlet/DispatcherServlet.properties中装载了一些springMVC的默认配置。所以有时候你不配置映射器和适配器发现springmvc还能正常使用。

技术分享
# Default implementation classes for DispatcherServlet‘s strategy interfaces.
# Used as fallback when no matching beans are found in the DispatcherServlet context.
# Not meant to be customized by application developers.

org.springframework.web.servlet.LocaleResolver=org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver

org.springframework.web.servlet.ThemeResolver=org.springframework.web.servlet.theme.FixedThemeResolver

org.springframework.web.servlet.HandlerMapping=org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping,    org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping

org.springframework.web.servlet.HandlerAdapter=org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter,    org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter,    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter

org.springframework.web.servlet.HandlerExceptionResolver=org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerExceptionResolver,    org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver,    org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver

org.springframework.web.servlet.RequestToViewNameTranslator=org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator

org.springframework.web.servlet.ViewResolver=org.springframework.web.servlet.view.InternalResourceViewResolver

org.springframework.web.servlet.FlashMapManager=org.springframework.web.servlet.support.SessionFlashMapManager
DispatcherServlet.properties

 

2、有关的映射器和适配器:

Spring3.1之前的注解处理映射器:

         org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping

spring3.1之后的注解处理映射器:

  org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping

spring3.1之前的注解适配器:

  org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter

spring3.1之后的注解适配器:

  org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter

 

3、配置注解的适配器和映射器:

  <!-- 注解的映射器 -->
    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
    <!-- 注解的适配器 -->
    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>

可以使用mvc:annotation-driven代替上面的注册映射器和注册适配器

mvc:annotation-driven默认加载了很多的参数绑定方法,比如json转换解析器就默认加载了

实际开发中使用下面的这个:

<!--  <mvc:annotation-driven></mvc:annotation-driven>-->

 

4、注解的适配器和映射器开发

注解处理器的编写:

package cn.itcast.ssm.controller;

import java.util.ArrayList;
import java.util.List;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import cn.itcast.ssm.domain.Items;


/**
 * 注解开发的Handler
 * @author Administrator
 *
 */
//使用@Controller标识它是一个控制器 handler
@Controller
public class ItemsController3{

    //商品查询列表
    //@RequestMapping实现对queryItems方法和url进行映射,一个方法对应一个url
    //一般建议将url和方法写成一样
    //url中的后缀现在可加可不加
    @RequestMapping("/queryItems")
    public ModelAndView queryItems()throws Exception{
         
        //调用service查找数据库,查找商品列表,这里使用静态数据模拟
        List<Items> itemsList=new ArrayList<Items>();
        //向list中填充静态数据
        
        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=new ModelAndView("/WEB-INF/jsp/items/itemsList.jsp");
        //我们前面使用的是jsp的全路径,如果在视图解析器中配置了jsp的前缀和后缀,可以写成这样:
        ModelAndView modelAndView=new ModelAndView("items/itemsList");
        
        modelAndView.addObject("itemsList", itemsList); 
        
        return modelAndView;
        
    }




}

 

注解处理器的配置:

    <!-- 对于注解的Handler可以单个配置
    实际开发中建议使用组件扫描
    bean的id可以不写,因为已经使用注解完成了url映射对应 -->
    <!--  <bean class="cn.itcast.ssm.controller.ItemsController3"/> -->

  <!-- 可以扫描controller、service、...
           这里让扫描controller,指定controller的包
            -->
           <context:component-scan base-package="cn.itcast.ssm.controller"></context:component-scan>

 

注解处理器开发的知识点:

@Controller注解标识该类为一个控制器

//使用@Controller标识它是一个控制器 handler
@Controller
public class ItemsController3{

@RequestMapping注解将实现方法和一个url进行映射

//商品查询列表
    //@RequestMapping实现对queryItems方法和url进行映射,一个方法对应一个url
    //一般建议将url和方法写成一样
    //url中的后缀现在可加可不加
    @RequestMapping("/queryItems")
    public ModelAndView queryItems()throws Exception{

 

 

部署调试:

访问链接:http://localhost:8080/9-29-01/queryItems.action

注意:

注解中的bean名不能和前面的bean 的id 或者name相同。

 

-----------------------------------------------------------------------------------------------------------

入门程序小结:

通过入门程序理解springmvc前端控制器、处理器映射器、处理器适配器、视图解析器用法。

 

前端控制器配置:

第一种:*.action,访问以action结尾由DispatcherServlet进行解析

第二种:/,所有的访问的地址都由DispatcherServlet进行解析,对于静态的文件我们希望不用DispatcherServlet解析

    使用此种方法可以实现RESTful风格的url

 

处理器映射器

非注解处理器映射器(了解)

注解的处理器映射器(掌握)

         对标记有@Controller类中标记有@RequestMapping的方法进行映射,在@RequestMapping里面定义映射的url。

使用注解的映射器不用再xml中配置url和handler的映射关系

 

处理器适配器

非注解的处理器适配器(了解)

注解的处理器适配器(掌握)

         注解处理器适配器和注解的处理器映射器要配对使用。理解为不能使用费注解映射器进行映射

 

<!-- 注解的映射器 -->

    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>

    <!-- 注解的适配器 -->

    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>

实际开发中使用mvc:annotation-driven

 

视图解析器指定前缀和后缀:

   

<!-- 视图解析器 
解析jsp解析,默认使用jstl标签,classpath下得有jstl的包
-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!-- 配置jsp路径的前缀 -->
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <!-- 配置jsp路径的后缀 -->
        <property name="suffix" value=".jsp"/>
    </bean>

实际开发中可以这样使用:

 

        //ModelAndView modelAndView=new ModelAndView("/WEB-INF/jsp/items/itemsList.jsp");
        //我们前面使用的是jsp的全路径,如果在视图解析器中配置了jsp的前缀和后缀,可以写成这样:
        ModelAndView modelAndView=new ModelAndView("items/itemsList");

 

 

补充代码:

技术分享
package cn.itcast.ssm.controller;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.HttpRequestHandler;

import cn.itcast.ssm.domain.Items;

/**
 * 实现Controller接口的处理器
 * @author Administrator
 *
 */
public class ItemsController2 implements HttpRequestHandler{

    public void handleRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        /*
         * 我们发现它的方法和我们Servlet中的service差不多。其实用法也是差不多的
         */
        //调用service查找数据库,查找商品列表,这里使用静态数据模拟
        List<Items> itemsList=new ArrayList<Items>();
        //向list中填充静态数据
        
        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的addObject方法
        request.setAttribute("itemsList", itemsList);
        
        //设置转发的视图
        request.getRequestDispatcher("/WEB-INF/jsp/items/itemsList.jsp").forward(request, response);
        
        /*
         * 可以通过response修改定义响应内容,比如返回json数据:
         * response.setCharacterEncoding("utf-8");
         * response.setContentType("application/json;charset=utf-8");
         * response.getWriter().write("json串");
         */
    }


}
ItemsController2.java
技术分享
package cn.itcast.ssm.controller;

import java.util.ArrayList;
import java.util.List;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import cn.itcast.ssm.domain.Items;


/**
 * 注解开发的Handler
 * @author Administrator
 *
 */
//使用@Controller标识它是一个控制器 handler
@Controller
public class ItemsController3{

    //商品查询列表
    //@RequestMapping实现对queryItems方法和url进行映射,一个方法对应一个url
    //一般建议将url和方法写成一样
    //url中的后缀现在可加可不加
    @RequestMapping("/queryItems")
    public ModelAndView queryItems()throws Exception{
         
        //调用service查找数据库,查找商品列表,这里使用静态数据模拟
        List<Items> itemsList=new ArrayList<Items>();
        //向list中填充静态数据
        
        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=new ModelAndView("/WEB-INF/jsp/items/itemsList.jsp");
        //我们前面使用的是jsp的全路径,如果在视图解析器中配置了jsp的前缀和后缀,可以写成这样:
        ModelAndView modelAndView=new ModelAndView("items/itemsList");
        
        modelAndView.addObject("itemsList", itemsList); 
        
        return modelAndView;
        
    }




}
ItemsController3.java

 

springmvc入门程序

标签:

原文地址:http://www.cnblogs.com/aigeileshei/p/5921039.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!