Http请求

Get请求:速度快,请求信息会暴露出来(安全性不高)

Post请求:信息会在请求内容中提交,不容易看出(安全性高)

服务器端应用特性
1、定义访问接口(网址)
2、解析访问信息,处理业务逻辑
3、返回内容给客户端
服务器工程的结构

1、源码:定义类继承HttpServlet,然后填充具体的访问方法(doGet,doPost)

public class HelloServlet extends HttpServlet {

        /**
         * 第一个参数表示客户端请求的内容(客户端给服务端的东西)
        * 第二个参数表示服务端响应的内容(服务端给客户端的东西)
        */
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
            //处理get的业务逻辑
            System.out.println("doGet被出触发");
        }

        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp)
                throws ServletException, IOException {
            //处理post的业务逻辑

        }

    }

2、配置文件,配置WebRoot/WEB-INF/web.xml,定义一个访问地址和Servlet关联

在web-app标签中添加配置
<!-- 注册一个Servlet类 -->
    <servlet>
        <servlet-name>Hello1</servlet-name>
        <servlet-class>com.xykj.test.HelloServlet</servlet-class>
    </servlet>

    <!-- 配置Servlet访问网址 -->
    <servlet-mapping>
        <servlet-name>Hello1</servlet-name>
        <url-pattern>/test</url-pattern> <!-- http://127.0.0.1:8080/Hello/test -->
    </servlet-mapping>

3、返回的页面

Http请求的参数传递

get方式请求:可以将参数直接放在地址中,在地址后用”?”接着参数的”名=值”,多个参数之间用”&”连接

post方式请求:可以将参数写到内容中,多个参数用”&”连接(不需要”?”)

HttpUrlConnection

Get

    //1、创建URL对象,创建时可以直接将参数放在网址上
    URL url = new URL("http://ip:port/Hello/login?name=java&psw=12");

    //2、打开连接
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();

    //3、处理结果
    int code = conn.getResponseCode();
    if(code == 200){
        //请求成功,可以读取服务端给的内容
        InputStream in = conn.getInputStream();
        //处理数据
        ...
    }

    //4、断开连接
    conn.disconnect();

Post请求

1、创建URL对象,创建时可以直接将参数放在网址上
    URL url = new URL("http://ip:port/Hello/login?name=java&psw=12");

    2、打开连接
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();

    3、设置请求方式为POST,然后做一些其他配置
    conn.setRequestMethod("POST");

    // 可以输出内容
    conn.setDoOutput(true);
    conn.setDoInput(true);
    // 一般post不使用缓存
    conn.setUseCaches(false);
    // 提交的内容类型(表单类型)
    conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
    // 连接一下(验证)
    conn.connect();
4、将参数写到内容中
DataOutputStream out = new DataOutputStream(conn.getOutputStream());
    String value = URLEncoder.encode("张三", "gbk");
    String param = "name=" + value + "&psw=8888";
    // 写参数到请求内容中
    out.writeBytes(param);
    out.flush();
    out.close();

    5、处理结果
    int code = conn.getResponseCode();
    if(code == 200){
        //请求成功,可以读取服务端给的内容
        InputStream in = conn.getInputStream();
        //处理数据
        ...
    }
    6、断开连接
    conn.disconnect();

附:关于字节流转为字符流可以使用InputStreamReader或者OutputStreamWriter来转换,如

InputStream in = conn.getInputStream(); //字节流
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
服务端的乱码问题

可以将收到的内容以传输时的iso-8859-1的编码转为原始数据byte[],然后再将该原始数据转为目标编码

    //接收参数
        String n = req.getParameter("name");  // null
        //网络上传输的编码一般是iso-8859-1
        byte[] temp = n.getBytes("iso-8859-1");
        n = new String(temp,"gbk");
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值