springmvc

课堂笔记

1.Springmvc是什么

Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发,Spring Web MVC也是要简化我们日常Web开发的。

1.1  Springmvc 架构图

1、DispacherServlet前端控制器

负责用户请求和响应,是一个中央控制器(调度),调用HandlerMapping查找Handler,调用HandlerAdapter处理器适配器执行Handler,调用ViewResolver视图解析器去解析视图,有了DispacherServlet有利于框架扩展,减少了各各组件之间耦合性。

2、HandlerMapping处理器映射器

不需要开发,使用框架提供的

负责查找Handler(常用action),通过xml配置方式或注解方式将Handler类和request请求Handler链接地址进行对应配置。

3、HandlerAdapter处理器适配器

不需要开发,使用框架提供的

Springmvc提供了很多种适配器,注解适配器支持注解开发、原始servlet适配器(HanderRequestAdapter)支持原始servlet的执行。

负责执行Handler,适配器是按照一定的规则去执行Handler,调用Handler返回的结果是ModelAndView,ModelAndView将Model和view封装起来(模型数据和视图)

4、ViewResolver视图解析器

不需要开发,使用框架提供的

负责进行视图解析,返回View,框架执行很多类型的View(jstlView、pdfView。。。)

5、Handler处理器(需要开发)

需要开发,按照适配器的规则开发,比如适配器要求Handler实现某个接口,Handler必须实现接口。

6、View视图页面(jsp) (需要开发)

需要开发,jsp+jstl。为了视图通用性建议使用第三方框架,jstl。

处理器映射器、处理器适配器、视图解析器称为springmvc的三大件。

HTTP 协议简介

1.2  HTTP 简介/HTTP   SSL

HTTP(Hypertext Transfer Protocol,超文本传输协议①)是在万维网上进行通信时

所使用的协议方案。HTTP 有很多应用,但最著名的是用于Web 浏览器和Web 服

务器之间的双工通信。

1.3   HTTP报文

报文组成

起始行

报文的第一行就是起始行,在请求报文中用来说明要做些什么,在响应报文中说

明出现了什么情况。

• 首部字段

起始行后面有零个或多个首部字段。每个首部字段都包含一个名字和一个值,为

了便于解析,两者之间用冒号(:)来分隔。首部以一个空行结束。添加一个首

部字段和添加新行一样简单。

• 主体

空行之后就是可选的报文主体了,其中包含了所有类型的数据。请求主体中包括

了要发送给Web 服务器的数据;响应主体中装载了要返回给客户端的数据。起

始行和首部都是文本形式且都是结构化的,而主体则不同,主体中可以包含任意

的二进制数据(比如图片、视频、音轨、软件程序)。当然,主体中也可以包含

文本

1.4  请求实例

1.5   一些常见的HTTP方法

GET 从服务器向客户端发送命名资源

PUT 将来自客户端的数据存储到一个命名的服务器资源中去

DELETE 从服务器中删除命名资源

POST 将客户端数据发送到一个服务器网关应用程序

HEAD 仅发送命名资源响应中的HTTP 首部

1.6   HTTP状态码[11]

常见状态码

200 OK。文档正确返回

302 Redirect(重定向)。到其他地方去获取资源

404 Not Found(没找到)。无法找到这个资源

405 Method Not Allowed(不允许使用的方法)

406 Not Acceptable(无法接受) 客户端可以指定一些参数来说明希望接受哪些类型的实体。服务器没有资源与客可接受的URL 相匹配时可使用此代码

请求中有一个所请求的URI 不支持的方法。响应中

应该包含一个Allow 首部,以告知客户端所请求的

资源支持使用哪些方法

状态码分类

总体范围已定义范围类  别

100~199 100~101 信息

200~299 200~206 成功

300~399 300~305 重定向

400~499 400~415 客户端错误

500~599 500~505 服务器错误

1.7  与springmvc关系(struts2 请求的路径)

处理器映射器:

处理器适配器:使用下面的适配器

通过上面代码可以看出,如果Handler实现了Controller接口,那么就可以完成执行工作。

视图解析器

如果在classpath下有jstl的jar包,那么就不需要配置如下内容

第四步:编写Handler处理器(编写action)

按照适配器要求的规则

第五步:编写jsp视图页面

注意:页面的名称要与返回的逻辑视图名一致

第六步:启动tomcat运行工程

注解的方式:

  1. Spring配置文件中的配置更改为
<?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:p="http://www.springframework.org/schema/p"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd"> <!-- 这是非注解的配置
<context:component-scan base-package="org.springframework.samples.petclinic.web"/>
<bean class=" org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
<bean name="/welcome.html" class="controller.WelcomeController" />
-->
<!-- 注解的配置-->
<context:component-scan base-package="controller" />
<mvc:annotation-driven />
<!-- 视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" >
<property name="prefix" value="/WEB-INF/pages/" />
<property name="suffix" value=".jsp" />
</bean> </beans>

:  要添加mvc配置

1.

xmlns:mvc=http://www.springframework.org/schema/mvc

2.

http://www.springframework.org/schema/mvc
            http://www.springframework.org/schema/mvc/spring-mvc.xsd

3.

<context:component-scan base-package="controller" />
              <mvc:annotation-driven />

2.如上配置后:

在配置中的  Base-package 的Controller是src下的`包

在这个包下的类,如设置了注解,就可以关联到:

类的注解名:@Controller

导入

方法的注解名: @RequestMapping(value=”/url”)

url为:请求地址栏项目后边跟的地址

导入

例子们

例:1 基本的

@Controller
public class HelloController { @RequestMapping(value="/hello")
public String show(){
System.out.println("hello\t");
  //返回的视图名
return "welcome";
}
}

该例中  @RequestMapping (value="/hello")的hello为请求的逻辑名

http://localhost:8080/SpringOne/hello       //SpringOne是项目名

return 一个视图名,一般是一个页面的名称.

例子2:带参数的方法

@Controller
public class HelloController {
//带参的 例子
@RequestMapping(value="/hello")
public String show(@RequestParam(value="user") String user1){
System.out.println("hello\t"+user);
  //返回的视图名
return "welcome";
}
}

上面的例子是带参的方式:  其中的value="user" 跟请求地址栏的参数名一致   ,容器会把请求时传过来的参数赋给 user1

// 如请求栏未传过来参数会报错   那么设置   equired=false;

参数跟 方法的value  : /hello 一起拼成的是一个带参数的地址,换言之一个带参数的请求会被解析根据   /hello 找到方法  根据 (@RequestParam(value="user") 给参数赋值

http://localhost:8080/SpringOne/hello?user=123      //这个是地址栏

(@RequestParam(value="user") :可以不写

例:

@Controller
public class HelloController { @RequestMapping(value="/hello")
public String show(String user){
System.out.println("hello\t"+user);
//返回的视图名
return "welcome";
}
}

// 这时要求 方法的参数的名称必须与请求栏的那个参数名一致    个人猜测:也许容器会把(@RequestParam(value="")的值默认为与public  String  show(String user)   的user
//一致.

例子3.  返回数据

@Controller
public class HelloController { @RequestMapping(value="/hello")
public String show(String user,Model model){
System.out.println("hello\t"+user);
//给model中添值
model.addAttribute("user",user);
//返回的视图名
return "welcome";
}
}

上边的例子都是返回一个视图名,并没有回传数据,但大部分时候是要传递数据的. Model是Spring默认的借口 往里添加数据,就可以在页面上得到.  //Model的类型  :Map  ;所以也可以直接用map

视图(jsp)中:

    <!-- 用el表达式 -->
<h1>welcome spring ! ${user}</h1>

地址:

http://localhost:8080/SpringOne/hello?user=123

结果为:

例4返回ModelAndView

例:

@Controller
public class HelloController { @RequestMapping(value="/hello")
public ModelAndView list(){
//存入的集合
List<String> list =new ArrayList<String>();
list.add("张三");
list.add("李四");
//创建一个ModelAndView对象
ModelAndView mav=new ModelAndView();
//添加视图名
mav.setViewName("welcome");
//添加数据
mav.addObject("user",list);
return mav;
}
}

前边的是返回字符串,也可以返回ModelAndView

用      mav.setViewName("welcome");   存要返回的视图(页面)名

用       mav.addObject("user",list);  存数据

还可以指定请求的方法类型

如:

@RequestMapping(value="/hello",method=RequestMethod.POST)
public ModelAndView list(){

spring mvc 笔记的更多相关文章

  1. Spring Mvc 笔记二之异常和文件上传

    spring mvc的异常与文件上传 1.异常: spring注解版的异常有局部异常和全局异常                1.局部异常对单个controller有效;(在controller类写一 ...

  2. Spring MVC 笔记 —— Spring MVC 文件上传

    文件上传 配置MultipartResolver <bean id="multipartResolver" class="org.springframework.w ...

  3. spring mvc笔记

    80214shuenjian224shuenjian@sina 北风网公开课课程大纲1.学习MVC框架的步骤2.Spring MVC运行机制3.演示Spring MVCAdd Maven suppor ...

  4. Spring MVC 笔记--配置基于JavaConfig

    主要使用基于 JavaConfig 方式配置 配置 DispatcherServlet 通过继承抽象类AbstractAnnotationConfigDispatcherServletInitiali ...

  5. Spring MVC笔记 使用JdbcTemplate

    Spring提供了 JdbcTemplate 来封装数据库jdbc操作细节, 包括: 数据库连接[打开/关闭] ,异常转义 ,SQL执行 ,查询结果的转换, 其中体现了 模板模式 的设计模式思想. 使 ...

  6. Spring MVC 笔记2 HelloWorld

    实现这个例子的问题 WEB-INFO目录下必须有spring的包,放在lib下:如下图(这里我直接把idea创建时宣称springmvc,然后把idea给的lib拷贝了下来,也可以的) request ...

  7. Spring MVC 笔记 概述

    学习笔记 模型:封装装程序数据 视图:渲染模型数据,一般来说就是输出HTML 控制:处理请求,构建模型并将其传递给视图进行渲染 以上三者均围绕DispatcherServlet设计,它处理所有的HTT ...

  8. 【Spring学习笔记-MVC-18.1】Spring MVC实现RESTful风格-同一资源,多种展现:xml-json-html

    概要 要实现Restful风格,主要有两个方面要讲解,如下: 1. 同一个资源,如果需要返回不同的形式,如:json.xml等: 不推荐的做法: /user/getUserJson /user/get ...

  9. Spring MVC 学习笔记(整理)

    SpringMVC学习 1.概述 Spring MVC是一种基于Java实现MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行解耦,基于请求-响应模型帮助我们 ...

随机推荐

  1. Android 画直线并实现拖动

    自定义View,在onDraw()方法中绘制一条直线,在onTouch()方法中监听手指的移动. public class AroundDragView extends View implements ...

  2. shell常用命令总结

    统计文件行数 wc -l filename grep -c "" filename sed -n '$=' filename awk 'END{print NR}' filenam ...

  3. 《Genesis-3D开源游戏引擎--横版格斗游戏制作教程02:关键帧动画导入与切割》

    2. 关键帧动画导入与切割 动画的分割与导入概述: 在游戏当中,游戏角色在不同状态下会有不同的动作,这些动作在引擎里相当于一段段的动画片段.当导入模型资源的时候,连同模型动画都会一并导入到引擎中.开发 ...

  4. linux进程,作业,守护进程,进程间同步

    ps axj命令查看系统中的进程.参数a表示不仅列当前用户的进程,也列出所有其他用户的进程,参数x表示不仅列有控制终端的进程,也列出所有无控制终端的进程,参数j表示列出与作业控制相关的信息: 凡是TP ...

  5. c++学生成绩管理系统

    虽然比较水 =.= 但是写了两节课+一个中午 都是强迫症的锅 http://www.cnblogs.com/wenruo/p/4940182.html #include <cstdio> ...

  6. 2015 CCPC D- Pick The Sticks(UESTC 1218) (01背包变形)

    http://acm.uestc.edu.cn/#/problem/show/1218 既然二维dp表示不了,就加一维表示是否在边界放置,放置一个,两个.有一个trick就是如果只放一根,那么多长都可 ...

  7. hdoj 5112 A Curious Matt

    A Curious Matt Time Limit: 2000/2000 MS (Java/Others)    Memory Limit: 512000/512000 K (Java/Others) ...

  8. Delphi调用C++写的dll示例

    最近做一个读市民卡的项目,读卡器公司提供的读市民卡dll是用C++写的. 下面记录一些自己的心得,供需要的朋友参考. 声明dll函数要加上stdcall关键字,否则可能会报地址非法的错误. 代码: u ...

  9. SpringMVC请求分发的简单实现

    简介     以前用了下SpringMVC感觉挺不错了,前段事件也简单了写了一些代码来实现了SpringMVC简单的请求分发功能,实现的主要思想如下: 将处理请求的类在系统启动的时候加载起来,相当于S ...

  10. SignalR安装以及安装问题

    正常节奏 介绍 SignalR 是 ASP.NET 团队正在开发的一个 Microsoft .NET Framework 库和 jQuery 插件,可能包括在以后版本的 ASP.NET 平台中. 它提 ...