一、引言

从.NET阵地专向Java阵营,没学SSH,直接面向SpringMVC。

首先了解下基本概念:

核心架构的具体流程步骤如下:

1、  首先用户发送请求——>DispatcherServlet,前端控制器收到请求后自己不进行处理,而是委托给其他的解析器进行处理,作为统一访问点,进行全局的流程控制;

2、  DispatcherServlet——>HandlerMapping, HandlerMapping将会把请求映射为HandlerExecutionChain对象(包含一个Handler处理器(页面控制器)对象、多个HandlerInterceptor拦截器)对象,通过这种策略模式,很容易添加新的映射策略;

3、  DispatcherServlet——>HandlerAdapter,HandlerAdapter将会把处理器包装为适配器,从而支持多种类型的处理器,即适配器设计模式的应用,从而很容易支持很多类型的处理器;

4、  HandlerAdapter——>处理器功能处理方法的调用,HandlerAdapter将会根据适配的结果调用真正的处理器的功能处理方法,完成功能处理;并返回一个ModelAndView对象(包含模型数据、逻辑视图名);

5、  ModelAndView的逻辑视图名——> ViewResolver, ViewResolver将把逻辑视图名解析为具体的View,通过这种策略模式,很容易更换其他视图技术;

6、  View——>渲染,View会根据传进来的Model模型数据进行渲染,此处的Model实际是一个Map数据结构,因此很容易支持其他视图技术;

7、返回控制权给DispatcherServlet,由DispatcherServlet返回响应给用户,到此一个流程结束

二、上代码(注解handlermapping与handleradapter,主流方法)

文件工程目录如下:

1、首先配置eclipse环境和tomcat结合,前几篇博客已经介绍了,添加jar包

将用到的jar包,添加spring依赖的jar包到lib文件里面,下载地址为点击打开链接中的distribution zip file;

2、创建目录结构,新建index.jsp,UserController2和spring-config.xml文件

3、web.xml配置

配置servletdispatcher前端控制器。其中param-value中的spring-config.xml就是文件结构中创建的文件,通过web.xml文件找到配置文件。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://xmlns.jcp.org/xml/ns/javaee"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"id="WebApp_ID" version="3.1"><display-name>Yellowbike</display-name><welcome-file-list><welcome-file>index.html</welcome-file><welcome-file>index.htm</welcome-file><welcome-file>index.jsp</welcome-file><welcome-file>default.html</welcome-file><welcome-file>default.htm</welcome-file><welcome-file>default.jsp</welcome-file></welcome-file-list><servlet><servlet-name>spring</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/spring-config.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>spring</servlet-name><url-pattern>/</url-pattern></servlet-mapping>
</web-app>

4、配置文件

通过配置文件加载注解handler mapping,handleradapter和view resolver;

<?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:mvc="http://www.springframework.org/schema/mvc"xmlns:p="http://www.springframework.org/schema/p" 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/beanshttp://www.springframework.org/schema/beans/spring-beans-4.0.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsdhttp://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd"><!-- <bean name="/getName" class="com.xcy.controller.UserController"></bean> <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean> <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"></bean> --><!--配置handler --><context:component-scan base-package="com.xcy.controller"></context:component-scan><!--加载handlermapping和handleradapter --><mvc:annotation-driven></mvc:annotation-driven><beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/jsp/"></property><property name="suffix" value=".jsp"></property></bean>
</beans>

5、创建handler(controller)

通过controller的注解配置,设置请求映射并将数据返回视图

package com.xcy.controller;import java.io.IOException;
import java.io.InputStream;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;import com.xcy.po.Bike;
import com.xcy.po.User;@Controller
public class UserController2 {@RequestMapping("/getName")public ModelAndView getName() {// TODO Auto-generated method stubUser user = new User();user.setId(1);user.setName("宣传语");ModelAndView modelAndView = new ModelAndView();modelAndView.addObject("user", user);modelAndView.setViewName("user");return modelAndView;}@RequestMapping(value="/getBike",method= RequestMethod.POST)public ModelAndView getBike(HttpServletRequest request, HttpServletResponse response) {// TODO Auto-generated method stubBike bike=new Bike();try {       InputStream inputStream;inputStream = Resources.getResourceAsStream("mapConfig.xml");SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);SqlSession sqlSession = sqlSessionFactory.openSession();String code= request.getParameter("code");bike= sqlSession.selectOne("map.bike.findBike", code);System.out.println(bike);sqlSession.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}ModelAndView modelAndView = new ModelAndView();modelAndView.addObject("bike", bike);modelAndView.setViewName("bikeselect");return modelAndView;}@RequestMapping(value="/addBike",method=RequestMethod.POST)public ModelAndView addBike(HttpServletRequest request, HttpServletResponse response) {// TODO Auto-generated method stub//获取参数String code=request.getParameter("code");String password=request.getParameter("password");Bike bike=new Bike();bike.setF_CODE(code);bike.setF_PW(password);//添加到数据库try {       InputStream inputStream;inputStream = Resources.getResourceAsStream("mapConfig.xml");SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);SqlSession sqlSession = sqlSessionFactory.openSession();sqlSession.insert("map.bike.addBike", bike);sqlSession.commit();sqlSession.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}ModelAndView modelAndView = new ModelAndView();modelAndView.addObject("bike", bike);modelAndView.setViewName("bikeadd");return modelAndView;}}

6、视图解析接受数据

<%@page import="com.xcy.po.Bike"%>
<%@page import="com.xcy.po.User"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!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>asfd title here</title>
</head>
<style>
div{width:500px;/*定宽*/margin:20px auto;/* margin-left 与 margin-right 设置为 auto */
}</style>
<body><div id="mid"><a href="/Yellowbike">返回</a><br><%Bike bike = (Bike) request.getAttribute("bike");%><%="密码为" + bike.getF_PW()%></div>
</body>
</html>

三、历史发展

3.1 注解

上节代码中的代码使用的是注解型handlermapping与handleradapter,

  在spring3.1之前使用:

注解映射器:org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping 
注解适配器:org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter

  在spring3.1之后使用:

注解映射器:org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping 
注解适配器:org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter

但是上节中没有配置因为它们是默认加载方式,

  只要这一个注解即可,适配器和映射器就可以省略不配了,默认加载最新的handlermapping与handleradapter,同时加载了一些其他东西,如json解析器等。另外,如果Controller很多的话springmvc中也提供了扫描包的方式来配置:

 
  所以到最后,使用注解的方法,适配器、映射器、Controller等的配置加在一起就两行代码!搞定!当然,视图解析器还是和上一节一样,自己配一下即可。

3.2 非注解

但是最早之前使用的是非注解型的方式,下面介绍下:

先说流程区别,只有在spring-config.xml和handler类不一样,所以只对这两个地方说明。

1. handlermapping

(1)

  这个映射器根据名字也可以看得出,是根据bean的name作为url进行查找,所以配置Handler的bean的时候,要配置一下name属性,设置为要请求的url即可正确映射。

  (2)还有一种处理器映射器叫简单映射器:org.springframework.web.servlet.handler.SimpleUrlHandlerMapping。它的映射方式是直接根据url来的,如下:

  这种可以直接配url,然后对应的url指定一个Handler,使用的是该Handler对应bean的id,所以只要在bean中配好id,然后将url和这个id对应上即可。 
  经测试,这两个映射器也可以一起使用,互不冲突,匹配到哪个就用哪个。

2.  handleradapter

(1)

 
  SimpleControllerHandlerAdapter适配器能执行实现了Controller接口的Handler,所以我们所写的Handler需要实现Controller接口。

public class UserController implements Controller {@Overridepublic ModelAndView handleRequest(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception {// TODO Auto-generated method stubUser user = new User();user.setId(1);user.setName("宣传语");ModelAndView modelAndView = new ModelAndView();modelAndView.addObject("user", user);modelAndView.setViewName("/WEB-INF/jsp/user.jsp");return modelAndView;}}

  (2)除了这个适配器外,还有另一个适配器,叫org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter。即可以配置:

public class ItemsController2 implements HttpRequestHandler {@Overridepublic void handleRequest(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//实际中是调用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);//设置模型数据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串");*/}
}

四、总结

  • springMVC基本介绍
  • springMVC环境配置,jar包需求
  • springMVC入门程序
  • springMVC发展:非注解映射器适配器到注解映射器适配器

JavaWeb——springMVC入门程序相关推荐

  1. ijidea搭建springMVC入门程序,配置TomCat

    ijidea搭建springMVC入门程序,适用于超级新手.保姆教程 1. 2. 3. 4.输入可以更快创建项目,不需要去下载 archetypeCatalog internal 5.此时的目录结构: ...

  2. 【SpringMVC框架】springmvc入门程序-环境搭建

    入门程序 1.需求 以案例作为驱动. springmvc和mybaits使用一个案例(商品订单管理). 回顾一下表单各项关联关系 见图数据模型 功能需求:商品列表查询 2.环境准备 数据库环境:mys ...

  3. JavaWeb——MyBatis入门程序

    一.引言 一般MyBatis与springMVC常常一起使用,而且与hibernate相比有着天然的优势,继续推进. MyBatis应用程序根据XML配置文件创建SqlSessionFactory,S ...

  4. SpringMVC框架----SpringMVC入门程序中的组件介绍

    springmvc框架:底层基于组件方式执行流程. 前端控制器和处理器映射器都称为组件 客户端先发送request请求,请求先到前端控制器,前端控制器是一个指挥中心.它找到了处理器映射器.(之前案例中 ...

  5. 第一个SpringMVC入门程序

    一.写在前面 1.SpringMVC处理流程 二.创建工程 1.在Eclipse下新建Dynanic Web Project 2.输入工程名springmvctest,选择module version ...

  6. SpringMVC学习(一)———— springmvc框架原理分析和简单入门程序

    一.什么是springmvc? 我们知道三层架构的思想,并且如果你知道ssh的话,就会更加透彻的理解这个思想,struts2在web层,spring在中间控制,hibernate在dao层与数据库打交 ...

  7. java mvc框架代码_JAVA技术学习笔记:SpringMVC框架(内附入门程序开发代码)

    原标题:JAVA技术学习笔记:SpringMVC框架(内附入门程序开发代码) JavaEE体系结构包括四层,从上到下分别是应用层.Web层.业务层.持久层.Struts和SpringMVC是Web层的 ...

  8. java元婴期(28)----java进阶(springmvc(2)---入门程序(下)基于注解开发(重点掌握))

    入门程序 非注解的处理器映射器和适配器 1.非注解的处理器映射器 处理器映射器: org.springframework.web.servlet.handler.BeanNameUrlHandlerM ...

  9. java元婴期(27)----java进阶(springmvc(1)---springmvc框架入门程序(上)(不基于注解开发))

    springmvc框架 什么是springmvc springmvc是spring框架的一个模块,springmvc和spring无需通过中间整合层进行整合.(struts2与Spring整合的时候需 ...

最新文章

  1. linux中pipe
  2. android 投影仪,不要购买投影仪, 安卓手机投屏很简单, 每个手机都可以
  3. [LOJ 6288]猫咪[CF 700E]Cool Slogans
  4. 第二章 向量(a)接口与实现
  5. 使用Bean验证扩展PrimeFaces CSV
  6. 怎么查询mysql的语法_mysql查询语法
  7. tomcat勾连mysql_tomcat9.0启动脚本startup.bat的分析
  8. 互联网晚报 | 1月26日 星期三 | 春晚正式入驻视频号;小红书合并社区与电商业务;中国电信5G消息正式商用...
  9. PHPCMS V9 为今天或几天前文章加new
  10. JavaScript玩转机器学习:平台和环境
  11. GJM:用C#实现网络爬虫(一) [转载]
  12. algorithm design manual: 8-19
  13. 电磁波与电磁信号、生活中的电磁波
  14. 虚拟交换机软件_千兆交换机如何识别优劣,千兆交换机识别方法!
  15. Spark streaming消费Kafka的正确姿势
  16. 动画效果之 Canvas学习-globalCompositeOperation详解
  17. javascript对象概念大全
  18. css旋转立方体教程,如何通过CSS3实现旋转立方体
  19. python绘制正多边形_python : turtle 画正多边形
  20. day1 -- ELMO语言模型

热门文章

  1. 机器人环境感知算法发展概述
  2. gulp html页面路径,通过gulp-connect部署静态页面,html页面中include路径无法get!
  3. 事件对象使用方法大全(源码解析)
  4. 如何使用MySQL进行备份?
  5. ubuntu之搭建http服务器apache2
  6. php 中 的含义
  7. OLAP-impala-大数据Week13-DAY6-impala
  8. Linux命令解释之sudo
  9. 【数据结构笔记45】通过中间步骤区分简单插入排序和归并排序
  10. 织梦php me,GitHub - czmz/DedeCMSv5: 中国专业的PHP网站内容管理系统-织梦内容管理系统...