第三阶段(day07)springmvc

本文详细介绍了SpringMVC的工作原理、作用和快速入门步骤,包括如何处理不同类型的请求参数和返回内容,以及解决乱码问题。重点讨论了SpringMVC简化servlet开发,提供参数获取和数据返回的便利性,并讲解了限定请求方法的注解使用。
摘要由CSDN通过智能技术生成

 1.复习servlet(重要)

客户端发请求到服务器:请求地址,请求头(例子见图),请求体(请求报文)

网络传输中的数据类型:(可按以下步骤查看) 

(video音频文件,image/bmg图片文件....)

但主要的就最上面图里的三种(浏览器到服务器的数据类型):

①.application/x-www-form-urlencoded

(k=v的参数字符串,eg:见图。对应请求头:content_type:application/x-www-form-urlencoded)

②.application/json

(json格式字符串,eg:见图。)

③.multipart/form-data

(byte流或者说字节数组或者说文件数据,eg:见图。)

请求方式get/post。区别见图。

服务器回传浏览器的数据:五花八门

包,类如下:

 

代码如下:

public class Sysuser {
    private String uname;
    private String upwd;
    private Integer id;

    public String getUpwd() {
        return upwd;
    }

    public void setUpwd(String upwd) {
        this.upwd = upwd;
    }

    public String getUname() {
        return uname;
    }

    public void setUname(String uname) {
        this.uname = uname;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }
}

 第一种请求类型:

//url映射:把一个url字符串对应到一个httpServlet对象中.
@WebServlet("/user")
public class UserController extends HttpServlet {

    @Override
    public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
        HttpServletRequest request = (HttpServletRequest)req;   //请求对象,封装的是客户端数据输入流
        HttpServletResponse response = (HttpServletResponse)res;  //响应对象
 
        //1.如果请求头content_type:application/x-www-form-urlencoded的话
        String uname = request.getParameter("uname");
        String upwd = request.getParameter("upwd");

        Sysuser u = new Sysuser();
        u.setUname(upwd);
        u.setUpwd(upwd);

        System.out.println(u);

    }

}

启动服务器,打开postman。

(用application/x-www-form-urlencoded,tomcat自动读取,按照&分割,放到request里的map里存起来,getParameter在map里根据key取value)

第二种请求类型:

//url映射:把一个url字符串对应到一个httpServlet对象中.
@WebServlet("/user")
public class UserController extends HttpServlet {

    @Override
    public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
        HttpServletRequest request = (HttpServletRequest)req;   //请求对象,封装的是客户端数据输入流
        HttpServletResponse response = (HttpServletResponse)res;  //响应对象

       
        //2.如果请求头content_type:application/json的话
        ServletInputStream in = request.getInputStream();
        byte[] bytes = new byte[2048];
        int r;
        StringBuilder s  = new StringBuilder();
        while((r=in.read(bytes))!=-1){
            s.append(new String(bytes,0,r));
        }
        String s1 = s.toString();
        Sysuser sysuser = JSON.parseObject(s1, Sysuser.class);
        System.out.println(s1);

     
    }

}

(拿到请求体里的流,用原生方式读取)

 (发送json形式的,tomcat不会帮助解析,自己读流解析)

第三种:

@WebServlet("/user")
@MultipartConfig    //表示此serlvet可以解析请求头content_type:muilpart/form-data的请求数据
public class UserController extends HttpServlet {

    @Override
    public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
        HttpServletRequest request = (HttpServletRequest)req;   //请求对象,封装的是客户端数据输入流
        HttpServletResponse response = (HttpServletResponse)res;  //响应对象

       
        //3,如果请求头content_type:multipart/form-data的话
        Part uimg = request.getPart("uimg");
        String submittedFileName = uimg.getSubmittedFileName();  //文件名
        String name = uimg.getName();
        InputStream inputStream = uimg.getInputStream();   //文件内容流
        String target = "D:/"+submittedFileName;
        OutputStream out = new FileOutputStream(target);
        byte[] bytes=  new byte[2048];
        int r;
        while((r=inputStream.read(bytes))!=-1){   //从流里读数据到byte数组
            out.write(bytes,0,r);    //将数组数据写出去
        }
        out.flush();
        out.close();

     
    }

}

(不用读流得到字节数组那样,文件数据字节数组特殊,不全是文件内容,比如:0-100描述后面101-200,200-end是文件内容 101-200表示文件名,文件大小;)

假如传个人头像

服务器返回给客户端的内容:

状态行,响应头,响应体。

服务器到浏览器的数据类型:

常见的(见图。text/html...)

返回数据的代码:

若为text/html数据类型:(同步里使用)

 (postman不能渲染,需要用浏览器)

若为text/plain,同理。

若为application/json,如下(异步里才用)

PrintWriter writer = response.getWriter();
response.setContentType("application/json;charset=utf-8");
String str = "{'uname':'fyt'}";
writer.print(str);
writer.flush();
writer.close();

同步:服务器返回给客户端的永远是页面。发给服务器的是数据,返回的是页面。

异步:只把操作以后的json结果返回给客户端。来回传递的只有数据。



springmvc

2.springmvc作用

springmvc就是对原生servlet的封装,简化获取不同类型参数的代码,简化返回数据的代码,提高开发效率.

servlet一个url是映射到一个类上,一个类只能处理一个业务.

3.快速入门

springmvc是spring框架中的一个小模块.

①.需要添加的jar包:

  • 添加spring的核心包+一个日志包

  • 切面相关包

  • 测试整合包

  • 添加spring-web;spring-webmvc两个包

  • 添加jackson组件的三个包.此json组件是springmvc默认支持的.不需要进行配置直接生效(若用fastjson等还要配置)

②.创建springmvc.xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/co
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值