springMVC教程.docx

上传人:b****4 文档编号:24885649 上传时间:2023-06-02 格式:DOCX 页数:36 大小:92.16KB
下载 相关 举报
springMVC教程.docx_第1页
第1页 / 共36页
springMVC教程.docx_第2页
第2页 / 共36页
springMVC教程.docx_第3页
第3页 / 共36页
springMVC教程.docx_第4页
第4页 / 共36页
springMVC教程.docx_第5页
第5页 / 共36页
点击查看更多>>
下载资源
资源描述

springMVC教程.docx

《springMVC教程.docx》由会员分享,可在线阅读,更多相关《springMVC教程.docx(36页珍藏版)》请在冰豆网上搜索。

springMVC教程.docx

springMVC教程

目录

SpringMvc教程1

初识springMVC1

背景1

常见MVC框架比较2

基于spring3.2的采用annotation方式搭建springMVC环境2

springMVC的RequestMapping的基本设置7

在controller中获取前台传递的参数9

在controller中获取web元素10

将controller中数据传递到jsp页面11

设置跳转方式为重定向或者转发14

视图解析器的配置和使用15

controller中方法的返回值类型15

springMVC的文件上传于下载19

springMVC和jQuery的Ajax结合23

SpringMVC拦截器26

sringMVCfromtag28

SpringMvc教程

作者:

DK

初识springMVC

背景

Spring框架提供了构建Web 应用程序的全功能MVC模块。

使用Spring可插入的MVC架构,可以选择是使用内置的SpringWeb框架还是Struts这样的Web框架。

通过策略接口,Spring框架是高度可配置的,而且包含多种视图技术,例如JavaServerPages(JSP)技术、Velocity、Tiles、iText和POI。

SpringMVC框架并不知道使用的视图,所以不会强迫您只使用JSP技术。

SpringMVC分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。

常见MVC框架比较

运行性能上:

Jsp+servlet>struts1>springmvc>struts2+freemarker>>struts2,ognl,值栈。

开发效率上,基本正好相反。

值得强调的是,springmvc开发效率和struts2不相上下。

Struts2的性能低的原因是因为OGNL和值栈造成的。

所以,如果你的系统并发量高,可以使用freemaker进行显示,而不是采用OGNL和值栈。

这样,在性能上会有相当大得提高。

基于spring3.2的采用annotation方式搭建springMVC环境

一、servlet3.0之前基于web.xml文件的配置。

参考程序:

101SpringMVC_servlet2.x_controller

1、上官网下载对应的zip包

当然该zip并非最新的。

下载地址为:

http:

//repo.spring.io/webapp/home.html?

0

2、解压之后得到目录:

打开libs会看到会多jar

这里边包括了所有的jar和source和doc。

当然我们只是需要使用jar就可以了。

3、创建空的web项目目录结构如下:

其中user实体类为:

publicclassUser{

privateStringname;

privateIntegerage;

privateDatebirth;

publicStringgetName(){

returnname;

}

publicvoidsetName(Stringname){

this.name=name;

}

publicUser(Stringname,Integerage,Datebirth){

super();

this.name=name;

this.age=age;

this.birth=birth;

}

publicIntegergetAge(){

returnage;

}

publicvoidsetAge(Integerage){

this.age=age;

}

publicDategetBirth(){

returnbirth;

}

publicvoidsetBirth(Datebirth){

this.birth=birth;

}

publicUser(){

super();

//TODOAuto-generatedconstructorstub

}

publicUser(Stringname){

super();

this.name=name;

}

@Override

publicStringtoString(){

//TODOAuto-generatedmethodstub

return"["+name+"]";

}

}

4、在项目中添加如下jar文件:

spring-webmvc-3.2.0.RELEASE.jar

spring-core-3.2.0.RELEASE.jar

spring-context-3.2.0.RELEASE.jar

spring-beans-3.2.0.RELEASE.jar

spring-web-3.2.0.RELEASE.jar

commons-logging.jar

spring-expression-3.2.0.RELEASE.jar

其中commons-logging.jar请单独下载。

5、在web.xml中添加过滤器的配置。

example

org.springframework.web.servlet.DispatcherServlet

contextConfigLocation

/WEB-INF/spring-servlet.xml

1

example

*.do

这个org.springframework.web.servlet.DispatcherServle即为springMVC的核心控制器。

其中init-param中配置的是spring的配置文件的文件路径。

6、在WEB-INF下添加spring的配置文件spring-servlet.xml文件内容如下:

xmlversion="1.0"encoding="UTF-8"?

>

//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"

xmlns:

util="http:

//www.springframework.org/schema/util"

xsi:

schemaLocation="http:

//www.springframework.org/schema/beanshttp:

//www.springframework.org/schema/beans/spring-beans-3.0.xsd

http:

//www.springframework.org/schema/contexthttp:

//www.springframework.org/schema/context/spring-context-3.0.xsd

http:

//www.springframework.org/schema/mvchttp:

//www.springframework.org/schema/mvc/spring-mvc-3.0.xsd

http:

//www.springframework.org/schema/utilhttp:

//www.springframework.org/schema/util/spring-util-3.0.xsd">

 

--启动spring自动扫描-->

component-scanbase-package="com.niit.springmvc"/>

annotation-driven/>

--支持spring3.0新的mvc注解-->

--启动SpringMVC的注解功能,完成请求和注解POJO的映射-->

其中schemaLocation和xmlns建议直接拷贝。

7、创建UserController如下:

@Controller

@RequestMapping("/user.do")

publicclassUserController{

@RequestMapping(params="method=add")

publicStringaddUser(Modelmodel){

model.addAttribute("message","添加了一个用户");

System.out.println("UserController.addUser()");

return"/WEB-INF/jsp/addsuc.jsp";

}

}

其中@RequestMapping("/user.do")的配置是指:

该controller的请求url为:

user.do

@RequestMapping(params="method=add")的注解是指:

凡是请求的url为:

user.do而带了参数method=add的请求会由方法addUser来处理。

addUser的形参model为后续讲解内容。

return"/WEB-INF/jsp/addsuc.jsp";是告诉spring完成处理之后直接进入该视图。

8、添加对应的页面,测试请求user.do?

method=add

一、servlet3.0之后基于annotation文件的配置。

参考程序:

102SpringMVC_servlet3.x_controller

servlet3.0之后,servlet使用注解,所以不再使用web.xml文件。

Springmvc配置方式如下:

删除web.xml和spring-servlet.xml文件。

添加类:

参考程序

springMVC的RequestMapping的基本设置

参考程序:

103SpringMVC_servlet3.x_RequestMapping

1、在类的上面注解@RequestMapping("/ex.do")意思为所有的ex.do请求全部进入该类处理。

如上一章代码中编写@RequestMapping("/user.do").所有的user.do请求都会进入该Controller。

2、在自定义的controller中会调用有@RequestMapping注解字样的方法来处理请求。

@Controller

@RequestMapping("/user.do")

publicclassUserController{

@RequestMapping

publicStringaddUser(Modelmodel){

model.addAttribute("message","添加了一个用户");

System.out.println("UserController.addUser()");

return"/WEB-INF/jsp/addsuc.jsp";

}

}

3、当然可以编写多个处理请求的方法,而这些方法的调用都是通过@RequestMapping的属性类控制调用的。

@RequestMapping属性:

value:

指定请求的实际地址,指定的地址可以是URITemplate模式(最终请求的url为类的注解的url+方法注解的url)

value的uri值为以下三类:

A)可以指定为普通的具体值;

如:

@Controller

@RequestMapping("/user")

publicclassUserController{

@RequestMapping(value="/some.do")

publicModelAndViewhandleRequest(HttpServletRequestarg0,

HttpServletResponsearg1)throwsException{

System.out.println("handleRequest");

returnnewModelAndView("/WEB-INF/jsp/addsuc.jsp");

}

}

该注解的是说:

请求的url为”user/some.do”就会进入该方法(handleRequest)处理。

url:

user/some.do

B)可以指定为含有某变量的一类值(URITemplatePatternswithPathVariables);

如:

@RequestMapping(value="/{userId}/delete.do",method=RequestMethod.GET)

publicStringdelete(@PathVariableStringuserId){

System.out.println("delete:

"+userId);

return"/WEB-INF/jsp/addsuc.jsp";

}

这个注解:

url中带了参数的数据userIdurl:

user/1123/delete.do

使用@PathVariable指定形参接收url中的数据

C)可以指定为含正则表达式的一类值(URITemplatePatternswithRegularExpressions);

如:

@RequestMapping(value="/{userBirth:

\\d{4}-\\d{2}-\\d{2}}/update.do")

publicStringupdate(@PathVariableStringuserBirth){

System.out.println("userBirth:

"+userBirth);

return"/WEB-INF/jsp/addsuc.jsp";

}

请求的url类似:

user/1990-11-11/update.do

使用@PathVariable指定形参接收url中的数据

method:

指定请求的method类型,GET、POST、PUT、DELETE等;(也就是说只有制定类型的请求才会进入该方法处理)

consumes:

指定处理请求的提交内容类型(Content-Type),例如application/json,text/html;

produces:

指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;

params:

指定request中必须包含某些参数值是,才让该方法处理。

headers:

指定request中必须包含某些指定的header值,才能让该方法处理请求。

4、当类没有@RequestMapping注解时,则直接参考方法的注解匹配对于的url。

如:

@Controller

publicclassUserController{

@Controller

@RequestMapping("/user.do")

publicvoidmanagerUser(){}

}

在这里url为user.do则直接使用managerUser处理请求。

在controller中获取前台传递的参数

参考程序:

104SpringMVC_servlet3.x_reviceRequestParam

将页面数据传递到controller

页面表单:

用户名:


年龄:


生日:


Controller为:

/**

*1、直接使用形参获取前台传递的参数数据

*要注意的是形参的名字必须和页面参数的名字一致

*@parammodel

*@paramname

*@paramage

*@parambirth

*@return

*/

@RequestMapping(method=RequestMethod.POST)

publicStringaddUser(Modelmodel,Stringname,Integerage,Datebirth){

model.addAttribute("message","添加了一个用户");

System.out.println("name:

"+name+"\tage:

"+age+"\tbirht:

"+birth);

System.out.println("UserController.addUser()");

return"/WEB-INF/jsp/addsuc.jsp";

}

/**

*2、使用对象接受前台传递的参数,

*要注意的是前台传递的参数的名称必须和对象的属性名称一直,如果不一致则可以使用@ModelAttribute("u")Stringuname指定

*/

@RequestMapping(method=RequestMethod.POST)

publicStringaddUser(Modelmodel,Useruser){

model.addAttribute("message","添加了一个用户");

System.out.println("name:

"+user.getName()+"\tage:

"+user.getAge()+"\tbirht:

"+user.getBirth());

System.out.println("UserController.addUser()");

return"/WEB-INF/jsp/addsuc.jsp";

}

在controller中获取web元素

参考程序:

105SpringMVC_servlet3.x_accessWebElement

当某个方法需要使用web对象时(request,response,session,application)

可以使用如下方式:

除过application其他的对象都可以直接设为方法的形参即可。

spring会自动将对应的对象传递给对应的形参。

而application对象可以使用session对象获取。

当然也可以在方法中使用response对象重定向到其他的url这时方法最后return的url则可以视作无效。

同样的也可以使用request对象转发到其他的url。

程序示例:

@RequestMapping(value="/web.do")

publicStringgetWebElement(HttpServletRequestrequest,HttpServletResponseresponse,HttpSessionsession)throwsIOException,ServletException{

System.out.println("使用request获取的前台参数:

"+request.getParameter("pname"));

request.setAttribute("message","这个是request中的数据");

session.setAttribute("message","这个是session中的数据");

session.getServletContext().setAttribute("message","这个是application中的数据");

//response.sendRedirect("");

//returnnull;

//request.getRequestDispatcher("/WEB-INF/jsp/showData.jsp").forward(request,response);

return"/WEB-INF/jsp/showData.jsp";

}

 

将controller中数据传递到jsp页面

参考程序:

106SpringMVC_servlet3.x_modelAndView

1、可以在controller中获取request对象,然后将数据设置为request对象的属性,然后使用转发的方式进入jsp即可。

这一点不赘述。

2、将方法的返回值该为ModelAndView在返回时,将数据存储在ModelAndView对象中如:

newModelAndView("/WEB-INF/jsp/showData.jsp","message",message)

其中第一个参数为url,第二个参数为要传递的数据的key,第三个参数为数据对象。

在这里要注意的是数据是默认被存放在request中的。

程序示例:

//使用modelAndView对象将数据传递到前台。

@RequestMapping(value="/mad/showData_1.do")

publicModelAndViewshowData_1(){

Stringmessage="这个是要传递的数据";

//其中第一个参数为url,第二个参数为要传递的数据的key,第三个参数为数据对象。

//在这里要

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 制度规范

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1