您的当前位置:首页正文

spring mvc

2022-03-16 来源:星星旅游


Spring MVC

主流MVC框架实现的功能

1. 2. 3. 4. 5. 6. 7. 8. 9. 10.

以Controller为中心完成对系统流程的控制管理 对请求数据的收集 对传入的参数进行验证

更加请求调用相应的业务逻辑完成数据处理 将处理结果返回给试图 国际化的支持

提供不同视图的支持方案 标签库 拦截器

对文件上传、下载的支持

Spring mvc概念

1. 2. 3. 4. 5. 6.

Dispatcher Servlet HandlerMapping Controller

ModelAndView ViewResolver View

实例实现

1. 新建web项目,导入相应的jar包。

a) 必须的jar包: i. com.springsource.javax.servlet.jsp.jstl-1.1.2.jar ii. com.springsource.org.apache.commons.logging-1.1.1.jar iii. org.springframework.asm-3.0.4.RELEASE.jar iv. org.springframework.beans-3.0.4.RELEASE.jar v. org.springframework.context-3.0.4.RELEASE.jar vi. org.springframework.context.support-3.0.4.RELEASE.jar vii. org.springframework.core-3.0.4.RELEASE.jar viii. org.springframework.expression-3.0.4.RELEASE.jar ix. org.springframework.web-3.0.4.RELEASE.jar x. org.springframework.web.servlet-3.0.4.RELEASE.jar

2. 修改项目中的web.xml文件

a) 添加spring mvc的中心控制器,并定义请求映射关系。

3.

4. 5.

6.

spring-mvc org.springframework.web.servlet.DispatcherServlet 1

spring-mvc *.do

b) 根据定义的DispatcherServlet名称添加一个名为:名称-servlet.xml的配置文件。 编写controller类。

a) 添加一个类,名为StartController.java实现Controller接口。

public class StartController implements Controller { @Override public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { System.out.println(\"start controller!\"); return new ModelAndView(\"start\").addObject(\"name\ } }

b) 显现Controller接口的handlerRequest方法。返回一个ModelAndView对象。 在spring-mvc-servlet.xml中配置controller的bean,让spring管理。

a) 配置spring的HandlerMapping

a) 在spirng-mvc-servlet.xml中配置HandlerMapping

startController

b) 当前台以start.do访问时,spring的DispatcherServlet会将请求转交给StartController

处理。

配置spring mvc的ViewResolver和View

a) 在spring-mvc-servlet.xml中配置ViewResolver和View

value=\"org.springframework.web.servlet.view.JstlView\"/>

b) StartController中返回名称为start的ModelAndView,spring根据ViewResolver中定

义的映射模式拼合成/WEB-INF/jsp/start.jsp的url。 c) 根据定义的view试图。展现在前台。

Spring MVC常用的控制器Controller

1. 实现controller接口

2. 继承AbstractController抽象类 3. 直接跳转页面的控制器

a) ParameterizableViewController i. 在handlerMapping中配置

loginController ii. 配置ParameterizableViewController

class=\"org.springframework.web.servlet.mvc.ParameterizableViewController\"> b) UrlFilenameViewController:url的名称与视图名称相同时

class=\"org.springframework.web.servlet.mvc.UrlFilenameViewController\"/>

4. 能够封装表单参数的控制器

a) CommondController i. Controller类继承AbstractCommandController,实现handle方法 ii. 在spring-mvc-servlet.xml中配置

value=\"com.witty.mvc.domain.Emp\">

iii. 数据绑定

@Override

protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) throws Exception { binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat(\"yyyy-MM-dd\"), true)); }

b) FormController同一请求调用不同的方法 i. 当请求为get时,调用referenceData方法 ii. 当请求为post时,调用onSubmit方法。

5. MultiActionController同一控制器处理多个请求

a) 方法 签名:public (ModelAndView | Map | String | void) actionName

(HttpServletRequest request, HttpServletResponse response [,HttpSession] [,AnyObject]);

b) 具体的调用方法是通过methodNameResolver决定 i. InternalPathMethodResolver ii. ParameterMethodNameResolver iii. PropertiesMethodResolver

Spring MVC的Handler Mapping

1. 2. 3. 4.

默认的ControllerClassNameHandlerMapping 常用的SimpleUrlHandlerMapping BeannameUrlHandlerMapping

基于注解Controller时使用的DefaultAnnotationHandlerMapping

Spring MVC注解

1. @Controller标记类:说明该类为控制器 2. @RequestMapping请求路径映射

a) 标记在方法名上:相对于类级别的应用

b) 标记在类名上:所有的方法都相对于该mapping

3. 请求参数的处理:在方法中添加参数HttpServletRequest获得相应的参数 4. restful风格:路径变量 5. get和post方法实现

a) get:@RequestMapping(value=\"/getPostTest\GET) b) post:@RequestMapping(value=\"/getPostTest\POST) 6. 注册数据绑定

@InitBinder

public void initBinder(WebDataBinder binder) { binder.registerCustomEditor(Date.class, new CustomDateEditor( new SimpleDateFormat(\"yyyy-MM-dd\"), false)); }

7. RequestMapping方法能够接受的参数

a) HttpServletRequest b) HttpServletResponse c) HttpSession

d) @PathVariable Anytype e) @RequestParam Anytype f) @CookieValue Anytype g) @RequestHeader Anytype h) PrintWriter i) Map

8. 返回值的类型

a) void b) String c) Anytype d) Model e) 38:00 f)

因篇幅问题不能全部显示,请点此查看更多更全内容