首页 文章资讯内容详情

SpringMVC的特性及应用

2026-06-01 5 花语

本文内容纲要:

SpringMVC****特点

清晰地角色划分 灵活的配置功能 提供了大量的控制器接口和实现类 真正的View层实现无关(JSP、Velocity、Xslt等) 国际化支持 面向接口编程 Spring提供了Web应用开发的一整套流程,不仅仅是MVC,他们之间可以很方便的结合一起

视图解析器

将逻辑视图的名字与JSP等视图技术进行匹配 InternalResourceViewResolver 在Web应用程序的WAR文件中查找视图模板,视图模板的路径根据加完前缀和后缀的逻辑视图名称来确定 prefix suffix

REST****风格

RepresentationalStateTransfer表述性状态转移 传统的查、改、删的URL与REST风格的增删改URL对比 /userview.action?id=12VS/user/12 /userdelete.action?id=12VS/user/12/delete /userupdate.action?id=12VS/user/12/update 请求方式 GET POST DELETE PUT 他强调的是一个资源可以对应多种视图

配置步骤:

1.导入spring-web类库,

2.配置web.xml:

springMVC

org.springframework.web.servlet.DispatcherServlet

springMVC

/

乱码处理:

encodingFilter

org.springframework.web.filter.CharacterEncodingFilter

encoding

UTF-8

forceEncoding

true

encodingFilter

/*

3.配置-servlet.xml,放在和web.xml同目录

方式一:BeanNameUrlHandlerMapping方式:

方式二:DefaultAnnotationHandlerMapping注解方式:

<context:component-scanbase-package="com.zhp.*"/>

mvc:annotation-driven/

视图解析器如上相同

4.跳转:

方式一:ModelAndViewmav=newModelAndView("hello");//hello会结合试图解析器的前缀和后缀来确定url

方式二:注解时,直接return"hello";即可

5.接收参数:

login(Stringuname)可以直接通过uname=zhang来传参

reg(@ModelAttributeUsertbluser)通过注解也可自动封装对象

Rest风格:

@RequestMapping("/update/{username}")

publicStringupdate(@PathVariableStringusername)//注意注解@PathVariable

6.转发数据:

方式一:通过方法中参数Model:

publicStringlogin(Modelmodel){

model.addAttribute("uname","zhang");//页面通过${requestScope.uname}取出

}

方式二:session对象的获取:自动注入session对象

publicStringlogin(@ModelAttributeUsertbluser,Modelmodel,HttpSessionsession){}

注意:页面传递参数:

1.Model----model.addAttribute("upass",upass);

2.Map<String,Object>---------map.put("user",user);

3.HttpSession----session.setAttribute("name",uname);

注意:如果指定了提交方式method=RequestMethod.GET/method=RequestMethod.POST时,springMVC会根据页面的提交方式判断提交的;

7.数据校验

JSR-303是JavaEE6中的一项子规范,叫做BeanValidation,官方参考实现是HibernateValidator。

此实现与HibernateORM没有任何关系。JSR303用于对JavaBean中的字段的值进行验证。

springMVC3.x之中也大力支持JSR-303,可以在控制器中对表单提交的数据方便地验证。

8.异常处理

a.局部处理:

//运行时异常处理

@ExceptionHandler(value=RuntimeException.class)

publicStringdoException(RuntimeExceptione){

System.out.println("---RuntimeException---异常了-----"+e.getMessage());

return"error";

}

//非运行时异常处理

@ExceptionHandler(value=Exception.class)

publicStringdoException(Exceptione){

System.out.println("---Exception---异常了-----"+e.getMessage());

return"error";

}

b.全局处理:

error

9.静态资源处理:

将静态文件指定到某个特殊的文件夹中统一处理

<mvc:resourcesmapping="/resources/**"location="/resources/"/>

注意:mapping="/resources/**":表示映射路径,在页面应用resources映射名

location="/resources/":表示文件存放的真实路径

10.文件上传

a.导入文件上传夹包:commons-fileupload-1.2.2.jar、commons-io-2.4.jar

b.配置文件:

c.编写页面:

d.编写控制器类:

@Controller

publicclassProductAction{

@RequestMapping("/upload")

publicStringupload(Productproduct,@RequestParamMultipartFilepic,HttpSessionsession){

System.out.println(pic.getOriginalFilename()+"------upload-----"+product);

//获取工程路径

StringsavePath=session.getServletContext().getRealPath("resources/upload");

//获取上传文件名称

StringfileName=pic.getOriginalFilename();

FilesaveFile=newFile(savePath,fileName);

//封装到对象

product.setImgSrc(fileName);

try{//实现上传,以拷贝输入流的方式实现

FileUtils.copyInputStreamToFile(pic.getInputStream(),saveFile);

}catch(IOExceptione){e.printStackTrace();}

return"index";

}

//多文件上传

@RequestMapping("/uploads")

publicStringuploads(Productproduct,@RequestParamMultipartFile[]pic,HttpSessionsession){

//获取工程路径

StringsavePath=session.getServletContext().getRealPath("resources/upload");

for(inti=0;i<pic.length;i++){

//获取上传文件名称

StringfileName=pic[i].getOriginalFilename();

FilesaveFile=newFile(savePath,fileName);

try{//springMVC提供文件拷贝

pic[i].transferTo(saveFile);

}catch(IOExceptione){e.printStackTrace();}

}

return"index";

}

}

11.SpringMVC中的JSON

@Controller

publicclassProductController{

@Resource(name="service")

privateProductServiceservice;

@RequestMapping(value="/query/{id}",method=RequestMethod.GET)

@ResponseBody

publicProductquery(@PathVariableintid){

Productprod=service.getProductById(id);

returnprod;

}

}

对应前台js:

本文内容总结:

原文链接:https://www.cnblogs.com/typ1805/p/7780815.html