spring 31MVC实战Word文件下载.docx

上传人:b****5 文档编号:19347012 上传时间:2023-01-05 格式:DOCX 页数:40 大小:367.14KB
下载 相关 举报
spring 31MVC实战Word文件下载.docx_第1页
第1页 / 共40页
spring 31MVC实战Word文件下载.docx_第2页
第2页 / 共40页
spring 31MVC实战Word文件下载.docx_第3页
第3页 / 共40页
spring 31MVC实战Word文件下载.docx_第4页
第4页 / 共40页
spring 31MVC实战Word文件下载.docx_第5页
第5页 / 共40页
点击查看更多>>
下载资源
资源描述

spring 31MVC实战Word文件下载.docx

《spring 31MVC实战Word文件下载.docx》由会员分享,可在线阅读,更多相关《spring 31MVC实战Word文件下载.docx(40页珍藏版)》请在冰豆网上搜索。

spring 31MVC实战Word文件下载.docx

二、spring3.1mvc框架的特点

如果仅仅关注于web方面的支持,Spring有下面一些特点:

∙清晰的角色划分:

控制器,验证器,命令对象,表单对象和模型对象;

分发器,处理器映射和视图解析器;

等等。

∙直接将框架类和应用类都作为JavaBean配置,包括通过应用上下文配置中间层引用,例如,从web控制器到业务对象和验证器的引用。

∙可适应性,但不具有强制性:

根据不同的情况,使用任何你需要的控制器子类(普通控制器,命令,表单,向导,多个行为,或者自定义的),而不是要求任何东西都要从Action/ActionForm继承。

∙可重用的业务代码,而不需要代码重复:

你可以使用现有的业务对象作为命令对象或表单对象,而不需要在ActionForm的子类中重复它们的定义。

∙可定制的绑定和验证:

将类型不匹配作为应用级的验证错误,这可以保存错误的值,以及本地化的日期和数字绑定等,而不是只能使用字符串表单对象,手动解析它并转换到业务对象。

∙可定制的处理器映射,可定制的视图解析:

灵活的模型可以根据名字/值映射,处理器映射和视图解析使应用策略从简单过渡到复杂,而不是只有一种单一的方法。

∙可定制的本地化和主题解析,支持JSP,无论有没有使用Spring标签库,支持JSTL,支持不需要额外过渡的Velocity,等等。

∙简单而强大的标签库,它尽可能地避免在HTML生成时的开销,提供在标记方面的最大灵活性。

三、spring3.1MVC入门列子HelloWorld

(1)在WEB-INF/web.xml中加入如下代码:

<

servlet>

servlet-name>

dispatcherServlet<

/servlet-name>

servlet-class>

org.springframework.web.servlet.DispatcherServlet<

/servlet-class>

init-param>

<

param-name>

contextConfigLocation<

/param-name>

param-value>

classpath*:

spring-servlet.xml

/param-value>

<

/init-param>

load-on-startup>

1<

/load-on-startup>

/servlet>

servlet-mapping>

url-pattern>

*.html<

/url-pattern>

<

/servlet-mapping>

上述的配置的就是前段控制器,在servlet-mapping配置了*.html,意味着所有以.html结尾的请求多会通过这个servlet,当dispatcherServlet启动时,他默认会在web-info目录下查找一个spring-servlet.xml的配置文件。

上面我们通过显示指定了这个文件的位置,即在类路径底下的spring-servlet.xml.这个文件我们会在第二步点给他家做详细介绍。

(2)在类路径底下添加spring-servlet.xml文件,其内容如下:

?

xmlversion="

1.0"

encoding="

UTF-8"

>

beansxmlns="

http:

//www.springframework.org/schema/beans"

xmlns:

xsi="

//www.w3.org/2001/XMLSchema-instance"

p="

//www.springframework.org/schema/p"

context="

//www.springframework.org/schema/context"

xsi:

schemaLocation="

//www.springframework.org/schema/beans

http:

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

//www.springframework.org/schema/context

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

context:

component-scan

base-package="

com.pango.spring.helloworld.controller"

/>

beanid="

viewResolver"

class="

org.springframework.web.servlet.view.UrlBasedViewResolver"

propertyname="

viewClass"

value="

org.springframework.web.servlet.view.JstlView"

prefix"

value="

/WEB-INF/jsp/"

suffix"

.jsp"

/bean>

/beans>

上面这个文件,我们定义了一个<

这样的标签,定义了这个后,当spring在启动时,会加载com.pango.spring.helloworld.controller这个包底下及子包底下的所有的组件(这就包的自动扫描机制,即spring会将标有@Controller@Component等类加载到spring容器管理中),后面我们还定义了<

ViewResolver是一个试图解析器,就是我们第一部分提到的springMVC生命周期中的第五步,上面这段的配置的意思就是,当我们从后端控制器中返回的视图时,前端控制器就根据这一段配置来返回一个具体的视图,如后端控制返回的是一个hello,根据上面的配置,最后前端控制器会组并成这样的一个地址:

/web-inf/jsp/hello.jsp,然后从/web-inf/jsp/这个目录下面查找一个hello.jsp返回客户端。

第三部分我们看我们写得HelloworldController后台控制器。

(3)在包底下写一个HelloWorldController的类,其内容如下:

@Controller

publicclassHelloWorldController{

@RequestMapping(value="

/hello"

publicStringsayHello(ModelMapmodelMap){

modelMap.put("

sayHello"

"

helloworld"

);

return"

;

}

}

在这里简单介绍下上面的配置,后面我们会详细讲解各个参数:

Ø

Controller即声明这个类是一个控制器,上面第二部分我们说明了,只要加了@Controller标示的,spring会通过自动扫描机制,将这个类纳入spring容器管理中。

),这个定义的就是一个请求路径,只要符合/hello路径的多会交给这个控制器的sayhello方法来处理。

最后我们返回/hello的视图给客户端。

(4)好了,大功告成,我们再在web-info/jsp/目录下添加一个hello.jsp文件,就可以启动运行我们的第一个程序了。

hello.jsp的内容如下:

%@pagelanguage="

java"

contentType="

text/html;

charset=UTF-8"

pageEncoding="

%>

%@tagliburi="

prefix="

c"

%>

!

DOCTYPEhtmlPUBLIC"

-//W3C//DTDHTML4.01Transitional//EN"

"

//www.w3.org/TR/html4/loose.dtd"

html>

head>

metahttp-equiv="

Content-Type"

content="

title>

Inserttitlehere<

/title>

/head>

body>

span>

${sayHello}<

/span>

/body>

/html>

运行后访问ip;

port/project/hello.html就可以看到我们预期的结果了。

四、springMVC参数传递

mvc结构中,v层不断有数据和c层交互,所以弄明白在springMVC中如何与后台进行数据交互是极其重要的,当然在下面我不会介绍每一个方法,只是对常用的方法,对于我这里没有涉及的方法大家可以参考spring官方的文档中springMVC这个章节。

下面我们来看一幅图。

当我们向springMVC发起请求到视图返回前,springMVC帮我们做了主要是上面几个步骤,通过数据绑定、数据类型转换、验证、结果绑定这几个步骤。

让我们看下实例:

@RequestMapping("

/user/find"

publicStringfindUserById(@RequestParam("

userId"

)intuserId,ModelMapmodelMap){

userId);

/user"

@RequestMapping("

),是对请求映射的说明,这个注解中主要包含四个属性,分别value、method、params、header,这四个参数分别表示:

Value:

指定路径

Method:

请求方式

Params:

参数

Headers:

请求头

后面三个就是对请求路径的一个限制条件。

SpringMVC对于路径的定义非常的灵活

以下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。

●/user/{userId}

匹配user/123、user/abc等URL。

●/user/**/{userId}

匹配user/aaa/bbb/123、user/aaa/456等URL。

●company/{companyId}/user/{userId}/detail

匹配company/123/user/456/detail等的URL。

对RequestParam的介绍

@RequestParam有以下三个参数。

●value:

参数名。

●required:

是否必需,默认为true,表示请求中必须包含对应的参数名,如果不存在将抛出异常。

●defaultValue:

默认参数名,设置该参数时,自动将required设为false。

极少情况需要使用该参数,也不推荐使用该参数。

当发送请求时,请求参数中必须要包含userId这个参数,当不包含这个参数,请求将找不到这个映射。

当属性required=true时,不包含这个参数将会抛异常,如果不能确定是否需要这个参数是我们可以写成,@RequestParam(value="

required=false)。

直接将属性映射到对象中

/user/find2"

publicStringfind2UserById(Useruser,ModelMapmodelMap){

user"

user);

SpringMVC按:

“HTTP请求参数名=命令/表单对象的属性名”

的规则,自动绑定请求数据,支持“级联属性名”,自动进行基本类型数据转换。

如:

发起下面这个请求,springMVC会自动将id、name、password属性的值填充到user对象中。

http:

//localhost:

8080/springParam/user/save.html?

id=12&

name=marcle&

password=123

SpringMVC以rest技术向springMVC传递参数

通过REST风格体系架构,请求和响应都是基于资源表示的传输来构建的。

资源是通过全局ID来标识的,这些ID一般使用的是一个统一资源标识符(URI)。

客户端应用使用HTTP方法(如,GET、POST、PUT或DELETE)来操作一个或多个资源。

通常,GET是用于获取或列出一个或多个资源,POST用于创建,PUT用于更新或替换,而DELETE则用于删除资源。

例如,GEThttp:

//host/context/employees/12345将获取ID为12345的员工的表示。

这个响应表示可以是包含详细的员工信息的XML或ATOM,或者是具有更好UI的JSP/HTML页面。

您看到哪种表示方式取决于服务器端实现和您的客户端请求的MIME类型。

RESTfulWebService是一个使用HTTP和REST原理实现的WebService。

通常,一个RESTfulWebService将定义基本资源URI、它所支持的表示/响应MIME,以及它所支持的操作。

Spring3.0之后引入了对rest风格的支持。

我们看实例

/user/find/{id}"

publicStringrest(@PathVariableintid,ModelMapmodelMap){

Useruser=newUser();

user.setName("

marcle"

user.setPassword("

123"

user.setId(id);

这里需要注意的地方时@RequestMapping("

)和@PathVariableintid名称必须一样,否则会出现异常。

简单介绍返回视图的方式

◆ModelAndView形式返回

/user/save2"

publicModelAndViewsave2(Useruser,ModelMapmodelMap){

ModelAndViewmav=newModelAndView();

mav.setViewName("

mav.addObject("

returnmav;

ModelAndView就是对返回到页面的值和视图进行封装。

◆直接字符串的形式返回,如”return“/user””,再把属性通过modelMap进行封装,modelMap存储的值属于request范围内,如果要发送服务器端请求,springMVC非常方便,你只要这样写即可return”direct:

user”.

还有一种传递参数的方法,我放在springMVC中的rest技术介绍

下面我们看看springMVC返回的过程

五、springMVC标签介绍

SpringMVC简单没几个标签,用起来还是非常好用的,在使用springMVC中的标签之前需要向每个jsp的头部引入标签支持<

%@taglibprefix="

form"

uri="

//www.springframework.org/tags/form"

(1)form标签

这个标签会生成一个HTML的form标签,同时为内部标签的绑定暴露了一个绑定路径,它把命令对象(commandobject)放在pageContext中,这样内部的标签就可以访问这个对象,这个库中的其它标签都是这个标签的嵌套标签。

如我们有个user的域对象,包含id、name、password属性,我们将把它当作返回index.jsp表单控制器的对象,如下面的代码:

form:

formaction="

${ctx}/user/save.${ext}"

method="

post"

commandName="

table>

tr>

<

td>

Id:

/td>

inputpath="

id"

/tr>

name:

name"

password:

password"

tdcolspan="

2"

inputtype="

submit"

Save"

/table>

/form:

form>

上述的id、name、password由页面控制器放置在pageContext中,即在内部控制器方法中需要做这样的声明:

@RequestMapping(value="

/user/save"

method=RequestMethod.GET)

publicStringforSave(@ModelAttributeUseruser){

/index"

后台控制器中必须绑定这个@ModelAttributeUseruser命令行对象,而form下面的属性需要于这个user中的属性对应起来,否则将会抛异常。

标签经过解析后生成的代码如下:

formid="

action="

/springTag/user/save.html"

inputid="

name="

type="

text"

0"

/>

"

SaveChanges"

/form>

(2)input标签

使用时如上面的表达

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

当前位置:首页 > 高中教育 > 其它课程

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

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