当前位置: 移动技术网 > IT编程>开发语言>JavaScript > 03 HttpServletRequest_HttpServletResponse

03 HttpServletRequest_HttpServletResponse

2019年05月13日  | 移动技术网IT编程  | 我要评论
HttpServletRequest:一次来自客户端的请求的相关信息 请求行 request.getMethod() 获取http请求方式 request.getRequestURI() 获取统一资源标识符 request.getRequestURL() 获取统一资源定位符 request.getQ ...
httpservletrequest:一次来自客户端的请求的相关信息
请求行
request.getmethod() 获取http请求方式
request.getrequesturi() 获取统一资源标识符
request.getrequesturl() 获取统一资源定位符
request.getquerystring() 获取查询字符串
request.getprocotol() 获取协议版本
request.getscheme() 获取协议名
请求头
request.getheader() 获取请求头信息
request.getheadernames() 获取所有请求头的名字
实体内容
request.getparameter() 获取请求实体中的参数、或url后的请求参数
request.getinputstream() 获取请求参数,当表单提交的enctype="multipart/form-data"
网络相关信息
request.getremoteaddr() 获取客户端的ip地址
request.getremoteport() 获取客户端的端口号
request.getlocaladdr() 获取服务器端的ip地址
request.getlocalport() 获取服务器端的端口号
 
 
httpservletresponse:一次发送给客户端的响应的相关信息
状态行
应答头
response.setheader() 设置应答头
response.setcontenttype("text/html; charset=utf-8") 设置响应内容及字符集
响应实体
response.getwriter() 获取打印流,输出字符数据
response.getoutputstream() 获取字节输出流,输出二进制数据
 
 
 
一、客户端请求服务器的数据有乱码
1.get方式请求
①修改tomcat/conf/server.xml,在<connector> 标签中添加属性usebodyencodingforuri="true"
②在获取请求数据之前,设置 request.setcharacterencoding("utf-8");
2.post方式请求
在获取请求数据之前,设置 request.setcharacterencoding("utf-8");
 
二、服务器返回给客户端的数据有乱码
response.setcontenttype("text/html; charset=utf-8");
 
 
 
 
 
请求转发
request.getrequestdispathcer("path").forward(reqeust,response);
 
请求转发的特点:
1.地址栏没有发生变化
2.用户只发起了一次请求
3.请求转发只能转发本服务器以内的资源
4.由于请求是同一个对象,所以可以利用该request做servlet之间数据的传输
 
 
重定向
response.sendredirect("path")
 
重定向的特点:
1.地址栏会发生改变
2.用户发起了两次请求
3.重定向可以访问服务器以外的资源
4.重定向由于请求多次的,所以httpservletrequest不是同一个对象,故不能使用它传递数据
 
 
一、分析
1.找出一个url中的项目名称
项目名称前面的“/”是服务器地址,例:http://127.0.0.1:8080/
项目名称后面的“/”是项目地址,例:http://127.0.0.1:8080/proejctname/
二、判断
1.判断一次请求行为是谁发出的
如果是浏览器行为,则表示项目名称前面的“/”,即服务器地址
如果是服务器内部行为,则表示项目名称后面的“/”,即项目地址
 
1.服务器内部行为:请求转发
2.浏览器行为:重定向、页面中form提交、页面中a标签、js中通过location.href定位一个路径
 
 
cookie:在浏览器中保存用户的信息
 
使用:由服务器创建,发送到浏览器保存,之后随着请求发回到服务器
1.创建cookie
cookie cookie = new cookie("name","value");
2.发送cookie到浏览器
response.addcookie(cookie对象);
3.获取来自客户端的cookie
cookie[] cookies = request.getcookies();
 
使用注意:
1.cookie第一次是由servlet发送到浏览器中,第一次不能获取cookie
2.不同的浏览器存放的cookie不是同一个
3.如果设置了cookie的maxage,则cookie会保存在浏览器所在电脑的硬盘上,如果没设置该属性,则保存在浏览器的内存中
 
 
session:在服务器中保存用户信息
使用:在服务器端创建session,来保存当前访问服务器的用户的信息
1.获取session(如果已经创建了session,则返回当前session)或创建session:
httpsession session = request.getsession();
2.设置session最大不活跃时间
session.setmaxinactiveinteval() //以秒为单位
3.使用session保存信息
session.setattribute(string key,object value);
session.getattribute(string key);
4.立即销毁session
session.invalidate();
 
 
httpservletrequest:封装了一次来自客户端的http的请求信息
请求消息包含几个部分?
1请求行
 
private void getrequestline(httpservletrequest request,
            httpservletresponse response) {
//请求方式  
         string method = request.getmethod();
        system.out.println(method);
//资源路径
        string uri =request.getrequesturi();
        string url=request.getrequesturl().tostring();
        system.out.println(uri);
        system.out.println(url);
//请求参数字符串
        string querystring =request.getquerystring();
        system.out.println(querystring);
//协议及版本号
        string protocol = request.getprotocol();
        system.out.println(protocol);
        string scheme = request.getscheme();
        system.out.println(scheme);
        
        
    }

 

2请求头
 
private void getrequesthead(httpservletrequest request,
            httpservletresponse response) {
        // 根据header的key获取其value
                string user_agent = request.getheader("user-agent");
                system.out.println(user_agent);
                // 查询header所有的keyname
                enumeration<string> enu = request.getheadernames();
                while (enu.hasmoreelements()) {
                    system.out.println(enu.nextelement());
                }
    }

 

3 实体内容
 
private void getrequestbody(httpservletrequest request,
            httpservletresponse response) throws ioexception {
        // 获取请求实体中的数据

                // 请求实体中的数据有三种形式:
                // 1.application/x-www-form-urlencoded
                // 2.multipart/form-data
                // 3.text/plain

                // 对于1、3
                // getparameter() //无论post方式还是get方式都可以获取用户的请求数据
        string value = request.getparameter("username");
        system.out.println(value);
        string coment = request.getparameter("coment");
        system.out.println(coment);
        
        servletinputstream in= request.getinputstream();
        fileoutputstream out = new fileoutputstream(
                "d:\\1.txt");
        int len = 0;
        byte[] flush = new byte[1024];
        while ((len = in.read(flush)) != -1) {
            out.write(flush, 0, len);
        }
        out.close();
        in.close();
    }

 

4网络信息
    private void getintenetinfo(httpservletrequest request,
            httpservletresponse response) {
        system.out.println("访问服务器的地址为:" + request.getremoteaddr() + ":"
                + request.getremoteport());
        system.out.println("服务器的本地地址为:" + request.getlocaladdr() + ":"
                + request.getlocalport());
    }

}

 

响应消息分为几步?
public void dopost(httpservletrequest request, httpservletresponse response)
            throws servletexception, ioexception {
        // 状态行
        // 协议版本 http状态码 htt状态描述
        // 应答头
        // 响应实体

        // 设置应答头
        response.setheader("content-type", "image/jpeg; charset=utf-8");

        // 向用户输出字符数据
        /*
         * printwriter out = response.getwriter(); out.write("<h1>你好世界!</h1>");
         * out.flush(); out.close();
         */

        // 我们只能打开一个流为用户输出数据
        fileinputstream in = new fileinputstream("d:\\1.jpg");
        servletoutputstream out = response.getoutputstream();

        int len = 0;
        byte[] flush = new byte[1024 * 1024];
        while ((len = in.read(flush)) != -1) {
            out.write(flush, 0, len);
        }

        out.flush();
        out.close();
        in.close();

    }

 

 
 
 
 
 
 
 
 
 
 
 
 
 

如您对本文有疑问或者有任何想说的,请 点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网