浅谈SpringMVC(一)
一、SpringMVC引言
Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的MVC架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的SpringMVC框架或集成其他MVC开发框架,如Struts1,Struts2等。
二、SpringMVC要点
1、引入jar包
spring-webmvc-3.2.4.RELLEASE.jar
2、配置文件
SpringMVC的配置文件的位置、名字随意。
初始化配置dispatcher-servlet.xml(SpringMVC配置文件):
<!--配置springMVC注解扫描器--> <context:component-scan base-package="com.xxxx"></context:component-scan> <mvc:annotatin-driven></mvc:annotation-driven>
初始化配置web.xml:
<!--配置SpringMVC配置文件的路径-->
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:/com/xxxx/controller/dispatcher-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!--配置控制器的访问路径形式,均以.do结尾。eg:localhost:8080/springmvc/login.do-->
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
3、基于注解开发
a、控制器编码:
//@Contrller 注解表示该类为控制器
@Controller
@RequestMappint("/UserManager")
public class FirstController{
//@RequestMapping 注解设置该控制器的访问路径
@RequestMapping("/hello")
public String Hello(){
//调用业务逻辑Service
return "hello";
//方法返回的字符串为跳转的页面名,不包含.jsp.html等后缀,在springMVC配置文件中配置视图解析器,该解析器会将"hello"解析为"hello.jsp"页面。
}
b、解析器配置:
<bean id="resolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
//id不可随便写,spring会自动创建该Bean并且赋值于springMVC内部的视图解析器
c、SpirngMVC跳转
(1)forward跳转jsp
@RequestMappint("/hello")
public String Hello(){
//调用Service业务逻辑
//return "hello"; 即跳转hello.jsp页面
return "forward:/hello.jsp"; //写forward关键字,视图解析器将会失效。
}
(2)redirect跳转jsp
@RequestMappint("/hello")
public String Hello(){
//调用Service业务逻辑
return "redirect:/hello.jsp"; //写redirect关键字,视图解析器将会失效。
}
(3)forward跳转controller
@RequestMappint("/hello")
public String Hello(){
//调用Service业务逻辑
return "forward:/world.do";
}
@RequestMappint("/world")
public String World(){
//调用Service业务逻辑
return "world";
}
(4)redirect跳转controller
@RequestMappint("/hello")
public String Hello(){
//调用Service业务逻辑
return "redirect:/world.do";
}
@RequestMappint("/world")
public String World(){
//调用Service业务逻辑
return "world";
}
d、cient---->controller 传递参数
(1)用request作用域传参
@RequestMapping("/hello")
public String hello(HttpServletRequest request){
String name = request.getParameter("name");
return "hello";
}
(2)用方法的参数传参
//传递零散参数
@RequestMapping("/hello") public String hello(String name){ System.out.println(name); return "hello"; } //当请求参数的key与方法参数不一致时,可以用@RequestParam来进行绑定 @RequestMapping("/world") public String world(@RequestParam("name")String n){ System.out.println(n); return "hello"; }
//传递对象参数
@RequestMapping("/param")
public String param(User user){
System.out.println(user.getName());
return "hello"
}
//传递数组、集合
@RequestMapping("/param")
public String param(int[] ids){
for(int i:ids){
System.out.println(i+" ");
}
}
//传递的集合元素为对象时,应该进行VO类封装将List<User>封装为UserVO的成员变量
@RequestMapping("/param")
public String param(UserVo uv){
List<User> users = uv.getUsers();
return "hello";
}
(3)参数的字符编码
get:在tomcat的配置文件中配置。
post:在web.xml中配置SpringMVC内置的Filter
<filter>
<filter-name>Encoding</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>Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
类型转换器:
编写implements Converter:
//以日期格式为例
pubic class DateConver implements Converter<String,Date>{
public Date convert(String src){
SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd");
Date date = sd.parse(src);
return date;
}
}
配置SpringMVC配置文件:
<!--声明自己开发的转换类-->
<bean id="dateConverter class="com.xxxx.DateConverter"></bean>
<!--将自己开发的转换类注入到springmvc的转换器服务类中-->
<bean id="converterService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="converters">
<set>
<ref local="dateConverter"/>
</set>
<property>
</bean>
<!--注册转换器服务-->
<mvc:annotation-driven conversion-service="converterService"></mvc:annotation-driven>
e、controller--->jsp传递参数
(1)基于原生的Servlet
@RequestMapping("/hello")
public String hello(HttpServletRequest request,HttpSession session){
request.setAttribute("name","zhangsan");
session.setAttribute("age",18);
return "hello";
}
(2)基于SpringMVC的封装
@Controller
@RequestMapping("/userManager")
//@SessionAttibutes注解表示将Model中request作用域的内容copy到session作用域中,即将request作用域中的name属性复制一份存入session作用域
@SessionAttributes("name")
public class MpdelController{
@RequestMaping("/m1")
public String m1(Model model){
//request.setAttribute("name","zhangsan");
//model对象代替了request作用域
model.addAttribute("name","zhangsan");
modle.addAttribute("age",18);
return "result";
//springMVC没有封装application作用域的操作方式
}
@RequestMapping("m2")//@ModelAttribute(value="password")与使用Model对象的功能是一样的
public String m2(@ModleAttribute(value="password")String password){
password = "123456";
return "result";
}
//这是SpringMVC中ModelAndView机制中最正统的写法,以上内容都是该机制的简化写法
//ModelAndView = Model(作用域中的数据) + View(视图显示)
@RequestMapping("M3")
public ModelAndView m3(){
ModelAndView mav = new ModelAndView();
mav.addObject("validationCode","xxxx");//将数据设置到Request作用域中
mav.setViewName("redirect:/result.jsp");
return mav;
//在使用ModelAndView的过程中,SpringMVC如果发现redirect跳转,自动的把ModelAndView.addObject()方法的内容 拼接到url
}
4、SpringMVC中控制器方法的返回值
a、String
b、ModelAndView
c、void-----返回值的内容不是页面,而是验证码、文件下载、JSON等。
浅谈SpringMVC(一)的更多相关文章
- 阿里P7浅谈SpringMVC
一.前言 既然是浅谈 SpringMVC,那么我们就先从基础说起,本章节主要讲解以下内容: 1.三层结构介绍 2.MVC 设计模式介绍 3.SpringMVC 介绍 4.入门程序的实现 注:介绍方面的 ...
- 浅谈SpringMVC(二)
一.SpringMVC的拦截器 1.写类implements HandlerInterceptor public class MyMvcInterceptor implements HandlerIn ...
- 浅谈SpringMVC执行过程
通过深入分析Spring源码,我们知道Spring框架包括大致六大模块, 如Web模块,数据库访问技术模块,面向切面模块,基础设施模块,核心容器模块和模块, 其中,在Spring框架的Web模块中,又 ...
- 浅谈SpringMVC
M--模型(实体vo[视图对象]与页面对面) V--视图(JSP,,velocity,FreeMarker,html,thymeleaf) C--控制器(servlet,if语句控制M数据跳转到V进行 ...
- 浅谈对Spring Framework的认识
Spring Framework,作为一个应用框架,官方的介绍如下: The Spring Framework provides a comprehensive programming and con ...
- 【架构】浅谈web网站架构演变过程
浅谈web网站架构演变过程 前言 我们以javaweb为例,来搭建一个简单的电商系统,看看这个系统可以如何一步步演变. 该系统具备的功能: 用户模块:用户注册和管理 商品模块:商品展示和管 ...
- 浅谈Spring MVC知识
关于MVC框架,我相信大家都不陌生,都会说也就是模型-视图-控制器这三层的框架结构,如果你参加面试的时候考官会问:“MVC框架是什么?你说一说.”其实我们都知道这个问题还需要问的,只要你是一个开发人员 ...
- 浅谈 Fragment 生命周期
版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Fragment 文中如有纰漏,欢迎大家留言指出. Fragment 是在 Android 3.0 中 ...
- 浅谈 LayoutInflater
浅谈 LayoutInflater 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/View 文中如有纰漏,欢迎大家留言指出. 在 Android 的 ...
随机推荐
- Ignatius and the Princess II(全排列)
Ignatius and the Princess II Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K ( ...
- AU3学习笔记
目录 1. AU3是什么?能做什么? 2. 乱学AU3中的命令(语言相关)? 3. 通过简单示例学习AU3? 4. 正则表达式的学习(对大小写敏感) 5.对于GUI的相关学习 1. AU ...
- sharepoint 2013 reporting services 远程server返回错误: (500) 内部server错误。
在sharepoint 2013部署reporting services过程中,点击管理中心,server上的服务.系统配置.提示了一个错误: 远程server返回错误: (500) 内部server ...
- Window Server 2012无线网卡和声卡驱动解决方法
刚开始安装server2012时,驱动一直装不上以为是驱动的问题,后来在网上找了一下才明白是为啥,由于服务器默认不会开启无线LAN功能.和声卡服务,下面简单的方式给大家介绍一下解决方法: 无线网卡解决 ...
- NodeJS下载文件实例
var http = require('http');var express = require('express');var fs=require("fs"); var app ...
- android入门——BroadCast(2)
自定义广播 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android=&q ...
- 望大神批评教育国庆无聊之作:ObjectValidator
起因: 本人国庆无聊,不知道干嘛, 所以模仿FluentValidation写了个简化版的ObjectValidator 个人设想是能用类似fluent的方式创建验证规则,然后使用者缓存并验证自己的对 ...
- jQuery.attributes源码分析(attr/prop/val/class)
回顾 有了之前的几篇对于jQuery.attributes相关的研究,是时候分析jQuery.attr的源码了 Javascript中的attribute和property分析 attribute和p ...
- PostCss 从0开始
PostCss 摘自 http://ju.outofmemory.cn/entry/215105 http://www.w3cplus.com/PostCSS/postcss-deep-dive-pr ...
- Linux宕机最安全的重启方法(你肯定不知道)
Linux 内核虽然号称“不死族”,几乎不会崩溃或者死机,但是特殊情况下,还是有一定几率会宕机的.因为 Linux 广泛用于生产环境,所以每一次宕机都会引起相当大的损失.本文介绍在它死机至后,一种温柔 ...