热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

spring3webmvcframework

SpringMVC是一个构建于SpringFramework之上的现代Web应用程序框架.Spring3全面支持REST风格的Web服务,Werereallysee

Spring MVC是一个构建于Spring Framework之上的现代Web应用程序框架. Spring3 全面支持REST风格的Web服务,"We're really seeing extensive interest and growth in REST, and it will have comprehensive support for RESTful Web services," said Johnson.spring3再加上对annotation的支持如虎添翼!

web.xml配置


controller

org.springframework.web.servlet.DispatcherServlet


contextConfigLocation

classpath:*controller.xml


1


controller
*.do

web.xml中定义了一个名为annomvc的SpringMVC模块,按照SpringMVC的契约,需要在WEB-INF/annomvc-servlet.xml配置文件中定义SpringMVC模块的具体配置 ,这里我们修改到*controller.xml中。

*controller.xml中加入







//注释功能开启

Java代码:

@Controller
@RequestMapping("/resource.do")

public class TestController extends BaseController {
@Autowired
private TestDao testDao;


//用于ajax中,返回void

@RequestMapping(params = "method=validatName",method = RequestMethod.GET)
public void validatName(HttpServletResponse response, @RequestParam(value = "enName", required = false)String name) throws IOException {
Query query = testDao.createQuery();
query.filter("enName", name);
List list = testDao.find(query).asList();
if(list != null && list.size() > 0){
response.getWriter().write(String.valueOf(false));
}else{
response.getWriter().write(String.valueOf(true));
}
response.getWriter().flush();
response.getWriter().close();
}

@RequestMapping(params = "method=test",method = RequestMethod.POST)

public ModelAndView test2(HttpServletRequest arg0, ②响应请求的方法
HttpServletResponse arg1) throws Exception {
return new ModelAndView("index","greeting",greeting); ③返回一个ModelAndView对象
}

@RequestMapping(params = "method=test3")

public String test3(Model model) throws Exception {

model.addAttribute("resource", "hehh");

return "test3"

}

}

通过resource.do?method=validatName请求上面第一个方法。上面代码描述了controller中返回的几种形式,validatName返回text文本,不进行页面跳转,test2跳转到/view/index.jsp页面中,test3跳转到/view/test3.jsp,每个方法传入的参数可以是不同的,根据需要传入。

注意事项:

@Controller将该类注释为controller

1处理多个请求

在每个方法前面使用@RequestMapping("/名称.do")不同的名称处理不同的请求缺点:xxx.do太多不利于跟踪,复制程度增加

在controller类名前面定义@RequestMapping("/名称.do")在方法前添加注解

@RequestMapping(params="method=listAllBoard")则处理有此参数的请求多一个参数思路清楚

2处理不同的http请求:

在方法前面增加注释:RequestMethod有POST,GET如:@RequestMapping(params="method=test",method=RequestMethod.POST)

3参数处理:(默认这样处理,也是约定优于设计原则自动转换类型)自由选择

普通属性:如果入参是基本数据类型(如intlongfloat等),URL请求参数中一定要有对应的参数,否则将抛出TypeMismatchException异常,提示无法将null转换为基本数据类型。

对象及属性:Userbean的userId属性的类型是基本数据类型,但如果URL中不存在userId参数,Spring也不会报错,此时Userbean.userId值为0。如果Userbean对象拥有一个dept.deptId的级联属性,那么它将和dept.deptId参数绑定。

4参数处理:(明确指定参数匹配自动转换类型)

普通属性和对象及属性:@RequestParam("id")注解,所以它将和id的URL参数绑定

5绑定域中的某个属性:

Model ModelMap类,它作为通用的模型数据承载对象,传递数据供视图所用代替request.setParam

Session@SessionAttributes("currUser")//①将ModelMap中属性名为currUser的属性放到Session属性列表中,以便这个属性可以跨请求访问(类名前面写)

session多个参数!@SessionAttributes({“attr1”,”attr2”})。

取值绑定到方法上(@ModelAttribute("currUser")Useruser)

注解及解释:

@Autowired将分别寻找和它们类型匹配的Bean注入,@Autowired可以对成员变量、方法以及构造函数进行注释,ByType

如果有多个匹配结果或者没结果BeanCreationException异常

@Autowired(required=false),这等于告诉Spring:在找不到匹配Bean时也不报错。

@Qualifier注释指定注入Bean的名称,@Qualifier的标注对象是成员变量、方法入参、构造函数入参----------ByName

@Autowired@Qualifier结合使用时,自动注入的策略就从byType转变成byName

@Resource默认按byName自动注入

@InitBinder在controller方法前酌情使用,用于调用请求方法前的一些初始化

其他org.springframework.web.multipart.commons.CommonsMultipartResolver

org.springframework.web.servlet.view.json.MappingJacksonJsonView等根据需要在配置文件中配置

restful feature in spring mvc 3

spring mvc 3中rest风格的动态传参请求,java后台代码如下,一些值通过 URI传递。

@RequestMapping(value="/hotels/{hotel}/bookings/{booking}", method=RequestMethod.GET)

public String getBooking(@PathVariable("hotel") long hotelId, @PathVariable("booking") long bookingId, Model model) {


Hotel hotel = hotelService.getHotel(hotelId);


Booking booking = hotel.getBooking(bookingId);


model.addAttribute("booking", booking);


return "booking";


}


详细参照:http://blog.springsource.com/2009/03/08/rest-in-spring-3-mvc/





推荐阅读
  • 本文介绍了MVP架构模式及其在国庆技术博客中的应用。MVP架构模式是一种演变自MVC架构的新模式,其中View和Model之间的通信通过Presenter进行。相比MVC架构,MVP架构将交互逻辑放在Presenter内部,而View直接从Model中读取数据而不是通过Controller。本文还探讨了MVP架构在国庆技术博客中的具体应用。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • 本文详细介绍了在Linux虚拟化部署中进行VLAN配置的方法。首先要确认Linux系统内核是否已经支持VLAN功能,然后配置物理网卡、子网卡和虚拟VLAN网卡的关系。接着介绍了在Linux配置VLAN Trunk的步骤,包括将物理网卡添加到VLAN、检查添加的VLAN虚拟网卡信息以及重启网络服务等。最后,通过验证连通性来确认配置是否成功。 ... [详细]
  • [转载]从零开始学习OpenGL ES之四 – 光效
    继续我们的iPhoneOpenGLES之旅,我们将讨论光效。目前,我们没有加入任何光效。幸运的是,OpenGL在没有设置光效的情况下仍然可 ... [详细]
  • Java实战之电影在线观看系统的实现
    本文介绍了Java实战之电影在线观看系统的实现过程。首先对项目进行了简述,然后展示了系统的效果图。接着介绍了系统的核心代码,包括后台用户管理控制器、电影管理控制器和前台电影控制器。最后对项目的环境配置和使用的技术进行了说明,包括JSP、Spring、SpringMVC、MyBatis、html、css、JavaScript、JQuery、Ajax、layui和maven等。 ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • 本文介绍了django中视图函数的使用方法,包括如何接收Web请求并返回Web响应,以及如何处理GET请求和POST请求。同时还介绍了urls.py和views.py文件的配置方式。 ... [详细]
  • iOS Swift中如何实现自动登录?
    本文介绍了在iOS Swift中如何实现自动登录的方法,包括使用故事板、SWRevealViewController等技术,以及解决用户注销后重新登录自动跳转到主页的问题。 ... [详细]
  • IOS开发之短信发送与拨打电话的方法详解
    本文详细介绍了在IOS开发中实现短信发送和拨打电话的两种方式,一种是使用系统底层发送,虽然无法自定义短信内容和返回原应用,但是简单方便;另一种是使用第三方框架发送,需要导入MessageUI头文件,并遵守MFMessageComposeViewControllerDelegate协议,可以实现自定义短信内容和返回原应用的功能。 ... [详细]
  • (三)多表代码生成的实现方法
    本文介绍了一种实现多表代码生成的方法,使用了java代码和org.jeecg框架中的相关类和接口。通过设置主表配置,可以生成父子表的数据模型。 ... [详细]
  • 使用eclipse创建一个Java项目的步骤
    本文介绍了使用eclipse创建一个Java项目的步骤,包括启动eclipse、选择New Project命令、在对话框中输入项目名称等。同时还介绍了Java Settings对话框中的一些选项,以及如何修改Java程序的输出目录。 ... [详细]
  • Iwanttointegratesort,order,maxandoffsetinafindAllquery.Thefollowingworksfine:我想在fin ... [详细]
  • Yii framwork 应用小窍门
    Yiiframework应用小窍门1.YiiFramework]如何获取当前controller的名称?下面语句就可以获取当前控制器的名称了!Php代码 ... [详细]
author-avatar
手机用户2502869895
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有