SpringMvc知识点

1、springmvc框架的特点

   是一个基于mvc设置模式的控制层框架

   核心控制器(前端控制器)是一个Servlet类(DispatcherServlet

控制器类单实例的(不要随便设置属性)

采用注解简化配置

请求参数、servlet api等数据 通过入参数的方式

支持拦截器

2、如何使用springmvc框架

   Jar   web.xml配置   spring-servlet配置   控制器类

3、spring-servlet中都配置了哪些信息

   支持注解

配置控制器类所在的包(注解所在的包)

响应页面的路径前缀 后缀的拼接格式

支持上传配置

异常处理的配置

拦截器配置

静态资源处理

4、springmvc中的常用注解 

@Controller  设置在类上   标识这个类是一个控制器类

@RequestMapping  设置在类、方法上   设置路径 注意以/开始

   

@RequestParam  设置方法的参数上   设置请求参数

@Autowired  设置在控制器类属性上    springmvc框架完成对这个属性值的赋予

@ExceptionHandler  设置在方法上    设置异常处理

@PathVariable  设置在方法参数上  rest风格传递参数一起使用

5、如何获取请求数据

  • 表单
  • 超链接

设置在控制器方法的参数中 1、参数名   2、对象(页面控件名或参数名 设置为对象属性名)  

6、如何页面跳转

  • 请求转发跳转页面

    return "index";               /index.jsp

      return "forward:/index.jsp";

  • 重定向跳转页面

    return "redirect:/index.jsp";

  • 重定向跳转控制器方法

    return "redirect:/test/test4.do";

7、如何获取作用范围               

  • 获取的是基于servlet api的作用范围

  a、设置在控制器方法的参数上

public String test4 (HttpServletRequest request, HttpSession session, ServletContext application){}

  b、设置在控制器类的属性上

  public class TestCtrl {

                                             @Autowired

                                             private HttpServletRequest req;

                                             @Autowired

                                             private HttpSession session;

 对比: 如果控制器类多个方法中都需要用到这个作用范围,这时设置在属性上

        如果就一个方法中使用,这时设置在方法的参数中

  • 获取springmvc封装好的作用范围----request范围  在方法参数中获取

  aMap类型

                                             @RequestMapping("/test5.do")

                                             public String test5(Map map){

                                               map.put("info2", "helloMap");

                                               return "index2";

                                             }

  bModel类型

    @RequestMapping("/test5.do")

                                             public String test5(Model model){

                                               model.addAttribute("info3", "helloModel");

                                               return "index2";

                                             } 

   cModelAndView类型         

                                             @RequestMapping("/test5.do")

                                             public ModelAndView test5(){

                                               ModelAndView view=new ModelAndView();

                                               //request范围值

                                               view.addObject("info4", "helloModelAndView");

                                               //设置跳转页面

                                               view.setViewName("index2");

                                               return view;

                                             }

8、springmvc核心API 都有什么?各自作用?阐述一下springmvc处理流程

springmvc核心api

  • DispatcherServlet 前端控制器(请求最先到达)
  • HandlerMapping  映射     管理控制器路径映射
  • HandlerAdapter 适配器    管理 调用Handler
  • Handler--控制器的方法    执行功能  
  • ModelAndView 模型视图对象    存储视图、数据信息 用于响应
  • ViewResolver 视图解析器        解析视图
  • Model 模型     解析数据

springmvc处理流程

客户端发送请求匹配web.xml路径后到达DispatcherServlet前端控制器。参照web.xml路径,然后从HandlerMapping查找处理requesthandler. 如果映射成功,查找到。DispatcherServlet前端控制器会产生HandlerAdapter适配器,管理,调用handler控制器方法,执行功能。当执行完后将返回一个ModelAndView模型视图对象给dispatcherServlet前端控制器,由viewResolver解析视图;model解析数据并返回对应的view给客户端。

 

9、拦截器 创建  三个方法调用时机   配置

1.创建类 继承HandlerInterceptorAdapter抽象类

2.重写方法

  • preHandle方法

  执行时机:请求到达控制器方法之前

  具备返回值布尔类型  如果返回true 不拦截请求  如果返回false 拦截请求(请求不能到达控制器) 

  • postHandle方法

  执行时机: 只有preHandle方法返回true postHandle这个方法才能执行

             执行完控制器方法 生成ModelAndView对象后  响应给前端控制器之前

afterCompletion方法

  执行时机: 只有preHandle方法返回true afterCompletion这个方法才能执行           

             视图渲染、数据处理结束后  页面响应给用户之前

3spring-servlet.xml中配置

全局配置--所有控制器请求都先到达全局拦截器

<mvc:interceptors>

      <bean class="包名.类名"></bean>    

     

</mvc:interceptors>

局部配置--路径匹配的控制器请求        先到达拦截器

<mvc:interceptors>

  <mvc:interceptor>

      <mvc:mapping path="匹配路径"/>

      <bean class="包名.类名" ></bean>

   </mvc:interceptor>

</mvc:interceptors>

      路径:   *通配字符串     **通配子路径

10、异常处理(三种方式)

springmvc异常处理

1@ExceptionHandler注解

 在控制器类中设置处理异常的方法  使用@ExceptionHandler注解

     @ExceptionHandler({ArithmeticException.class,NullPointerException.class})

      @ExceptionHandler(Exception.class)

      一旦当前控制器类中产生了异常 执行到@ExceptionHandler注解所在的控制器方法 匹配异常类型

      如果异常类型匹配 执行这个方法 实现异常处理     

使用@ExceptionHandler做全局异常处理  可以创建BaseCtrl 在这里实现异常处理  其他控制器类继承BaseCtrl   

2、在spring-servlet.xml中全局异常处理配置

    <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">

            <property name="exceptionMappings">

                  <props>

                        <prop key="java.lang.NullPointerException">redirect:/error.jsp</prop> 重定向跳转

                            <prop key="java.lang.ArithmeticException">error</prop>  请求转发页面跳转

                            <prop key="java.lang.Exception">redirect:/error.jsp</prop>

                  </props>

            </property>

      </bean>

3、创建自定义类 继承AbstractHandlerExceptionResolver 重写doResolveException的方法

  在方法中实现异常处理 

      if(e instanceof NullPointerException){

                  ModelAndView view =new ModelAndView("index");

                  return view;

            }

 注意:一定要在spring-servlet.xml 配置这个类 

11、如何上传文件

1.先配置   MultipartFile对象

首先在spring-servlet.xml中进行配置--支持文件上传

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

             <property name="maxUploadSize" value="5000000"/>

             <property name="defaultEncoding" value="UTF-8"/>

</bean>

2、页面中 表单提交方式设置为post  设置enctype="multipart/form-data"

   文件域控件设置name----与控制器方法中参数名一致 参数类型MultipartFile

3、控制器中实现上传功能

   获取服务器目录---获取上传的图片名及后缀--上传 

       获取服务器目录

        String path=session.getServletContext().getRealPath("/upload");      

获取上传的文件的名及后缀

        String fname = MultipartFile对象.getOriginalFilename();

  上传文件

        MultipartFile对象.transferTo(new file(path,fname));     

12、如何设置rest风格传递参数

rest风格传递参数 一般与web.xml中设置前端控制器路径 / 一起搭配使用 优化路径

 页面传参

    路径/参数值1/参数值2

 控制器方法中

    注意 路径相匹配  通过{参数名} 设置动态参数

      方法参数中获取值 必须使用@PathVariable注解

   @RequestMapping("/userSelectOne/{uid}/{biaoji}")

      public String userSelectOne(@PathVariable("uid") String usid,@PathVariable("biaoji")int biaoji){     

 @PathVariable    解释的参数名 必须与路径中的参数名一致

 @PathVariable("参数名")   这里的参数名必须与路径中的参数名一致

13、什么时候需要配置静态资源文件?如何配置?

web.xml中配置DispatcherServlet前端控制器的通配的路径 /”,表示通配所有的路径   --用的多,做优化

 用户发送的html请求、后台请求 都匹配这个/路径

 解决?--使用静态资源处理

 spring-servlet.xml中进行配置

    <mvc:resources location="/html/" mapping="/html/**" cache-period="31556926"/>

    location 位置

mapping  路径  设置通配    /html/*.html

      cache-period  有效时间  以秒为单位

14、简述拦截器与过滤器的区别

①拦截器只能对控制器请求起作用,而过滤器可以对所有请求起作用。

②拦截器是基于Java反射机制的,而过滤器是基于接口回调的。

③过滤器依赖于Servlet容器,而拦截器不依赖于Servlet容器。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值