首页 > 代码库 > springmvc入门程序

springmvc入门程序

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=http://www.mamicode.com/"<%=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=http://www.mamicode.com/"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=http://www.mamicode.com/"查询" /></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=http://www.mamicode.com/"${item.createtime }" pattern="yyyy-MM-dd HH:mm:ss"/></td>            <td>${item.detail }</td>            <td><a href=http://www.mamicode.com/"${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=http://www.mamicode.com/"/WEB-INF/jsp/"/>        <!-- 配置jsp路径的后缀 -->        <property name="suffix" value=http://www.mamicode.com/".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.AcceptHeaderLocaleResolverorg.springframework.web.servlet.ThemeResolver=org.springframework.web.servlet.theme.FixedThemeResolverorg.springframework.web.servlet.HandlerMapping=org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping,    org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMappingorg.springframework.web.servlet.HandlerAdapter=org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter,    org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter,    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapterorg.springframework.web.servlet.HandlerExceptionResolver=org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerExceptionResolver,    org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver,    org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolverorg.springframework.web.servlet.RequestToViewNameTranslator=org.springframework.web.servlet.view.DefaultRequestToViewNameTranslatororg.springframework.web.servlet.ViewResolver=org.springframework.web.servlet.view.InternalResourceViewResolverorg.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@Controllerpublic 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@Controllerpublic 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="http://www.mamicode.com/WEB-INF/jsp/"/>        <!-- 配置jsp路径的后缀 -->        <property name="suffix" value="http://www.mamicode.com/.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@Controllerpublic 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入门程序