Java Servlet总结整理(一)
章节:
Web
Web(World Wide Web)成为万维网,表示Internet主机上供外界访问的资源
Internet上供外界访问的资源分为两大类
~ 静态资源:Web页面中供人们浏览的数据是始终不变的。(HTML,CSS)
~ 动态资源:Web页面中供人们浏览的数据是由程序产生的,不同时间点,甚至不同设备访问web页面看到的内容各不相同。(JSP/Servlet)
Java中,动态web资源开发技术我们统称为Java web
web服务器
Web服务器是运行及发布web应用的容器,只有将开发的web项目放置到该容器中,才能使网络中的所有用户通过浏览器访问
Tomcat环境变量
CATALINA_HOME
E:\tomcat\apache-tomcat-8.5.58
Tomcat闪退
环境变量配置错误:JAVA_HOME配置错误导致的,检查JAVA_HOME配置是否正确
什么是HTTP
超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议,是一个基于请求与响应模式的、无状态的、应用层的协议,运行于TCP协议基础之上。
HTTP协议特点
支持客户端(浏览器)/服务器模式。
简单快速:客户端只向服务器发送请求方法和路径,服务器即可响应数据,因而通信速度很快。请求方法常用的有GET、POST等。
灵活I HTTP允许传输任意类型的数据,传输的数据类型由content-Type标识。
无连接:无连接指的是每次TCP连接只处理一个或多个请求,服务器处理完客户的请求后,即断开连接。采用这种方式可以节省传输时间。
HTTP1.0版本是一个请求响应之后,直接就断开了。称为短连接。
HTTP1.1版本不是响应后直接就断开了,而是等几秒钟,这几秒钟之内有新的请求,那么还是通过之前的连接通道来收发消息,如果过了这几秒钟用户没有发送新的请求,就会断开连接。称为长连接。
·无状态:HTTP协议是无状态协议。
无状态是指协议对于事务处理没有记忆能力。
HTTP协议通信流程
客户与服务器建立连接(三次握手)。。客户向服务器发送请求。
服务器接受请求,并根据请求返回相应的文件作为应答。。客户与服务器关闭连接(四次挥手)。
Http报文
常见的状态码
实现Servlet的三种方式:
Servlet接口
在serMlet API中最重要的是Servlet接口。所有Servlet都会直接或间接的与该接口发生联系,或是直接实现该接口,或间接继承自实现了该接口的类。
该接口包括以下五个方法:
init(ServletConfig config)
ServletConfig getServletConfig()
service(ServletRequest req,ServletResponse res)
String getServletinfo()
destroy()
GenericServlet抽象类
GenericServlet抽象类使编写Servlet变得更容易,它提供了生命周期方法init 和 destory的简单实现,要编写一般的Servlet,只需重写service方法;
HttpServlet类
HttpServlet是继承GenericServlet的基础上进一步的扩展。
继承HTTPServlet不需要重写service方法,HttpServlet抽象类内部重写了GenericServlet,所以不用重写service方法,HttpServlet是有HTTP协议的
而继承GenericServlet是无协议的。
提供将要被子类化以创建适用于web站点的HTTP servlet的抽象类。HttpServlet的子类至少必须重写一个方法,该方法通常是以下这些方法之—:
doGet,如果servlet支持HTTP GET请求
doPost,用于HTTP POST请求
doPut,用于HTTP PUT请求
doDelete,用于HTTP DELETE请求
Web.xml配置
url-pattern定义匹配规则, 通配符匹配不影响精确匹配,取值说明:
精确匹配 /具体的名称 只有url路径是具体的名称的时候才会触发Servlet
后缀匹配 *.xxx 只要是以XXX结尾的就匹配出发Servlet
通配符匹配 / * 匹配所有请求,包含服务器的所有资源
通配符匹配 / 匹配所有请求,包含服务器的所有资源,不包括 .jsp
load-on-startup
1元素标记容器是否应该在web应用程序启动的时候就加载这个servlet。
2它的值必须是一个整数,表示servlet被加载的先后顺序。
3如果该元素的值为负数或者没有设置,则容器会当Servlet被请求时再加载。
4如果值为正整数或者0时,表示容器在应用启动时就加载并初始化这个servlet,值越小,servlet的优先级越高,就越先被加戟。值相同时,容器就会自己选择顺序来加载。
Servlet注解WebServlet
name: Serlvet名字(可选).可省略
value:配置url路径,可以配置多个
urlPatterns:配置url路径,和value作用一样,不能同时使用
loadonStartup:配置Servlet的创建的时机,如果是o或者正数启动程序时创建,如果是负数,则访问时创建。数子越小优先级越高。
Request方法
Get请求收参
产生乱码是因为服务器和客户端沟通的编码不一致造成的,因此解决的办法是:在客户端和服务器之间设置一个统一的编码,之后就按照此编码进行数据的传输和接收
get中文乱码
在Tomcat7及以下版本,客户端以UTF-8的编码传输数据到服务器端,而服务器端的request对象使用的是ISo8859-1这个字符编码来接收数据,服务器和客户端沟通的编码不一致因此才会产生中文乱码的。
解决办法:在接收到数据后,先获取request对象以lSo8859-1字符编码接收到的原始数据的字节数组,然后通过字节数组以指定的编码构建字符串,解决乱码问题。
Tomcat8的版本中get方式不会出现乱码了,因为服务器对url的编码格式可以进行自动转换。
get乱码
post解决乱码
req.setCharacterEncoding("utf-8");
Get和Post的区别
Response对象
response对象用于响应客户请求并向客户端输出信息。
Response方法
Response解决乱码问题
解决输出中文乱码
第一种:
设置服务器端响应的编码格式
设置客户端响应内容的头内容的文件类型及编码格式
response.setcharacterEncoding("utf-8");77设置响应编码格式为1utf-3
response.setHeader("Content-type","text/html;charset-UTF-8")
第二种(推荐):
同时设置服务端的编码格式和客户端响应的文件类型及响应时的编码格式
response. setContentType( "text/html;charset=UTF-8" );