三沣开发知识 购物 网址 游戏 小说 歌词 地图 快照 股票 美女 新闻 笑话 | 汉字 软件 日历 阅读 下载 图书馆 开发 租车 短信 China
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
vbs/VBScript DOS/BAT hta htc python perl 游戏相关 VBA 远程脚本 ColdFusion ruby专题
autoit seraphzone PowerShell linux shell Lua Golang Erlang 其它教程 CSS/HTML/Xhtml
html5 CSS XML/XSLT Dreamweaver教程 经验交流 开发者乐园 Android开发资料
站长资讯 .NET新手 ASP.NET C# WinForm Silverlight WCF CLR WPF XNA VisualStudio ASP.NET-MVC .NET控件开发 EntityFramework WinRT-Metro Java C++ PHP Delphi Python Ruby C语言 Erlang Go Swift Scala R语言 Verilog 其它语言 架构设计 面向对象 设计模式 领域驱动 Html-Css JavaScript jQuery HTML5 SharePoint GIS技术 SAP OracleERP DynamicsCRM K2 BPM 信息安全 企业信息 Android开发 iOS开发 WindowsPhone WindowsMobile 其他手机 敏捷开发 项目管理 软件工程 SQLServer Oracle MySQL NoSQL 其它数据库 Windows7 WindowsServer Linux
  IT知识库 -> Java -> Servlet&JSP -> 正文阅读
 

[Java]Servlet&JSP

Servlet&JSP 完整代码请参考:https://github.com/devway9/java-exercise/tree/master/servlet-jsp
目录
1 HttpServletRequest获取报文头   2 获取URL的方法 3 常用报文头获取 4 发送压缩的Web页面
正文
1 HttpServletRequest获取报文头
  1) 报文头是由浏览器产生的,不同的浏览器会返回不同的信息。可以使用HttpServletRequest的方法获取。
2 获取URL的方法
  1) getRequestURL:获取完整的URL。
  2) getRequestURI:返回主机和端口后,请求参数前的部分。即web项目的根路径+请求地址
  3) getContextPath:web项目的根路径,即部署的项目名。
  4) getServletPath:不包含项目名的请求地址。(不包含web项目跟路径)
  5) getQueryString:获取请求参数,仅支持GET方法。

     private void testPath(HttpServletRequest req, HttpServletResponse resp) {
        // 访问地址为http://localhost/servlet/testHeader?name=Jack&age=20&sex=M
        StringBuffer url = req.getRequestURL(); //http://localhost/servlet/testHeader
        println("完整的URL地址为:" + url);

        String uri = req.getRequestURI(); // /servlet/testHeader
        println("URI地址(返回主机和端口后,请求参数前的部分):" + uri);

        String contextPath = req.getContextPath(); // /servlet
        println("项目的根路径contextPath:" + contextPath);

        String servletPath = req.getServletPath(); // /testHeader
        println("不包含项目名的地址servletPath:" + servletPath);

        String queryString = req.getQueryString();
        println("请求参数(仅支持GET方法):" + queryString);
    }   

  
3 常用报文头获取
  1) getAuthType:获取认证类型。
  2) getRemoteUser:获取登陆用户名。
  3) getContentLength:获取正文内容长度,只适用于POST请求。
  4) getContentType:正文的MIME类型。
  5) getMethod:获取请求方法类型(GET、POST等)。
  6) getProtocol:获取请求的协议(如HTTP/1.1)。
  7) getHeaders:获取单个报文头的多个值。
  8) getHeaderNames:获取所有的报文头名称。
  9) getCookies:获取Cookie的信息(返回数组)。
  10) getHeader:获取单个报文头的值,比如resquest.getHeader("Accept"); 报文头名字忽略大小写。
    ① Accept:浏览器或其他客户程序能够处理的MIME类型,比如text/html。
    ② Accept-Charset:浏览器可接受的字符集。
    ③ Accept-Encoding:客户端可以处理的编码类型,比如gzip。
    ④ Accept-Language:浏览器期望的语言种类,比如zh-CN。
    ⑤ Authorization:身份标识信息。
    ⑥ Connection:客户端是否能处理持续性HTTP连接,Keep-Alive表明可以使用。
    ⑦ Content-Length:获取正文内容长度,只适用于POST请求。
    ⑧ Cookie:服务器发送给浏览器,后又有浏览器发送给服务器的内容,一般使用getCookies方法获取。
    ⑨ Host:URL中的主机名和端口号。
    ⑩ If-Modified-Since:只有当所请求的内容在指定的日期之后又经过修改才返回它,否则返回304“Not Modified”应答。
    11 Referer:前一个页面的URL。
    12 User-Agent:生成请求的浏览器或其他客户程序,根据这个报头,可以针对不同类型的浏览器返回不同的内容。注意在必要时才使用该标识进行判断,该报文头是可以进行伪造的。

 private void testHeaderMethod(HttpServletRequest req, HttpServletResponse resp) {
        String authType = req.getAuthType();
        println("认证类型:" + authType);

        String remoteUser = req.getRemoteUser();
        println("登陆用户名:" + remoteUser);

        int contentLength = req.getContentLength();
        println("请求消息正文的长度:" + contentLength);

        String contentType = req.getContentType();
        println("正文的MIME类型:" + contentType);

        String method = req.getMethod();
        println("请求方法(GET、POST等):" + method);

        String protocol = req.getProtocol();
        println("协议:" + protocol);

        //获取单个报文头的多个值
        Enumeration<String> headers = req.getHeaders("accept-language");
        while (headers.hasMoreElements()) {
            println("accept-language:" + headers.nextElement());
        }

        //获取所有报文头名称
        Enumeration<String> enums = req.getHeaderNames();
        println("所有HTTP头部信息:");
        while (enums.hasMoreElements()) {
            String element = enums.nextElement();
            println(">>>" + element + "=" + req.getHeader(element));
        }

        //获取Cookie
        Cookie[] cookies = req.getCookies();
        println("cookie的信息:");
        for (Cookie cookie : cookies) {
            println(">>>注释:" + cookie.getComment());
            println(">>>域名:" + cookie.getDomain());
            println(">>>名字:" + cookie.getName());
            println(">>>适用的路径:" + cookie.getPath());
            println(">>>值:" + cookie.getValue());
            println(">>>存活的时间:" + cookie.getMaxAge());
            println(">>>遵从的是否是安全协议::" + cookie.getSecure());
            println(">>>遵从的协议版本:" + cookie.getVersion());
        }
    }

      
4 发送压缩的Web页面
  1) 大多数浏览器都知道如何处理gzip压缩的内容,因此服务器可以使用Gzip对文档压缩,浏览器自动解压缩,对于较大的文本页面,Gzip压缩可以极大的节省网页下载时间。
  2) 可以通过Accept-Encoding判断浏览器是否支持Gzip。
  3) Servlet使用Gzip压缩页面进行传输:
    out = new PrintWriter(new GZIPOutputStream(resp.getOutputStream()));
    resp.setHeader("Content-Encoding", "gzip");

public class TestGzip extends BaseServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html");
        resp.setCharacterEncoding("UTF-8");

        if (isSupportGzip(req)) {
            out = new PrintWriter(new GZIPOutputStream(resp.getOutputStream()));
            resp.setHeader("Content-Encoding", "gzip");
        } else {
            out = resp.getWriter();
        }

        for (int i = 0; i < 100000; i++) {
            println(i + ":This is a test for gzip.");
        }

    }

    //判断浏览器是否支持gzip压缩
    private boolean isSupportGzip(HttpServletRequest req) {
        String acceptEncoding = req.getHeader("Accept-Encoding");
        if (acceptEncoding != null && acceptEncoding.contains("gzip")) {
            return true;
        }
        return false;
    }

  
  Java 最新文章
初入山门,需记门规
java 操作本地数据库 mysql
spring boot 整合 mybatis
单表(SSM、SpringBoot、SpringCloud、Free
Mybatis框架中Mapper动态代理方式
IDEA报错:Error starting ApplicationCont
Java内存管理原理及内存区域详解
结合ThreadLocal来看spring事务源码,感受下
JDBC与javaBean知识
Java—恶心的java.lang.NumberFormatExcept
上一篇文章      下一篇文章      查看所有文章
加:2017-12-06 23:24:40  更:2017-12-06 23:25:12 
 
技术频道: 站长资讯 .NET新手区 ASP.NET C# WinForm Silverlight WCF CLR WPF XNA Visual Studio ASP.NET MVC .NET控件开发 Entity Framework WinRT/Metro Java C++ PHP Delphi Python Ruby C语言 Erlang Go Swift Scala R语言 Verilog 其它语言 架构设计 面向对象 设计模式 领域驱动设计 Html/Css JavaScript jQuery HTML5 SharePoint GIS技术 SAP Oracle ERP Dynamics CRM K2 BPM 信息安全 企业信息化其他 Android开发 iOS开发 Windows Phone Windows Mobile 其他手机开发 敏捷开发 项目与团队管理 软件工程其他 SQL Server Oracle MySQL NoSQL 其它数据库 Windows 7 Windows Server Linux
脚本语言: vbs/VBScript DOS/BAT hta htc python perl 游戏相关 VBA 远程脚本 ColdFusion ruby专题 autoit seraphzone PowerShell linux shell Lua Golang Erlang 其它教程
网站开发: CSS/HTML/Xhtml html5 CSS XML/XSLT Dreamweaver教程 经验交流 开发者乐园 Android开发资料
360图书馆 软件开发资料 文字转语音 购物精选 软件下载 美食菜谱 新闻资讯 电影视频 小游戏 Chinese Culture 股票 租车
生肖星座 三丰软件 视频 开发 短信 中国文化 网文精选 搜图网 美图 阅读网 多播 租车 短信 看图 日历 万年历 2017年12日历
2017-12-17 17:53:48
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT知识库