目录
Tomcat
Tomcat概念
是免费、开源的
是部署在web项目中,让用户通过浏览器来访问项目
接收用户的请求-->处理请求-->响应
常见的web服务器
webLogic:oracle公司,大型的JavaEE服务器,支持所有的JavaEE规范,收费
webSphere:IBM公司,大型的JavaEE服务器,支持所有的JavaEE规范,收费
JBOSS:JBOSS公司的,大型的JavaEE服务器,支持所有的JavaEE规范,收费
Tomcat:Apache基金组织,中小型的JavaEE服务器,仅仅支持少量的JavaEE规范servlet/jsp。开源,免费
Tomcat目录结构
bin 可执行文件
conf 配置文件
lib 运行所需的类库
logs 日志文件
temp 临时文件
webapps 项目目录
work jsp翻译为.java文件
动态项目的目录结构
WEB-INF目录
web.xml web项目的核心配置文件
classes目录 放置字节码文件的目录
lib目录 放置依赖的jar包
Servlet
Servlet概念
运行在服务器端的小程序
是一个接口,定义了java类被浏览器访问的规则
自定义类,复写Servlet接口方法
生命周期
创建:init 创建情况:默认在第一次被访问时 只执行一次
服务:service 每次访问时,都会调用一次service方法 可执行多次
销毁:destory 在servlet被销毁前执行,一般用于释放资源 只执行一次
体系结构
Servlet——接口
GenericServlet——抽象类:实现了Servlet接口,对大部分方法做了默认空实现,只保留了service方法为抽象方法,可通过继承,单独实现service,简化操作
HttpServlet——抽象类:对http协议的封装,复写了doGet/doPost方法 简化操作
urlpartten:Servlet访问路径
通过注解可实现一个servlet定义多个访问路径 是因为在底层是一个数组接收
Request & Response
request对象和response对象的原理
request和response对象是由服务器创建的
request对象是来获取请求消息,response对象是来设置响应消息
request功能
获取请求消息数据
获取请求行数据 getMethod()
获取虚拟目录 getContextPath()
获取Servlet路径 getServletPath()
获取get方式请求参数 getQueryString()
获取请求URI getRequestURI() 统一资源标识符 范围更广泛
获取URL getRequestURL() 统一资源定位符
获取请求头数据
获取请求头 getHeader(String name)
获取请求体数据
请求体 只在POST请求方式才存在,在请求体中封装了POST请求的请求参数
获取:1.先获取流对象 2.再从流对象中取数据
获取流对象:
BufferedReader getReader() 获取字符输入流
ServletInputStream getInputStream() 获取字节输入流
获取请求参数
根据参数名称获取参数值 getParameter(String name)
根据参数名称获取参数值的数组 getParameterValues(String name)
获取所有请求的参数名称 getParameterNames()
获取所有参数的map集合 getParameterMap()
请求方式 & 乱码问题
get方式:在tomcat8 已经将get方式的乱码问题解决
post方式:乱码问题仍然存在,所以在第一行 也就是在获取参数前需要设置编码
setCharacterEncoding("utf-8")
请求转发:一种在服务器内部的资源跳转方式
先通过request对象获取请求转发器对象
RequestDispatcher getRequestDispatcher(String path)
再使用RequestDispatcher对象来进行转发
forward(ServletRequest request, ServletResponse response)
特点:
浏览器地址栏路径不发生变化
只能转发到当前服务器内部资源中。
转发是一次请求
共享数据:在做转发之前设置
域对象:一个有作用范围的对象,可以在范围内共享数据
request域:代表一次请求的范围,一般用于请求转发的多个资源中共享数据
void setAttribute(String name,Object obj):存储数据
Object getAttitude(String name):通过键获取值
void removeAttribute(String name):通过键移除键值对
获取ServletContext:ServletContext getServletContext()
Response功能
设置响应消息
设置响应行
格式:HTTP/1.1 200 ok
设置状态码:setStatus(int sc)
设置响应头
setHeader(String name, String value)
设置响应头:先获取输出流 在使用输出流,将数据输出到客户端浏览器
获取输出流
PrintWriter getWriter() 字符输出流
ServletOutputStream getOutputStream() 字节输出流
重定向
概念:资源跳转的方式
重定向特点
地址栏发生变化
重定向可以访问其他站点(服务器)的资源
重定向是两次请求。不能使用request对象来共享数据
转发的特点
转发地址栏路径不变
转发只能访问当前服务器下的资源
转发是一次请求,可以使用request对象来共享数据
服务器输出字符数据到客户端浏览器
先获取字符输出流 在输出数据
问题:乱码
解决方案
由于 PrintWriter pw = response.getWriter();获取的流的默认编码是ISO-8859-1
所以先设置该流的编码格式,在告诉浏览器应该使用对应的编码
response.setContentType("text/html;charset=utf-8");
ServletContext对象
概念:代表整个web应用,可以和程序的容器(服务器)来通信
通过request对象获取
request.getServletContext();
通过HttpServlet获取
this.getServletContext();
获取MIME类型
MIME:在互联网通信过程中定义的一种文件数据类型
获取:String getMimeType(String file)
域对象
共享数据
setAttribute(String name,Object value)
getAttribute(String name)
removeAttribute(String name)ServletContext对象范围:所有用户所有请求的数据
获取文件的真实(服务器)路径
方法:String getRealPath(String path)