springmvc详解(一):入门程序

2.4.9、相关错误

2.4.10、入门程序总结

三、非注解的处理器适配器和映射器

3.1、非注解处理器适配器HttpRequestHandlerAdapter

3.2、非注解处理器映射器SimpleUrlHandlerMapping

3.3、部署调试

3.4、非注解的处理器适配器和映射器总结

四、注解的处理器映射器和适配器

4.1、配置注解映射器和适配器。

4.2、开发注解Handler

4.3、在spring容器中加载Handler

4.4、部署调试

五、入门程序总结

5.1、springmvc开发步骤:针对注解式的,非注解了解就好

5.2、springmvc框架详解

六、参考文献


一、什么是springmvc

==============

1.1、springmvc的地位


springmvc是spring框架的一个模块,springmvc和spring无需通过中间整合层进行整合。

springmvc是一个基于mvc的web框架。

1.2、springmvc框架(工作原理)


工作原理:

第一步:发起请求到前端控制器(DispatcherServlet)

第二步:前端控制器请求HandlerMapping查找 Handler

可以根据xml配置、注解进行查找

第三步:处理器映射器HandlerMapping向前端控制器返回Handler

第四步:前端控制器调用处理器适配器去执行Handler

第五步:处理器适配器去执行Handler

第六步:Handler执行完成给适配器返回ModelAndView

第七步:处理器适配器向前端控制器返回ModelAndView

ModelAndView是springmvc框架的一个底层对象,包括 Model和view

第八步:前端控制器请求视图解析器去进行视图解析

根据逻辑视图名解析成真正的视图(jsp)

第九步:视图解析器向前端控制器返回View

第十步:前端控制器进行视图渲染

视图渲染将模型数据(在ModelAndView对象中)填充到request域

第十一步:前端控制器向用户响应结果

涉及到的组件分析:

1、前端控制器DispatcherServlet(不需要程序员开发)

作用:接收请求,响应结果,相当于转发器,中央处理器。

有了DispatcherServlet减少了其它组件之间的耦合度。

2、处理器映射器HandlerMapping(不需要程序员开发)

作用:根据请求的url查找Handler

3、处理器适配器HandlerAdapter

作用:按照特定规则(HandlerAdapter要求的规则)去执行Handler

4、处理器Handler(需要程序员开发)

注意:编写Handler时按照HandlerAdapter的要求去做,这样适配器才可以去正确执行Handler

5、视图解析器View resolver(不需要程序员开发)

作用:进行视图解析,根据逻辑视图名解析成真正的视图(view)

6、视图View(需要程序员开发jsp)

View是一个接口,实现类支持不同的View类型(jsp、freemarker、pdf…)

从组件分析可以知道:我们需要重点开发的是处理器Handler(或者Controller)和视图View;至于前端控制器DispatcherServlet、处理器映射器HandlerMapping、处理器适配器HandlerAdapter、视图解析器View resolver都是现成的,我们只需要把他们配置好就可以直接使用。

二、入门程序

======

2.1、背景需求


以案例作为驱动。

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

功能需求:商品列表查询

2.2、环境准备


数据库:mysql5.5(其他也可以)

java环境:jdk1.8(eclipse或者IDEA都可以)

spring版本:spring4

需要的jar包:ssm全部jar包,参照https://mp.csdn.net/postedit/86485520这篇博客,百度云免费下载。

2.3、工程结构


2.4、组件配置及开发


2.4.1、配置前端控制器

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

<?xml version="1.0" encoding="UTF-8"?>

springmvcfirst

springmvc

org.springframework.web.servlet.DispatcherServlet

contextConfigLocation

classpath:springmvc.xml

springmvc

*.action

index.html

index.htm

index.jsp

default.html

default.htm

default.jsp

web.xml文件中主要做了这几件事:

1、配置了前端控制器DispatcherServlet

2、加载了springmvc的配置文件contextConfigLocation

3、指定url的解析方式

2.4.2、配置处理器适配器

在springmvc.xml文件中配置处理器适配器

<bean

class=“org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter”>

这里先使用SimpleControllerHandlerAdapter这个非注解处理器适配器。(接下来会介绍另一个非注解的处理器适配器,以及注解的处理器适配器)

非注解处理器适配器SimpleControllerHandlerAdapter要求:编写的Handler实现 Controller接口。

2.4.3、开发Handler

Handler是一个类,存于Controler包下

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.po.Items;

public class ItemsController1 implements Controller{

@Override

public ModelAndView handleRequest(HttpServletRequest request,

HttpServletResponse response) throws Exception {

//调用service查找 数据库,查询商品列表,这里使用静态数据模拟

List itemsList = new ArrayList();

//向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的setAttribut,在jsp页面中通过itemsList取数据

modelAndView.addObject(“itemsList”, itemsList);

//指定视图

//下边的路径,如果在视图解析器中配置jsp路径的前缀和jsp路径的后缀,修改为

//modelAndView.setViewName(“/WEB-INF/jsp/items/itemsList.jsp”);

//上边的路径配置可以不在程序中指定jsp路径的前缀和jsp路径的后缀

modelAndView.setViewName(“items/itemsList”);

return modelAndView;

}

}

2.4.4、视图编写

编写itemsList.jsp文件,存于/springmvcfirst/WebRoot/WEB-INF/jsp/items/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”%>

查询商品列表

查询条件:

商品列表:

商品名称 商品价格 生产日期 商品描述 操作

<c:forEach items=“${itemsList }” var=“item”>

${item.name } ${item.price } ${item.detail }

id=${item.id}">修改

</c:forEach>

2.4.5、在springmvc.xml中配置编写的Handler

2.4.6、配置处理器映射器

在springmvc.xml文件中配置

<bean

class=“org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping” />

2.4.7、配置视图解析器

在springmvc.xml文件中配置

<bean

class=“org.springframework.web.servlet.view.InternalResourceViewResolver”>

2.4.8、部署调试

Debug方式执行Service打开浏览器,输入相应的Handler的url即可。

2.4.9、相关错误

处理器映射器根据url找不到Handler,报下边的错误。说明url错误。

处理器映射器根据url找到了Handler,转发的jsp页面找到,报下边的错误,说明jsp页面地址错误了。

2.4.10、入门程序总结

由上面的组件分析可以知道,我们在web.xml我文件中配置了前端控制器、加载了springmvc的配置文件

在springmvc.xml中配置了处理器适配器、处理器映射器、Handler、视图解析器

入门程序中的处理器适配器使用的是SimpleControllerHandlerAdapter,它要求编写的Handler实现 Controller接口。

入门程序中的处理器映射器使用的是BeanNameUrlHandlerMapping,也就是需要在配置Handler时指定beanname,该处理器映射器才能找到它。

接下来我们会使用另一个非注解处理器适配器和处理器映射器,也会对Handler有相应的要求。

三、非注解的处理器适配器和映射器

================

上面我们已经实现了springmvc的第一个程序,其中的处理器适配器使用的是SimpleControllerHandlerAdapter,处理器映射器使用的是BeanNameUrlHandlerMapping。接下来我们使用另一个处理器适配器HttpRequestHandlerAdapter,另一个处理器映射器SimpleUrlHandlerMapping。

3.1、非注解处理器适配器HttpRequestHandlerAdapter


理器适配器HttpRequestHandlerAdapter要求:编写的Handler实现 HttpRequestHandler接口

于是我们再写一个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 org.springframework.web.servlet.ModelAndView;

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

import cn.itcast.ssm.po.Items;

public class ItemsController2 implements HttpRequestHandler{

@Override

public void handleRequest(HttpServletRequest request, HttpServletResponse

response) throws ServletException, IOException {

//调用service查找 数据库,查询商品列表,这里使用静态数据模拟

List itemsList = new ArrayList();

//向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);

//设置模型数据

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串”);*/

}

}

3.2、非注解处理器映射器SimpleUrlHandlerMapping


itemsController1

itemsController1

itemsController2

3.3、部署调试


我们对后配置的非注解处理器适配器HttpRequestHandlerAdapter和非注解处理器映射器SimpleUrlHandlerMapping进行调试

Debug方式执行Service打开浏览器,输入相应的Handler的url即可。

3.4、非注解的处理器适配器和映射器总结


通过上面的讲解,估计大家也发现了,不同的处理器适配器对编写的Handler有不同的要求,严重限制了我们的开发。同时springmvc.xml文件中可以存在多个不同的处理器适配器和映射器,如果这样一个一个的显示配置,工作量是繁琐繁重的。于是,就引出了注解的处理器映射器和适配器,他可以解决非注解方式存在的弊端。

四、注解的处理器映射器和适配器

===============

在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注解适配器。

大家对照自己的spring版本相应使用(我是用的是3.1之后的RequestMappingHandlerMapping和RequestMappingHandlerAdapter)

4.1、配置注解映射器和适配器。


  • 22
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值