Java Web - 狂神
JavaWeb
1. web服务器:
1.1 前言:
web开发:
-
web,网页的意思,www.baidu.com·
-
静态web
-
html,css
-
提供给所有人看的数据始终不会发生变化!
-
-
动态web
-
淘宝,几乎是所有的网站;
-
提供给所有人看的数据始终会发生变化,每个人在不同的时间,不同的地点看到的信息各不相同!
-
技术栈:Servlet/JSP,ASP,PHP
-
1.2 web应用程序web应用程序:
可以提供浏览器访问的程序;
-
a.html、b.html.….多个web资源,这些web资源可以被外界访问,对外界提供服务;
-
你们能访问到的任何一个页面或者资源,都存在于这个世界的某一个角落的计算机上。
-
URL
-
这个统一的web资源会被放在同一个文件夹下,web应用程序>Tomcat:服务器
-
一个web应用由多部分组成(静态web,动态web)
-
html,css,js
-
jsp,servlet
-
Java程序
-
jar包
-
配置文件(Properties)
-
Web应用程序编写完毕后,若想提供给外界访问;需要一服务器来统一管理
1.3 静态web
-
*.htm, *.html这些都是网员的后缀、如果服务器上一直存在这些东西,我们就可以直接进行读取、需要网络;
-
-
静态web存在的缺点
-
Web页面无法动态更新,所有用户看到都是同一个页面
-
轮播图,点击特效:伪动态
-
JavaScript[实际开发中,它用的最多]
-
VBScript
-
-
它无法和数据库交互(数据无法持久化,用户无法交互)
-
1.4 动态web
页面会动态展示,“web页面的展示效果因人而异”
缺点:
-
加入服务器的动态web资源出现了错误,我们需要重新编写我们的后台程序,重新发布;
-
停机维护优点:
-
-
Web页面可以动态更新,所有用户看到都不是同一个页面
-
它可以与数据库交互(数据持久化:注册,商品信息,用户信息………)
1.5 web服务器
1.5.1 技术讲解
ASP:**
-
微软:国内最早流行的就是ASP;
-
·在HTML中嵌入了VB的脚本,ASP+COM;
-
·在ASP开发中,基本一个页面都有几干行的业务代码,页面极其换乱
-
·维护成本高!
-
C#
-
IIS
php:
-
PHP开发速度很快,功能很强大,跨平台,代码很简单(70%,WP)
-
·无法承载大访问量的情况(局限性)
jSP/Servlet: B/S;浏览和服务器C/S:客户端和服务器
-
sun公司主推的B/S架构
-
基于Java语言的(所有的大公司,或者一些开源的组件,都是用Java写的)
-
可以承载三高问题带来的影响;
-
语法像ASP,ASP->JSP,加强市场强度;
1.5.2 web服务器
服务器是一种被动的操作,用来处理用户的一些请求和给用户一些响应信息; lIS 微软的;ASP.,Windows中自带的 Tomcat
面向百度编程:
Tomcat是Apache 软件基金会(Apache Software Foundation)的jakarta项目中的一个核心项目,最新的Servlet 和JSP 规范总是能在Tomcat中得到体现,因为Tomcat 技术先进、性能稳定,而且免费,因而深受lava爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web应用服务器。 Tomcat 服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选。对于一个Java初学web的人来说,它是最佳的选择
Tomcat 实际上运行JSP页面和Serlet。
工作3-5年之后,可以尝试手写Tomcat服务器;
下载tomcat:
-
安装or解压
-
了解配置文件及目录结构
-
这个东西的作用
2. Tomcat:
2.0 Tomcat的作用:
2.1 Tomcat的启动和配置:
Tomcat的相关文件:
启动和关闭Tomcat:
测试是否成功启动的环境:www.localhost:8080.com
2.2 Tomcat配置:
上图中,port(端口号),name(端口号名),甚至是appBase(静态文件)都是可以进行修改的。
不过,如果要更改localhost这个域名,还要去电脑的host文件中,将127.0.0.1这个URL映射到新域名中。
其中,这个hosts文件的路径:C:\Windows\System32\drivers\etc\hosts
其中,localhost等价与127.0.0.1
在下图可以看到,这都是Tomcat页面展示。也就是说,一个文件(夹)就代表一个Web应用。
2.3 网页结构:
-
一个网页该有的(文件)结构:
--webapps :Tomcat服务器的web目录
-ROOT
-kuangstudy : 网站的目录名
- WEB-INF
-classes : java程序
-lib: web应用所依赖的jar包
-web.xml : 网站配置文件
- index.html 默认的首页
- static
-css
-style.css
-js
-img
-.....
高难度面试题:
请你谈谈网站是如何进行访问的!
注意,如果修改了hosts文件,那么改完hosts后要在命令提示符窗口输入ipconfig /flushdns 刷新DNS解析缓存
-
输入一个域名;回车
-
检查本机的C:\Windows\System32\drivers\etc\hosts配置文件下有没有这个域名映射;
-
有:直接返回对应的ip地址,这个地址中,有我们需要访问的web程序,可以直接访问
-
没有:去DNS服务器找,找到的话就返回,找不到就返回找不到;
-
3. Http:
3.1 Http是什么:
-
Http是一个简单的请求-响应协议,它通常运行在TCP之上。
-
Http有两个版本:
-
Http/1.0:客户端可以和web服务器连接后,只能获得一个web资源,获得后就断开连接
-
Http/1.1:客户端可以和web服务器连接后,可以获得多个web资源。
-
3.2 Http请求:
-
客户端发出请求,将请求你发送到服务端
以百度为例:
1. 请求 URL: https://www.baidu.com/
2. 请求方法: GET
3. 状态代码: 200 OK
4.远程地址: 163.177.151.110:443
Accept: text/html
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6 语言
Cache-Control: max-age=0 高速缓存
Connection: keep-alive
Host: www.baidu.com 主机
1,请求行:
-
请求行中的请求方式:GET
-
请求方式:Get,Post,HEAD,DELETE,PUT,TRACT.…
-
get:请求能够携带的参数比较少,大小有限制,会在浏览器的URL地址栏显示数据内容,不安全,但高效
-
post:请求能够携带的参数没有限制,大小没有限制,不会在浏览器的URL地址栏显示数据内容,安全,但不高效。
-
2,消息头:
Accept:告诉浏览器,它所支持的数据类型
Accept-Encoding:支持哪种编码格式 GBK UTF-8 GB2312 ISO8859-1
Accept-Language:告诉浏览器,它的语言环境
Cache-Control:缓存控制
Connection:告诉浏览器,请求完成是断开还是保持连接
HOST:主机..../.
3.3 Http响应:
Connection: keep-alive 保持连接
Content-Encoding: gzip 编码格式
Content-Type: text/html; charset=utf-8 内容类型
Accept:告诉浏览器,它所支持的数据类型
Accept-Encoding:支持哪种编码格式 GBK UTF-8 GB2312 ISO8859-1
Accept-Language:告诉浏览器,它的语言环境
Cache-Control:缓存控制
Connection:告诉浏览器,请求完成是断开还是保持连接
HOST:主机..../.
```
3.4 响应状态码:
200:请求响应成功200 3xx:请求重定向·重定向:你重新到我给你新位置去; 4xx:找不到资源404·资源不存在; 5xx:服务器代码错误 500 502:网关错误
常见面试题:
当你的浏览器中地址栏输入地址并回车的一瞬间到页面能够展示回来,经历了什么?
4. Maven
我为什么要学习这个技术?
-
在Javaweb开发中,需要使用大量的jar包,我们手动去导入;
-
我们需要一个帮助我们自动导入和配置这个jar包的工具。
3. Mave是一项工具!
4.1 Maven项目架构管理工具
我们目前用Maven就是方便导入jar包的! Maven的核心思想:约定大于配置
-
我们在用Java写代码时要遵守Maven的规则!
4.2 下载安装Maven
下载完成后,解压即可;
4.3 配置环境变量
在我们的系统环境变量中配置如下配置:
-
M2_HOME: maven目录下的bin目录
-
MAVEN_HOME maven的目录
-
在系统的path中配置%MAVEN_HOME%\bin
4.4 阿里云镜像
-
镜像(mirrors):镜像也可以说是复制,备份。镜像的数据库中的数据和源数据库中的数据一致。
-
作用:加速我们的下载
-
国内建议使用阿里云的镜像
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>*,!jeecg,!jeecg-snapshots</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
D:\桌面\Java环境配置文件\maven-3.8.5\conf\settings.xml (自己电脑配置源和仓库的文件位置)
4.5 本地仓库
建立一个本地仓库:localRepository
<localRepository>D:\桌面\Java环境配置文件\maven-3.8.5\maven-repo</localRepository>
4.6 在IDEA中使用Maven
-
第一步:
-
第二步:
-
第三步:
-
第四步:在IDEA中的设置中进行Maven设置
4.7 创建一个普通的maven项目:
-
第一步:
-
第二步:直接点击完成即可
-
注意:创建完成之后要手动去设置将仓库改为自己本地的。
-
4.8,零散知识:
-
干净的maven项目不同包的作用:
-
IDEA现实插件以及jar包:
4.9 在maven项目中配置Tomcat:
-
第一步:
-
第二步:
-
第三步:
-
第四步:
-
第五步:
在build中配置resources,来防止我们资源导出失败的问题
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>2.5</version>
<executions>
<execution>
<id>copy-xmls</id>
<phase>process-sources</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${basedir}/target/classes</outputDirectory>
<resources>
<resource>
<directory>${basedir}/src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
4.10 pom文件
-
pom.xlm中的build文件:
<build>
<finalName>javaweb-01-maven</finalName>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- see http://maven.apache.org/ref/current/maven-core/default- bindings.html#Plugin_bindings_for_war_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
</plugins>
</pluginManagement>
</build>
pow.xml 是Maven的核心配置文件
(百度)在maven仓库中想要什么就下载什么依赖就好了
如果导出jar包出错,那么就去博客园找maven 资源导出问题,以及resources节点配置
5、Servlet
5.1、Servlet简介
-
Servlet就是sun公司用来开发动态web的一门技术
-
Sun在这些APi中提供一个接口叫做:Servlet,如果你想开发一个Servlet程序,只需要完成两个小步骤:
-
编写一个类,实现Servlet接口
-
把开发好java类部署到web服务器中
-
把实现了Servlet接口的Java程序叫做,Servlet
注意,是实现Servlet接口的程序。
注意,是实现Servlet接口的程序。
注意,是实现Servlet接口的程序。
5.2、HelloServlet
-
Maven Servlet 的依赖:
-
配置以下两个maven依赖:
-
-
-
<!--maven servlet 的依赖-->
<dependencies>
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet.jsp/javax.servlet.jsp-api -->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.3</version>
<scope>provided</scope>
</dependency>
</dependencies> -
-
为什么要使用Maven来构建Servlet项目?
-
答:maven是一项自动导入和配置jar包的工具,所以用maven项目来构建Servlet可以快速导入和配置Servlet相关的jar包(也就是直接在pom.xml文件将依赖复制上去,就会自动去下载相关的依赖jar包)
Serlvet接口Sun公司有两个默认的实现类:HttpServlet,GenericServled
-
构建一个普通的Maven项目,删除里面的src目录,以后我们的学习就在这个项目里面建立Moudel;这个空的工程就题Maven主工程;
-
关于Maven父子工程的理解;
-
父项目中会有
子项目会有
<parent>
<artifactId>javaweb-02-servlet</artifactId>
<groupId>com.kuang</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
-
注意:2020年的IDEA是没有parent标签的
父项目中的java子项目可以直接使用
就像是Java程序中的继承一样: son extends father
-
Maven环境优化
-
修改web.xml为最新的
-
将maven的结构搭建完整
-
在子项目的main目录中构建java目录和resources目录
-
-
-
编写一个Servlet程序(在java目录中定义一个普通类,以及继承servlet接口)
1.编写一个普通类
2.实现Servlet接口,这里我们直接继承HttpServlet
public class HelloServlet extends HttpServlet {
//由于get或者post只是请求实现的不同的方式,可以相互调用,业务逻辑都一样;
-
5.编写Servlet的映射 为什么需要映射:我们写的是JAVA程序,但是要通过浏览器访问,而浏览器需要连接web服务器,所以我们需要在web服务中注册我们写的Servlet,还需给他一个浏览器能够访问的路径;
<!--注册Servlet-->
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>com.kuang.servlet.HelloServlet</servlet-class>
</servlet>
<!--Servlet的请求路径-->
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
-
6.配置Tomcat
注意:配置项目发布的路径就可以了
-
前面写过了
-
-
7。启动测试(运行就好了)
-
问题1:
-
500错误,tomcat10版本不兼容问题,服务降级就好(tomcat9)
-
-
问题2:
-
确定操作无误,没有target目录
-
-
-
问题3:
-
没有lib
-
去吧工程下的pom.xml里面依赖的
<scope>provided</scope>
(作用域)删掉 -
我的问题就这几个
-
-
-
原码阅读:
-
所以,GenericServlet是Servlet接口的实现类,HttpServlet类又继承GenericServlet类,故我们只 要定义一个类,继承HttpServlet类就算是实现Servlet接口了。
-
由此,我们可以看出Servlet函数中是具体调用各种请求的方法。但是,这些方法都是官方的固定简单使用,所以我们需要按照自己的需求来重写这些方法。
-
我们需要使用到什么方法,就直接重写这些方法就行。(一般只会使用到do和get方法)
-
由于Get和Post只是请求实现的方式不同,所以可以相互调用,并且结果都是一样的。
5.3、Servlet原理
Servlet是由Web服务器调用,web服务器在收到浏览器请求之后,会:
Web服务器调用Servlet的流程:
-
浏览器向web容器(也就是Tomcat服务器)发生Http请求
-
如果这个Http请求是第一次访问,那么就会产生一个Servlet
-
此外,web容器会产生两个对象,分别是:请求,响应
-
刚才产生的Servlet会调用Servlet接口,这个接口有一个service方法。而这个service方法就会处理请求和响应这个两个对象。
-
一开始的Http请求传入到service方法中作为ServletRequest变量。之后会去找这个请求对应的实现方法。(如果是Get请求,那就调用Get方法;如果是Post请求,那么就调用Post方法)(这些实现方法实现的功能是自己定义的。)
-
当请求的实现方法完成后,会返回一个响应信息,这个响应信息通过service方法封装到容器(Tomca服务器)中。
-
最后,web容器拿到响应信息会,将这信息发给客户端。
-
注意:我们自己重写的Request实现类会:接收处理请求,并给出响应的信息。
5.4、Mapping问题
-
一个Servlet可以指定一个映射路径
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
一个servlet可以指定多个映射路径
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello2</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello3</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello4</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello5</url-pattern>
</servlet-mapping>
-
一个servlet可以指定通用映射路径
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello/*</url-pattern>
</servlet-mapping>
-
默认请求路径
<!--默认请求路径-->
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
-
指定一些后缀或者前缀等等…
<!--可以自定义后缀实现请求映射
注意点,*前面不能加项目映射的路径
hello/sajdlkajda.qinjiang
-->
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>*.qinjiang</url-pattern>
</servlet-mapping>
-
优先级问题 指定了固有的映射路径优先级最高,如果找不到就会走默认的处理请求;
<!--404-->
<servlet>
<servlet-name>error</servlet-name>
<servlet-class>com.kuang.servlet.ErrorServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>error</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
5.5、ServletContext
web容器可以和多个servlet进行交互。
Context——上下文,起到承接作用,可以使得每一个servlet服务之间可以进行交互。
web容器在启动的时候,它会为每个web程序都创建一个对应的ServletContext对象,它代表了当前的web应用;
1、共享数据
我在这个Servlet中保存的数据,可以在另外一个servlet中拿到;
-
保存数据的servlet:
-
public class HelloServlet extends HttpServlet {
-
读取所保存数据的类:
-
public class GetServlet extends HelloServlet{
-
网页的配置文件:
-
<!--注册: 写注册网页的名字;写网页请求访问的Java文件-->
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>com.peng.servlet.HelloServlet</servlet-class>
</servlet>
<!--写注册时网页的名字;写访问这个网页的路径-->
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>getservlet</servlet-name>
<servlet-class>com.peng.servlet.GetServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>getservlet</servlet-name>
<url-pattern>/getservlet</url-pattern>
</servlet-mapping>
注意!!!:这里是先访问保存数据的类的那个网页,再访问读取数据的类。这样才能拿到数据。否则,如果先访问读取数据的类,返回结果是null。这是因为没有数据可以读取,所以输出null。
-
下图一中是没有访问过保存数据的类(hello),所以结果是null。图二是访问过保存数据的类,所以可以读取到数据。
-
-
2、获取初始化参数
-
第一步:在web.xml文件中配置web应用的初始化参数
<!--这是配置一些web应用初始化的参数
这下面是一个键值对。在对应的执行类使用context.getInitParameter("键名")方法
将对应的 键 输入进括号中,即可获得对应的值(String类型)
-->
<context-param>
<param-name>url</param-name>
<param-value>JTpeng</param-value>
</context-param>
-
第二步:去对应的使用类中去使用(获得)这个初始化参数
public class ServletDemo03 extends HttpServlet {
3、请求转发
4、读取资源文件
Properties
-
可以在java目录下新建properties
-
可以在resources目录下新建properties
-
注意,如果配置文件无法导出或者是无法生效,那么我们就需要去 子pom.xml文件中的build配置resources
-
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build> -
发现:通过target文件可以发现,无论是在Java目录的properties还是在resources目录下的properties,都被打包到了classes目录下。我们这这个路径为classpath。 思路:需要一个文件流:
// 在properties文件中的配置:
username=root
password=2925672205
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
InputStream resourceAsStream = this.getServletContext().getResourceAsStream("/WEB-INF/classes/com/peng/servlet/aa.properties");
Properties prop = new Properties();
prop.load(resourceAsStream);
String user = prop.getProperty("username");
String pwd = prop.getProperty("password");
//注意,哪怕是使用双引号括起来,标点符号也都是要使用英文的。不然就不能识别,直接就是一个 问号(?)
resp.getWriter().print(user +":"+pwd);
}
访问测试即可ok;
5.6、HttpServletResponse
web服务器接收到客户端的http请求,针对这个请求,分别创建一个
代表请求的HttpServletRequest对象,
代表响应的一个HttpServletResponse;
-
如果要获取客户端请求过来的参数:找HttpServletRequest
-
如果要给客户端响应一些信息:找HttpServletResponse
-
//设置浏览器的行为(浏览器的各种信息响应),就需要使用resp这个对象来进行操作。
1、简单分类
-
负责向浏览器发送数据的方法
//写数据流的数据:
servletOutputstream getOutputstream() throws IOException;
//写中文的数据:
Printwriter getwriter() throws IOException;
-
负责向浏览器发送响应头的方法
void setCharacterEncoding(String var1);
void setContentLength(int var1);
void setContentLengthLong(long var1);
void setContentType(String var1);
void setDateHeader(String varl,long var2)
void addDateHeader(String var1,long var2)
void setHeader(String var1,String var2);
void addHeader(String var1,String var2);
void setIntHeader(String var1,int var2);
void addIntHeader(String varl,int var2);
-
响应的状态码
public static final int SC_CONTINUE = 100;
public static final int SC_SWITCHING_PROTOCOLS = 101;
public static final int SC_OK = 200;
public static final int SC_CREATED = 201;
public static final int SC_ACCEPTED = 202;
public static final int SC_NON_AUTHORITATIVE_INFORMATION = 203;
public static final int SC_NO_CONTENT = 204;
public static final int SC_RESET_CONTENT = 205;
public static final int SC_PARTIAL_CONTENT = 206;
public static final int SC_MULTIPLE_CHOICES = 300;
public static final int SC_MOVED_PERMANENTLY = 301;
public static final int SC_MOVED_TEMPORARILY = 302;
public static final int SC_FOUND = 302;
public static final int SC_SEE_OTHER = 303;
public static final int SC_NOT_MODIFIED = 304;
public static final int SC_USE_PROXY = 305;
public static final int SC_TEMPORARY_REDIRECT = 307;
public static final int SC_BAD_REQUEST = 400;
public static final int SC_UNAUTHORIZED = 401;
public static final int SC_PAYMENT_REQUIRED = 402;
public static final int SC_FORBIDDEN = 403;
public static final int SC_NOT_FOUND = 404;
public static final int SC_METHOD_NOT_ALLOWED = 405;
public static final int SC_NOT_ACCEPTABLE = 406;
public static final int SC_PROXY_AUTHENTICATION_REQUIRED = 407;
public static final int SC_REQUEST_TIMEOUT = 408;
public static final int SC_CONFLICT = 409;
public static final int SC_GONE = 410;
public static final int SC_LENGTH_REQUIRED = 411;
public static final int SC_PRECONDITION_FAILED = 412;
public static final int