tomcat&servlet
一、网络通信三要素
1.ip:电子设备(计算机)在网络中的唯一标识
2.端口:应用程序在计算机中的唯一标识。(0~65536)
3.传输协议:规定了数据传输的规则
(1)基础协议
tcp:安全协议,三次握手,速度稍慢
udp:不安全协议,速度快
二、web服务器软件
1.服务器:安装了服务器软件的计算机
2.服务器软件:接收用户的请求,处理请求,做出响应
3.web服务器软件(web容器):接收用户的请求,处理请求,做出响应;在web服务器软件中,可以部署web项目,让用户通过浏览器访问这些项目
JavaEE:Java语言在企业级开发中使用的技术规范的总合
4.常见的web服务器软件
weblogic:Oracle公司,大型的javaee服务器,支持所有的javaee规范,收费的
webSphere:IBM公司,大型的javaee服务器,支持所有的javaee规范,收费的
JBOSS:jobss公司,大型的javaee服务器,支持所有的javaee规范,收费的
tomcat:Apache基金组织,中小型的Java服务器,开源的,免费的
三、tomcat
1.修改端口号:一般改为80,因为80为默认端口访问时可省略
2.部署项目方式
(1)直接将项目放到webapps目录下
/hello:项目的访问路径-->虚拟路径
简化部署:将项目打成war包,再将war包放置到webapps目录下,会自动解压,删除时删除war包其他文件也会自动删除
(2)配置conf/server.xml文件;在
(3)第二种方式不安全,改进在conf\Catalina\localhost创建任意名称的xml文件,在文件中编写:
(4)静态项目与动态项目
目录结构
java动态项目的目录结构:项目的根目录--WEB-INF目录--web.xml:web的核心配置文件;--classes目录:放置字节码文件的的目录;--lib目录:放置依赖的jar包
四、Servlet :server applet
1.概念:运行在服务器端的小程序
servlet就是一个接口,定义了Java类被浏览器访问到(tomcat识别)的规则
需要自定义一个类,实现servlet接口,复写方法
2.使用servlet
(1)2.创建javaEE项目
(2)定义一个类实现servlet接口
(3)实现接口中的 抽象方法
(4)配置Servlet,在web.xml中配置
(5)执行原理:
当服务器接收到客户端浏览器请求后,会解析URL路径,获取访问的Servlet的资源路径
查找web.xml文件,是否有对应的
如果有,则在找对应的
tomcat则将字节码文件加载进内存,并且创建其对象
调用方法
3.Servlet生命周期
(1)被创建:执行init方法,只执行一次(一般用于加载资源)
Servlet默认情况下,第一次访问时被创建;也可以指定创建时机 ;在
只执行一次,说明一个Servlet在内存中只存在一个对象,Servlet是单列的;多个用户同时访问时,可能存在线程安全问题;解决:尽量不要再Servlet中定义全局变量,即使定义了成员变量,不要对其修改值
(2)提供服务:执行service方法,执行多次
每次访问Servlet时,该方法都会被执行
(3)被销毁:执行destroy方法,只执行一次
Servlet被销毁时执行,服务器关闭时,Servlet被销毁
只有服务器正常关闭时,才会执行destroy
destroy方法在Servlet销毁前执行,一般用于释放资源
4.Servlet3.0注解配置
(1)好处
支持注解配置,可以不需要web.xml
(2)步骤
创建Java EE项目时,选择Servlet的版本在3.0以上,可以不创建web.xml
定义一个类,实现Servlet接口
复写方法
在类上使用@WebServlet注解进行配置
5.servlet的体系结构
GenericServlet:抽象类
HttpServlet:抽象类
GenericServlet:抽象类
将Servlet接口中其他的方法做了默认空实现,只将service()方法作为抽象类,继承时可以只实现service()方法
HttpServlet:对http协议的封装,简化操作
(1)定义类继承HttpServlet
(2)重写doGet/doPost方法
6.urlpartten:Servlet访问(@WebServlet("/demo3"))
(1)一个servlet可以定义多个访问路径@WebServlet({"/demo3","/d1","d2"})
(2)路径的定义规则:/xxx ;/xxx/xxx(多层路径) ;*.do :扩展名匹配 (*)通配符
五、IDEA与tomcat相关配置
1.idea会为每一个tomcat部署的项目单独建立一份部署
2.存储位置:工作空间项目和tomcat部署的web项目;
(1)tomcat真正访问的是"tomcat部署的web项目"对应着“工作空间项目”的web目录下的所有资源
(2)WEB-INF目录下的资源被浏览器不能直接访问
(3)断点调试,点击dubug
HTTP
一、概念:Hyper Text Transfer Protocol 超文本传输协议;
1.传输协议:定义了,客户端和服务端通信时,发送数据的格式
2.特点
(1)基于TCP/IP的高级协议
(2)默认端口号:80(http://www.baidu.cn:80)
(3)基于请求/响应模型的:一次请求对应一次响应
(4)无状态得到:每次请求之间相互独立,不能交互数据
二、请求消息数据格式
1.请求行
请求方式 请求url 请求协议/版本:GET /login.html HTTP/1.1
请求方式http有7种,常用的有2种
GET:请求参数在,url中 请求行中;请求的url长度是有限制的;不太安全
POST:请求参数在请求体中;请求的url没有长度;较为安全
2.请求头:客户端浏览器告诉服务器的一些信息
请求头名称:请求值
Host: localhost:8080
User-Agent:浏览器告诉服务器,使用的版本信息;可以在服务器端获取该头的信息,解决浏览器兼容问题
Request (URL):http://localhost:8080/servlet/login.html ;告诉服务器当前请求从哪里来,作用:防盗链; 统计工作
3.请求空行
空行,分隔作用(分割POST请求头和请求体)
4.请求体(正文):post有请求体,get没有请求体
封装POST请求信息的请求参数
三、Request(对应请求信息)
1.request对象和response对象的原理
request和response对象时由服务器创建的
request对象是来获取请求消息,response对象是来设置响应消息
2.request对象继承体系结构
(1)ServletRequest接口
(2)HttpServletRequest:为1的子接口
(3)由tomcat创建一个实现类
3.request对象获取请求消息
(1)获取请求消息数据
获取请求行:GET /day14/demo1?name=zhangsan HTTP/1.1
请求方式:GET:String getMethod()
(*)获取虚拟目录:/day14: Strig getContsxtPath()
获取Servlet路劲:/demo1:String getServletPath()
获取get方式请求参数:name=zhangsan:String getQueryString()
(*)获取请求的uri:/day14/demo1 :String getRequestURI():/day/demo1 ;StringBuffer getRequestURL() :http://localhost/day14/demo1
获取协议和版本号:HTTP/1.1:String getProtocol()
获取客户机的IP地址:String getRemoteAddr()
获取请求头数据
方法
(*)String getHeader(String name):通过请求头的名称获取请求头的值
Enumeration
打印信息显示在网页上
获取请求体数据*(只有post请求方式有请求体,在请求体中封装了POST请求的请求参数)
获取流对象
获取字符输入流:BufferedReader getReader();只能操作字符数据
ServletInputStream getInputStream()获取字节输入流,可以操作所有类型数据(文件上传)
再从流对象中拿数据
(2)其他功能
获取请求参数通用方式(get和post都可以使用)
String getParmenter (String name) :根据参数名称获取参数值 username=zhangsan&password=123
String[] getParmeterValues(String name):根据参数名称获取参数值的数组
Enumeration
Map
处理post乱码问题
请求转发:一种在服务器内部资源跳转的方式 forward
步骤
通过request对象获取请求转发器对象:RequestDispatcher getRequestDispatcher(String path)
使用RequestDispatcher对象进行转发:forward(ServletRequest request,ServletResponse response)
特点
浏览器地址栏路径没有发生变化
只能转发到当前服务器内部资源
转发是一次请求
共享数据
域对象:一个有作用范围的对象,可以在一定范围内共享数据
request域:代表一次请求的范围,一般用于请求转发多个资源中共享资源
方法
setAttribute(String name, Object obj):存储数据
Object getAttitude(String name):通过键获取值
removeAttribute(String name):通过键移除键值对
获取ServletContext
ServletContext getServletContext()
BeanUtils工具类,简化数据封装,用于封装JavaBean
JavaBean:标准类
类必须被public修饰
必须提供空参构造器
成员变量必须使用private修饰
提供getter和setter方法
作用:封装数据
概念
成员变量
属性:getter和setter方法截取后的产物
方法
setProperty()
getProperty()
populate(Object obj,Map map):将map集合的键值对信息,封装到对应的JavaBean对象中
四、响应消息格式
1.响应行
组成
协议/版本 响应状态码 状态码描述
响应状态码:服务器告诉客户端浏览器本次请求和相应的一个状态;(状态码都是3位数字)1xx~5xx 1xx:服务器接收客户端消息,但没有接收完成,等待一段时间后,发送1xx多状态码 2xx:成功,代表:200 3xx:重定向。代表:302(重定向)304(访问缓存) 4xx:客户端错误 。代表404(请求路径没有对应的资源) 405(请求方式没有对应的doxxx方法doget) 5xx:服务器错误 :服务器端错误。500(服务器内部错误)
2.响应头
格式:头名称:值
常见响应头
Content-type:服务器告诉客户端本次响应体数据格式以及编码格式
Content-disposition:服务器告诉客户端以什么样的格式打开响应体信息;值:in-line(默认值,在当前页面内打开) attachment:以附件形式打开响应体,文件下载
3.响应空行
4.响应体
传输的数据
五、response对象
1.功能:设置响应消息
(1)设置响应行
格式:HTTP/1.1 200 ok
设置状态码:setStatus(int sc)
简单的重定向方法:response.sedRedirect("虚拟路径");
重定向特点:redirect
地址栏发生变化
重定向可以访问其他站点(服务器)的资源
重定向是两次访问,不能使用request共享数据
路径写法
相对路径:通过相对路径不可以确定唯一资源,不以斜杠开头,以.开头路径 规则:找到访问当前资源和目标资源相对位置的关系
绝对路径:通过绝对路径确定唯一资源;以斜杠开头的路径 规则:判断定义的路径是给谁用的(客户端需要加虚拟目录,建议动态获取点击注册/给服务器使用不需要加虚拟目录转发)
(2)设置响应头:setHeader(String name,String value)
(3)设置响应体:
使用步骤
获取输出流
字节输出流:ServletOutputStream getOutputStream() ; 指定字符集
字符输出流:PrintWrite getWriter() ;指定字符集
验证码
目的:防止恶意注册
使用输出流,将服务器数据输出到客户端浏览器
六、ServletContext对象
1.概念:代表整个web应用,可以和程序的容器(服务器)来通信
2.功能
(1)获取MIME类型:在互联网通信过程中定义的一种文件类型
MIME格式:大类性/小类型 text/heml image/jpeg
获取:String getMimeType(String file)
(2)域对象:共享数据(范围:共享所有的用户数据)
setAttribute(String name,Object value)
getAttribute(String name)
removeAttribute(String name)
(3)获取文件的真实(服务器)路径
String getRealPath(String path)
3.获取
(1)通拓request对象获取:request.getServletContext()
(2)HttpServlet获取:this.getServletContext();
七.文件下载
1.默认情况下超链接指向的资源能被浏览器解析会直接打开,不能被解析则会弹出下载框
2.任何情况下都必须弹出下载框,使用响应头设置打开方式:content-disposition:attachment;filename=xxx(文件名称)
步骤
定义页面,编辑超链接herf属性,指向Servlet,传递资源的名称filename
定义Servlet
获取文件名称
使用字节输入流加载文件进内存
指定response的响应头content-disposition:attachment;filename=xxx(文件名称)
将数据写入到response输出流
3.中文文件名
处理方式
获取客户端使用的浏览器版本信息
根据不同的版本信息,相应不同的数据,设置filename的编码方式
HTTP
一、概念:Hyper Text Transfer Protocol 超文本传输协议;
1.传输协议:定义了,客户端和服务端通信时,发送数据的格式
2.特点
(1)基于TCP/IP的高级协议
(2)默认端口号:80(http://www.baidu.cn:80)
(3)基于请求/响应模型的:一次请求对应一次响应
(4)无状态得到:每次请求之间相互独立,不能交互数据
二、请求消息数据格式
1.请求行
请求方式 请求url 请求协议/版本:GET /login.html HTTP/1.1
请求方式http有7种,常用的有2种
GET:请求参数在,url中 请求行中;请求的url长度是有限制的;不太安全
POST:请求参数在请求体中;请求的url没有长度;较为安全
2.请求头:客户端浏览器告诉服务器的一些信息
请求头名称:请求值
Host: localhost:8080
User-Agent:浏览器告诉服务器,使用的版本信息;可以在服务器端获取该头的信息,解决浏览器兼容问题
Request (URL):http://localhost:8080/servlet/login.html ;告诉服务器当前请求从哪里来,作用:防盗链; 统计工作
3.请求空行
空行,分隔作用(分割POST请求头和请求体)
4.请求体(正文):post有请求体,get没有请求体
封装POST请求信息的请求参数
三、Request(对应请求信息)
1.request对象和response对象的原理
request和response对象时由服务器创建的
request对象是来获取请求消息,response对象是来设置响应消息
2.request对象继承体系结构
(1)ServletRequest接口
(2)HttpServletRequest:为1的子接口
(3)由tomcat创建一个实现类
3.request对象获取请求消息
(1)获取请求消息数据
获取请求行:GET /day14/demo1?name=zhangsan HTTP/1.1
请求方式:GET:String getMethod()
(*)获取虚拟目录:/day14: Strig getContsxtPath()
获取Servlet路劲:/demo1:String getServletPath()
获取get方式请求参数:name=zhangsan:String getQueryString()
(*)获取请求的uri:/day14/demo1 :String getRequestURI():/day/demo1 ;StringBuffer getRequestURL() :http://localhost/day14/demo1
获取协议和版本号:HTTP/1.1:String getProtocol()
获取客户机的IP地址:String getRemoteAddr()
获取请求头数据
方法
(*)String getHeader(String name):通过请求头的名称获取请求头的值
Enumeration
打印信息显示在网页上
获取请求体数据*(只有post请求方式有请求体,在请求体中封装了POST请求的请求参数)
获取流对象
获取字符输入流:BufferedReader getReader();只能操作字符数据
ServletInputStream getInputStream()获取字节输入流,可以操作所有类型数据(文件上传)
再从流对象中拿数据
(2)其他功能
获取请求参数通用方式(get和post都可以使用)
String getParmenter (String name) :根据参数名称获取参数值 username=zhangsan&password=123
String[] getParmeterValues(String name):根据参数名称获取参数值的数组
Enumeration
Map
处理post乱码问题
请求转发:一种在服务器内部资源跳转的方式 forward
步骤
通过request对象获取请求转发器对象:RequestDispatcher getRequestDispatcher(String path)
使用RequestDispatcher对象进行转发:forward(ServletRequest request,ServletResponse response)
特点
浏览器地址栏路径没有发生变化
只能转发到当前服务器内部资源
转发是一次请求
共享数据
域对象:一个有作用范围的对象,可以在一定范围内共享数据
request域:代表一次请求的范围,一般用于请求转发多个资源中共享资源
方法
setAttribute(String name, Object obj):存储数据
Object getAttitude(String name):通过键获取值
removeAttribute(String name):通过键移除键值对
获取ServletContext
ServletContext getServletContext()
BeanUtils工具类,简化数据封装,用于封装JavaBean
JavaBean:标准类
类必须被public修饰
必须提供空参构造器
成员变量必须使用private修饰
提供getter和setter方法
作用:封装数据
概念
成员变量
属性:getter和setter方法截取后的产物
方法
setProperty()
getProperty()
populate(Object obj,Map map):将map集合的键值对信息,封装到对应的JavaBean对象中
四、响应消息格式
1.响应行
组成
协议/版本 响应状态码 状态码描述
响应状态码:服务器告诉客户端浏览器本次请求和相应的一个状态;(状态码都是3位数字)1xx~5xx 1xx:服务器接收客户端消息,但没有接收完成,等待一段时间后,发送1xx多状态码 2xx:成功,代表:200 3xx:重定向。代表:302(重定向)304(访问缓存) 4xx:客户端错误 。代表404(请求路径没有对应的资源) 405(请求方式没有对应的doxxx方法doget) 5xx:服务器错误 :服务器端错误。500(服务器内部错误)
2.响应头
格式:头名称:值
常见响应头
Content-type:服务器告诉客户端本次响应体数据格式以及编码格式
Content-disposition:服务器告诉客户端以什么样的格式打开响应体信息;值:in-line(默认值,在当前页面内打开) attachment:以附件形式打开响应体,文件下载
3.响应空行
4.响应体
传输的数据
五、response对象
1.功能:设置响应消息
(1)设置响应行
格式:HTTP/1.1 200 ok
设置状态码:setStatus(int sc)
简单的重定向方法:response.sedRedirect("虚拟路径");
重定向特点:redirect
地址栏发生变化
重定向可以访问其他站点(服务器)的资源
重定向是两次访问,不能使用request共享数据
路径写法
相对路径:通过相对路径不可以确定唯一资源,不以斜杠开头,以.开头路径 规则:找到访问当前资源和目标资源相对位置的关系
绝对路径:通过绝对路径确定唯一资源;以斜杠开头的路径 规则:判断定义的路径是给谁用的(客户端需要加虚拟目录,建议动态获取点击注册/给服务器使用不需要加虚拟目录转发)
(2)设置响应头:setHeader(String name,String value)
(3)设置响应体:
使用步骤
获取输出流
字节输出流:ServletOutputStream getOutputStream() ; 指定字符集
字符输出流:PrintWrite getWriter() ;指定字符集
验证码
目的:防止恶意注册
使用输出流,将服务器数据输出到客户端浏览器
六、ServletContext对象
1.概念:代表整个web应用,可以和程序的容器(服务器)来通信
2.功能
(1)获取MIME类型:在互联网通信过程中定义的一种文件类型
MIME格式:大类性/小类型 text/heml image/jpeg
获取:String getMimeType(String file)
(2)域对象:共享数据(范围:共享所有的用户数据)
setAttribute(String name,Object value)
getAttribute(String name)
removeAttribute(String name)
(3)获取文件的真实(服务器)路径
String getRealPath(String path)
3.获取
(1)通拓request对象获取:request.getServletContext()
(2)HttpServlet获取:this.getServletContext();
七.文件下载
1.默认情况下超链接指向的资源能被浏览器解析会直接打开,不能被解析则会弹出下载框
2.任何情况下都必须弹出下载框,使用响应头设置打开方式:content-disposition:attachment;filename=xxx(文件名称)
步骤
定义页面,编辑超链接herf属性,指向Servlet,传递资源的名称filename
定义Servlet
获取文件名称
使用字节输入流加载文件进内存
指定response的响应头content-disposition:attachment;filename=xxx(文件名称)
将数据写入到response输出流
3.中文文件名
处理方式
获取客户端使用的浏览器版本信息
根据不同的版本信息,相应不同的数据,设置filename的编码方式