当前位置: 首页 > article >正文

【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的请求


http://www.kler.cn/news/10541.html

相关文章:

  • ChatGPT实现用C语言写一个学生成绩管理系统
  • 阻塞/非阻塞、同步/异步、五种IO模型
  • SpringBoot基础配置
  • Spring相关概念
  • 2.28、共享内存(1)
  • springboot如何优雅的打印项目日志
  • 蹭ChatGPT热点有风险,昆仑万维蹭热点被发监管函
  • Vite打包后直接使用浏览器打开,显示空白问题
  • 题解,git的使用,MySQL与JDBC的使用(上)
  • NDK RTMP直播客户端二
  • Metasploit高级技术【第十章】
  • C++篇 ---- 命名空间namespace
  • 华为MatePad有什么好用的软件?
  • 用SSH登陆Centos系统时,命令行最前面显示“的提示符[root@www myapp]”是什么意思?
  • 【博学谷学习记录】超强总结,用心分享丨人工智能 AI项目 统计语言模型之HMM初步学习总结
  • 基于Python实现的深度学习技术在水文水质领域应用
  • Java多线程:定时器Timer
  • C++之入门之缺省参数函数重载引用
  • 【活动】高效学习方法分享
  • 「VS」Visual Studio 常用小技巧
  • 【C语言】迷宫问题
  • CLIP:语言-图像表示之间的桥梁
  • Arcgis Engine之打开MXD文档
  • Linux less 命令
  • SpringBoot ElasticSearch 【SpringBoot系列16】
  • 归排、计排深度理解
  • docker运行服务端性能监控系统Prometheus和数据分析系统Grafana
  • 智慧校园大数据云平台(4)
  • 2023.04.16 学习周报
  • Java学习