【SpringMVC】SpringMVC注解式开发

@RequestMapping 定义请求规则
   @RequsetMapping:请求映射
   属性:method,表示请求方式,它的值RequestMethod类枚举值
    	get请求方式 RequestMethod.GET post请求方式 RequestMethod.POST
     	不用get方式,错误是 HTTP Status 405-Request method 'GET' not support
接收用户提交的参数:
  1. 逐个接收
  2. 对象接收

使用的处理器方法的形参,接收请求的参数。

  1. HttpServletRequest
  2. HttpServletResponse
  3. HttpSession
  4. 用户提交的数据

注意:
在提交请求参数时,get请求方式中文没有乱码。
使用post方式提交请求,中文有乱码,需要使用过滤器处理乱码的问题。

过滤器可以自定义,也可使用框架中提供的过滤器 CharacterEncodingFilter
在每个方法中都添加字符编码集比较繁琐,将操作添加在过滤器中

      逐个接收请求参数
          要求:处理器(控制器)方法的形参名和请求中参数名必须一致
                同名的请求参数赋值给同名的形参
       框架接收请求参数
        1. 使用request对象接收请求参数
            String strName=request.getParameter("name")
            String strAge=request.getParameter("age”)
        2. springMVC框架通过DispatcherServlet调用MyController的dosome()方法
            调用方法时,按名称对应,把接收的参数赋值给形参
            dosome(strName,Integer.ValueOf(StrAge))
            框架会提供类型转换功能,能把String转为int,long,float,double等类型
     
        400状态码:客户端错误,表示提交请求参数过程中,发生了问题
     
-------------------------------------------------------------------------------------------------    
 
      请求中参数名和处理器方法的形参名不一样
      @RequestParam:逐个接收请求参数中,解决请求中参数名称不一样的问题
       属性:1. value 请求中的参数名
            2. required 是一个boolean,默认是true
               true:表示在请求这种必须包含此参数
       位置:在处理器方法的形参定义的前面
-------------------------------------------------------------------------------------------------    
   
      处理器方法形参是java对象,这个对象的属性名和请求中的参数名一样的
      框架会创建形参的java对象,给属性赋值。请求中的参数时name,框架会调用setName()
处理器方法的返回值:表示请求的处理结果
  1. ModelAndView:有数据和视图,对视图执行forward
  2. String:表示视图,可以逻辑名称,也可以是完整视图路径
  3. void:不能表示数据,也不能表示视图。
    在处理Ajax的时候,可以使用void返回值。通过HttpServletResponse输出数据。响应Ajax请求。
    Ajax请求服务器返回的就是数据,和视图无关。
  4. Object:例如 String,Integer,Map,List,Student等等都是对象
    对象有属性,属性就是数据。所以返回Object表示数据,和视图无关。
    可以时使用对象表示数据,相应ajax请求。

现在做ajax,主要使用json的数据格式。实现步骤

  1. 加入处理json的工具库的依赖,springMvc默认使用的jackson.
  2. 在springmvc配置文件之间加入mvc:annotation-driven注解驱动。
    json=om.writeValueAsString(student);
  3. 在处理器方法的上面加入@ResponseBody注解
    response.setContentType(“application/json;charset=utf-8”);
    PrintWriter pw=response.getWriter();
    pw.println(json);

springmvc处理器方法返回object,可以转为json输出到浏览器,响应ajax的内部原理

  1. mvc:annotation-driven注解驱动
    注解驱动实现的功能是完成java对象到json,xml,text,二进制等数据格式的转换。

    mvc:annotation-driven在加入到springmvc配置文件后,会自动创建HttpMessageConverter接口
    的7个实现类对象,包括MappingJackson2HttpMessageConverter(使用jackson工具库中的ObjectMapper实现java对象转换为json串的)

    HttpMessageConveter接口:消息转换器。
    功能:定义了java转json,xml,等数据格式的方法。这个接口有很多的实现类。
    这些实现类完成java对象到json,java对象到xml,java对象到二进制数据的转换

    下面的两个方法是控制器类把结果输出给浏览器时使用的:
    boolean canWrite(Class<?> clazz, @Nullable MediaType mediaType);
    void write(T t, @Nullable MediaType var2, HttpOutputMessage var3)

    例如处理器方法
    @RequestMapping(value=“/returnString.do”)
    public Student doReturnView2(HttpServletRequest request,String name ,Interger age){
    Student student=new Student();
    student.setName(“lisi”);
    student.setAge(20);
    return student;
    }

    1. canWrite作用检查处理器方法的返回值,能不能转为var2表示的数据格式。
      检查student(lisi,20)能不能转为var2表示的数据格式
      MediaType:表示数据格式的,例如 json,xml等等
    2. write:把处理器方法的返回值对象,调用jackson中的ObjectMapper转为json字符串
      json=om.writeValueAsString(student);
  2. @ResponseBody注解
    放在处理器方法的上面, 通过HttpServletResponse输出数据,响应ajax请求的。
    PrintWriter pw = response.getWriter();
    pw.println(json);
    pw.flush();
    pw.close();


没有加入注解驱动标签<mvc:annotation-driven /> 时的状态
org.springframework.http.converter.ByteArrayHttpMessageConverter
org.springframework.http.converter.StringHttpMessageConverter
org.springframework.http.converter.xml.SourceHttpMessageConverter
org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter

加入注解驱动标签时<mvc:annotation-driven />的状态
org.springframework.http.converter.ByteArrayHttpMessageConverter
org.springframework.http.converter.StringHttpMessageConverter
org.springframework.http.converter.ResourceHttpMessageConverter
org.springframework.http.converter.ResourceRegionHttpMessageConverter
org.springframework.http.converter.xml.SourceHttpMessageConverter
org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter
org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter
org.springframework.http.converter.json.MappingJackson2HttpMessageConverter

解读<url-pattern/>

发起的请求是由哪些服务器程序处理的。

http://localhost:8080/ch05_url_pattern/index.jsp :tomcat(jsp会转为servlet)
http://localhost:8080/ch05_url_pattern/js/jquery-3.4.1.js : tomcat
http://localhost:8080/ch05_url_pattern/images/p1.jpg : tomcat
http://localhost:8080/ch05_url_pattern/html/test.html: tomcat
http://localhost:8080/ch05_url_pattern/some.do : DispatcherServlet(springmvc框架处理的)

tomcat本身能处理静态资源的访问, 像html, 图片, js文件都是静态资源

tomcat的web.xml文件有一个servlet 名称是 default , 在服务器启动时创建的。

 <servlet>
        <servlet-name>default</servlet-name>
        <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
        <init-param>
            <param-name>debug</param-name>
            <param-value>0</param-value>
        </init-param>
        <init-param>
            <param-name>listings</param-name>
            <param-value>false</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
 </servlet>

	  <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>/</url-pattern>  表示静态资源和未映射的请求都这个default处理
    </servlet-mapping>

default这个servlet作用:
The default servlet for all web applications, that serves static resources. It processes all requests that are not mapped to other servlets with servlet mappings (defined either here or in your own web.xml file).

1.处理静态资源
2.处理未映射到其它servlet的请求

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值