1.SpringMVC基本概述

Spring 为展现层提供的基于 MVC 设计理念的优秀的Web 框架,是目前最主流的 MVC 框架之一

Spring3.0 后全面超越 Struts2,成为最优秀的 MVC 框架
Spring MVC 通过一套 MVC注解,让 POJO 成为处理请求的控制器,而无须实现任何接口。
     用SpringMVC代替web层
     MVC是一种设计模式:
          M:model 模型:用来封装数据,比如javabean
          V:view 视图:用来显示数据
          C:controller:用于接收前端页面发送的请求,然后调用servlet层处理,拿到处理结果并将结果返回给前端界面
     SpringMVC相当于MVC中的C和V!
支持 REST 风格的 URL 请求
采用了松散耦合可插拔组件结构,比其他 MVC 框架更具扩展性和灵活性
 
2.建一个最基础的SpringMVC项目
步骤:

– 导 jar 包
– 在 web.xml 中配置 DispatcherServlet
– 加入 Spring MVC 的配置文件
– 编写处理请求的处理器,并标识为处理器
– 编写视图
代码实现:
① 导jar包
– commons-logging-1.1.3.jar
– spring-aop-4.0.0.RELEASE.jar
– spring-beans-4.0.0.RELEASE.jar
– spring-context-4.0.0.RELEASE.jar
– spring-core-4.0.0.RELEASE.jar
– spring-expression-4.0.0.RELEASE.jar
– spring-web-4.0.0.RELEASE.jar
– spring-webmvc-4.0.0.RELEASE.jar
②  配置 .xml文件
   配置 DispatcherServlet :DispatcherServlet 默认加载 /WEB- INF/<servletName-servlet>.xml 的 Spring 配置文件,去Open Type中查DispatcherServlet
     

  <!-- The front controller of this Spring Web application, responsible for handling all application requests -->
<!-- 向服务器注册前端控制器 -->
<servlet>
<servlet-name>springDispatcherServlet</servlet-name>
<!--DispatcherServlet指的是SpringMVC的前端控制器,给服务器使用,创建servlet对象 -->
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 用于制定SpringMVC配置文件的路径以及名称 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- Map all requests to the DispatcherServlet for handling -->
<!-- 用servlet-mapping制定请求映射的路径 -->
<servlet-mapping>
<servlet-name>springDispatcherServlet</servlet-name>
<!-- 用url-pattern指定拦截的请求路径 -->
<url-pattern>/</url-pattern>
</servlet-mapping>
 新建springmvc.xml文件

点击Next输入文件名springmvc.xml,再点Next,在以下三项前打勾√

在Open Type中查找 InternalResourceViewResolver,获得其全路径

在springmvc.xml文件中添加

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">

在web.xml文件中可以不设置初始化参数,也就是不写<init-param>

但是要将spring.xml文件改名为 springDispatcherServlet-servlet.xml,并移动到WEB-INF目录下

 ③ 编写jsp页面和controller类
@RequestMapping(value="/sayHello",method=RequestMethod.GET,params={"username","pwd!=123"})
public String SUCCESS(){
System.out.println("111");
return "success";
}

@RequestMapping()可以定义在类上,也可以定义在方法上

–     类定义处:提供初步的请求映射信息。相对于 WEB 应用的根目录
–     方法处:提供进一步的细分映射信息。相对于类定义处的 URL

@RequestMapping 的 value、method、params 及 heads 分别表示请求URL、请求方法、请求参数及请求头的映射条件,他们之间是与的关系,联合使用多个条件可让请求映射 更加精确化

params表示及含义

–     param1: 表示请求必须包含名为 param1 的请求参数
–     !param1: 表示请求不能包含名为 param1 的请求参数
–     param1 != value1: 表示请求可以不包含名为 param1 的请求参数,若包含的话其值不能为 value1
如上例代码中,必须要有’username‘参数,’pwd‘参数可有可无,若有的话不能为‘123’
 
使用 @RequestMapping 映射请求,Ant 风格资源地址支持 3 种匹配符:
     –     ?:匹配文件名中的一个字符
     –     *:匹配文件名中的任意字符
     –     **:** 匹配多层路径
    
@RequestMapping 还支持 Ant 风格的 URL:
      – /user/*/createUser: 匹配  /user/aaa/createUser、/user/bbb/createUser 等 URL
      – /user/**/createUser: 匹配  /user/createUser、/user/aaa/bbb/createUser 等 URL
      – /user/createUser??:匹配   /user/createUseraa、/user/createUserbb 等 URL
 
 ④ 运行
 
3.REST :Representational State Transfer。(资源)表现层状态转化。是目前最流行的一种互联网软件架构。

  它结构清晰、符合标准、易于理解、扩展方便, 所以正得到越来越多网站的采用.
       HTTP 协议里面,四个表示操作方式的动词:
    GET 用来获 取资源
    POST 用来新建资源
    PUT 用来更新资源
    DELETE 用来删除资源

  

<a href="${pageContext.request.contextPath }/getOrderById/1">okok</a>

<form action="${pageContext.request.contextPath }/postOrderById/2" method="post">
<input type="submit" value="Submit"/>
</form> <form action="${pageContext.request.contextPath }/putOrderById/3" method="post">
<input type="hidden" name="_method" value="put"/>
<input type="submit" value="Submit"/>
</form> <form action="${pageContext.request.contextPath }/deleteOrderById/4" method="post">
<input type="hidden" name="_method" value="delete"/>
<input type="submit" value="Submit"/>
</form>

超链接<a>是get请求,浏览器 form 表单只支持 GET 与 POST 请求,而DELETE、PUT 等 method 并不支持,Spring3.0 添加了一个过滤器,可以将这些请求转换为标准的 http 方法,使得支持 GET、POST、PUT 与 DELETE 请求。需要在form表单中添加隐藏域,name为‘method',value为’POST/DELETE'

同时需要在web.xml文件中配置 HiddenHttpMethodFilter

  <!-- HiddenHttpMethodFilter过滤器可以将POST请求转化为PUT请求和DELETE请求 -->
<filter>
<filter-name>hiddenHttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>hiddenHttpMethodFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
@RequestMapping(value="/getOrderById/{id}",method=RequestMethod.GET)
public String getOrderById(@PathVariable(value="id") Integer id){
//调用service层方法
System.out.println(id);
return SUCCESS;
} @RequestMapping(value="/postOrderById/{id}",method=RequestMethod.POST)
public String postOrderById(@PathVariable(value="id") Integer id){
//调用service层方法
System.out.println(id);
return SUCCESS;
} @RequestMapping(value="/putOrderById/{id}",method=RequestMethod.PUT)
@ResponseBody
public String putOrderById(@PathVariable(value="id") Integer id){
//调用service层方法
System.out.println(id);
return SUCCESS;
} @RequestMapping(value="/deleteOrderById/{id}",method=RequestMethod.DELETE)
@ResponseBody
public String deleteOrderById(@PathVariable(value="id") Integer id){
//调用service层方法
System.out.println(id);
return SUCCESS;
}

因为在tomcat8.0中不支持PUT和DELETE方法,所以需要@ResponseBody,否则405错误

4.使用@RequestParam绑定请求参数值

@RequestMapping(value="/testRequestParam",method=RequestMethod.POST)
public String testRequestParam(@RequestParam(value="username") String name,@RequestParam(value="password",required=false,defaultValue="123456789") String password){
System.out.println(name+"---"+password);
return SUCCESS;
}

在jsp页面

<form action="${pageContext.request.contextPath }/testRequestParam" method="post">
Username:<input type="text" name="username"/>
Password:<input type="password" name="password"/>
<input type="submit" value="Submit"/>
</form>

@RequestParam可以从jsp页面获取参数

–     value:参数名,与请求参数的name属性值一致
–     required:是否必须输入值,默认为 true, 表示请求参数中必须包含对应的参数,若不存在,将抛出异常
–     defaultVault:不传值时的默认值,传值后将不再显示默认值  
 
 5.POST请求乱码问题
上个例子如果输入中文的话,会出现乱码问题
所以需要在web.xml文件中配置<filter>
<!-- 解决中文乱码问题 -->
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
 

SpringMVC(一)--基础、REST、@RequestParam、POST请求乱码等的更多相关文章

  1. 【SpringMVC】SpringMVC系列4之@RequestParam 映射请求参数值

    4.@RequestParam 映射请求参数值 4.1.概述     Spring MVC 通过分析处理方法的签名,将 HTTP 请求信息绑定到处理方法的相应人参中.Spring MVC 对控制器处理 ...

  2. SpringMVC学习系列-后记 解决GET请求时中文乱码的问题

    SpringMVC学习系列-后记 解决GET请求时中文乱码的问题 之前项目中的web.xml中的编码设置: <filter> <filter-name>CharacterEnc ...

  3. 【SpringMVC】请求乱码处理

    一.post请求乱码 二.get请求乱码 一.post请求乱码 在web.xml中加入 <filter> <filter-name>CharacterEncodingFilte ...

  4. springMVC1 springmvc的基础知识

    springmvc第一天 springmvc的基础知识 springmvc课程安排: 第一天: 基础知识 springmvc框架(重点) mvc在b/s系统中应用方式 springmvc框架原理(Di ...

  5. SpringMvc学习---基础知识考核

    SpringMVC 1.SpringMVC的工作流程 流程 : 1.用户发送请求至前端控制器DispatcherServlet2.DispatcherServlet收到请求调用HandlerMappi ...

  6. web请求乱码问题总结

    问题1:springmvc通过@ResponseBody向页面返回值(包括汉字)时,乱码 解决方案: springmvc3.2之后可以声明注解驱动器(不知道是不是这么翻译)的时候的控制编码的转换,结果 ...

  7. Springmvc入门基础(五) ---controller层注解及返回类型解说

    0.@Controller注解 作用:通过@Controller注解,注明该类为controller类,即控制器类,需要被spring扫描,然后注入到IOC容器中,作为Spring的Bean来管理,这 ...

  8. Spring框架系列(14) - SpringMVC实现原理之DispatcherServlet处理请求的过程

    前文我们有了IOC的源码基础以及SpringMVC的基础,我们便可以进一步深入理解SpringMVC主要实现原理,包含DispatcherServlet的初始化过程和DispatcherServlet ...

  9. javaweb请求编码 url编码 响应编码 乱码问题 post编码 get请求编码 中文乱码问题 GET POST参数乱码问题 url乱码问题 get post请求乱码 字符编码

     乱码是一个经常出现的问题 请求中,参数传递的过程中也是经常出现乱码的问题 本文主要整理了请求乱码中的问题以及解决思路   先要理解一个概念前提: 编码就是把图形变成数值码所以说: 图形的字符  -- ...

随机推荐

  1. AndroidDemo - FloatWindowDemo

    安卓悬浮窗Demo 在桌面上创建一个小的悬浮窗.点击小悬浮窗后会弹出一个大的窗口.大窗口上有2个按键,分别为返回与关闭.点击大窗口外的部分能返回小窗口. 小窗口可以自由拖动.小窗口上显示的是当前内存使 ...

  2. 单元测试报connection is allready closed导致dailybuild中断的解决方案——类加载机制的应用

    现象; 前段时间在dailybuild过程中,经常遇到connection is allready closed错误,特别是在dailybuild高峰期. 分析定位: 这个错误是的起因比较多,这里的情 ...

  3. python函数(2):函数进阶

    昨天说了函数的一些最基本的定义,今天我们继续研究函数.今天主要研究的是函数的命名空间.作用域.函数名的本质.闭包等等 预习: 1.写函数,用户传入修改的文件名,与要修改的内容,执行函数,完成整个文件的 ...

  4. (转)JAVA反射机制理解

    JAVA反射机制: 通俗地说,反射机制就是可以把一个类,类的成员(函数,属性),当成一个对象来操作,希望读者能理解,也就是说,类,类的成员,我们在运行的时候还可以动态地去操作他们. 理论的东东太多也没 ...

  5. iptables中DNAT的配置方法

    1.一对一流量完全DNAT 首先说一下网络环境,普通主机一台做防火墙用,网卡两块 eth0 192.168.0.1  内网 eth1 202.202.202.1 外网 内网中一台主机 192.168. ...

  6. 显示引擎innodb状态详解

    很多人让我来阐述一下  SHOW INNODB STATUS 的输出信息,了解SHOW INNODB STATUS都输出了几个什么信息,并且我们能够这些信息中获取什么资讯,得以提高MySQL性能. 首 ...

  7. ajax-javascript原生-初步入门01(整理)

    -----------------------------------2017.07.21写----------------------------------------- 1.ajax的原名: a ...

  8. Qt5.5.1和Qt5.3.2编译OCI驱动教程及验证方法

    我们都知道oracle数据库的强大,并且好多企业或者教学用到数据库时都会推荐使用.但是Qt因为版权问题没有封装oracle数据库专用驱动,网上也有一大堆说法和教程,但是或多或少的都有问题.下面废话不多 ...

  9. spring容器注入一个接口的两个实现类

    spring容器中能拥有两个同种类型的bean吗?我有两个dao类同时实现一个接口,这两个接口注入时报了异常如下. org.springframework.beans.factory.NoSuchBe ...

  10. gitlab 实现自动部署(简单Python实现)

    功能说明: 当本地master分支执行push动作的时候,服务器端会自动执行master分支的pull操作(还可以执行一些自动化脚本) 原理: git hooks就是那些在git执行特定事件(如com ...