tomcat服务器
1. 目录结构
bin:
二进制可执行文件存放的目录conf:
配置文件存放的目录webapps:
项目发布目录work:
工作目录log:
日志文件存放目录
2. tomcat发布项目的三种方式
- 直接将web项目丢到
webapps
下 web war 项目名称就是访问项目的虚拟目录/web
- 修改
conf/server.xml
添加一个虚拟目录<Context path="" docBase="" /> <Context path="" docBase="" />
- 在
/conf/Catalina/localhost
目录下创建一个xml文件,xml文件的名称就是虚拟目录<?xml version="1.0" encoding="UTF-8"?> <Context docBase="" />
Servlet : 一个java小程序 web程序的入口
1. 创建Servlet
- 创建一个类实现Servlet接口
- 实现其中的方法
简化方案: 创建一个类继承 HttpServlet 类,重写 doGet/doPostservcie(ServletReuqest request,ServletResponse response) servcie(ServletReuqest request,ServletResponse response) inti() destroy()
2. 配置Servlet HelloServlet
- xml配置
<servlet> <serlvet-name>HelloServlet</servlet-name> <servlet-class>com.itheima.servlet.HelloServlet</servlet-class> </servlet> <servlet-mapping> <serlvet-name>HelloServlet</servlet-name> <url-parttern>/helo</url-parttern> </servlet-mapping>
2. 注解配置
@WebServlet
替换web.xml中servlet的配置value
配置访问路径urlPatterns
配置访问路径
3. servlet访问路径的配置
- 完全匹配
/*
访问路径 和servlet的url-parttern配置完全一致的情况
url:http://localhost:8080/web/hello
url-parttern :/hello
- 目录匹配
/* /hello/*
访问路径 和servlet的url-parttern配置匹配一部分
url:http://localhost:8080/web/hello/abc
url-parttern :/hello/*
- 扩展名匹配
*.html
访问路径的扩展名 和servlet的url-parttern配置匹配一部分
url:http: /localhost:8080/web/hello.html
url-parttern :*.html
4. Servlet细节
-
生命周期
- 创建 : 默认用户第一次访问servlet的时候会创建servlet对象,执行其中
init()
方法完成初始化操作 执行一次 - 运行 : 每一次的用户请求都会执行其中的
service()
方法 - 销毁 : 服务器关闭或者项目被移除了,销毁servlet 执行
destroy()
方法,执行一次
- 创建 : 默认用户第一次访问servlet的时候会创建servlet对象,执行其中
-
servlet体系结构
- Servlet接口
- GenericServlet 类
- HttpServlet 类
HTTP协议 : 规定了浏览器和服务器交互的数据格式
1. 请求
- 请求行 : 请求方式 请求路径 协议版本
- 请求头 :
key
:value1,value2
referer
: 请求的来源
User-Agent
: 客户机信息 - 请求体 :
GET请求没有请求体,POST请求的参数 username=zs&password=123
2. 响应
-
响应行 : 协议 状态码 状态吗描述
200:
请求成功
302:
重定向
304:
查找本地缓存
404:
请求路径错误
405:
请求方式不被允许
500:
服务器内部异常 -
响应头 :
key
:value1,value2
Content-type
: 响应内容的数据格式
Content-disposition
: attachment;filename=xxx 以附件的形式打开响应
location
: 指定重定向的地址 -
响应体 : 输出的数据
3. HttpServletRequest对象
请求发送到服务器之后,由服务器创建的对象,封装的是http协议的请求信息
-
获取请求消息数据
String method = request.getMethod(); //get/post String requestURI = request.getRequestURI(); // /web10/user StringBuffer requestURL = request.getRequestURL(); //http://localhost:8080/web10/user String header = request.getHeader("User-Agent");// 客户机信息
-
获取请求参数数据
//获取请求参数 String username = request.getParameter("username"); //zs String[] hobbies = request.getParameterValues("hobby"); //[play,sleep] //获取所有的请求参数 Map<String, String[]> map = request.getParameterMap(); //{username:[zs],hobby:[play,sleep]}
-
作为域对象存取数据 : 一次请求范围
//作为域对象存取数据 request.setAttribute("username","zs"); String un = (String) request.getAttribute("username"); request.removeAttribute("username");
-
实现页面跳转 转发
//1. 获取请求转发器 RequestDispatcher dispatcher = request.getRequestDispatcher("/login.jsp"); //2. 转发 dispatcher.forward(request,response); //链式编程~~ request.getRequestDispatcher("/login.jsp").forward(request,response);
-
获取SerlvetContext对象
//获取SerlvetContext对象 ServletContext servletContext = request.getServletContext();
4. HttpServletResponse对象
请求发送到服务器之后,由服务器创建的对象,封装的是http协议的响应信息
- 设置响应消息数据
//解决中文乱码问题 response.setContentType("text/html;charset=utf-8"); //设置响应状态吗 response.setStatus(200); //设置响应头信息 response.setHeader("Content-Type","text/html;charset=utf-8"); //设置响应体信息 : 字节流和字符流不能同时进行使用 //字符流设置 response.getWriter().write("hello"); //字节流设置 response.getOutputStream().write("hello".getBytes("UTF-8"));
- 页面跳转
// 重定向: 如果request携带数据进行跳转,那么不能使用重定向只能页面转发 //重定向的本质 response.setStatus(302); response.setHeader("location",request.getContextPath()+"/login.jsp"); //重定向的简化方案 response.sendRedirect(request.getContextPath()+"/login.jsp");
- 文件下载 : 设置一个流 二个头
- 目标资源文件的输入流
- 设置
Content-Type:
类型 - 设置
Content-Disposition:
打开方式
5. SerlvetContext对象
-
获取SerlvetContext对象
//获取SerlvetContext对象 ServletContext servletContext = request.getServletContext(); ServletContext servletContext = this.getServletContext();
-
获取文件的类型
String mimeType = sc.getMimeType("aaa.txt");
-
读取web项目下的资源文件
//获取文件的磁盘路径 String realPath = sc.getRealPath("/bb.txt"); //web目录下 String realPath1 = sc.getRealPath("/WEB-INF/bb.txt"); //WEB-INF目录下 String realPath2 = sc.getRealPath("/WEB-INF/classes/bb.txt"); //直接读取文件到内存 InputStream is = sc.getResourceAsStream("/WEB-INF/classes/bb.txt");
-
作为域对象存取数据 : 整个web项目
//作为域对象存取数据 sc.setAttribute("username","zs"); String un = (String) sc.getAttribute("username"); sc.removeAttribute("username");
6. Cookie : 客户端会话技术 保存少量不敏感数据在客户端
- 创建Cookie
Cookie cookie = new Cookie(String name,String value)
- 向客户端写Cookie
response.addCookie(cookie)
- 获取客户端发送到服务器的所有的Cookie
Cookie[] cookies = request.getCookies()
- Cookie细节
- 浏览器可以存储多个cookie
- cookie的存储时间
- 默认浏览器关闭cookie销毁
- 设置cookie持久化到硬盘 setMagAge(int second)
正数:
持久化的时间负数:
默认值,浏览器关闭cookie销毁0:
删除cookie
- 设置cookie的访问路径
cookie.setPath(String path)
- 设置cookie的有效域名
cookie.setDomain("baidu.com")
- 记住用户上次访问时间
7. Session : 服务器会话技术
可以保存大量的任意类型的的数据到服务器
- 作用范围: 一次会话,多次请求(每一个客户端都会有自己的session区域)
- 获取session
//获取session HttpSession session = request.getSession();
- 操作session
//作为域对象存取数据 session.setAttribute("username","zs"); String un = (String) session.getAttribute("username"); session.removeAttribute("username");
- session细节
- 服务器不关闭,客户端关闭,二次获取的session是否是同一个 不是
- 服务器关闭,客户端不关闭,二次获取的session是否是同一个 不是 数据有可能是同一份(正常关闭服务器)
- session过期
- 服务器非正常关闭
- 调用session的
session.invalidate()
; - session过期(30分钟)
8. JSP : java服务器页面 HTML+java代码+JSP本身
- JSP指令: <%@page %>, <%@include %>, <%@taglib %>
- 脚本标签: <% %>, <%! %>, <%= %>
- JSP注释:<%-- --%>
- 内置对象:
对象 <=======>真实类型pageContext
<=======> PageContextrequest
<=======> HttpServletRequestsession
<=======> HttpSessionapplication
<=======> ServletContext- response <=======> HttpServletResponse
- out <=======> JspWiter
- page <=======> Object
config
<=======> ServletConfig- exception <=======> Throwable
9、EL表达式
-
执行运算符
- 算术运算符:+,-,*,/,%
- 比较运算符:>,<,>=,<=,!=,==
- 逻辑运算符:&&,||,!
- 三元运算符 :3>4?“false”:true
-
.获取数据 获取四个域中的数据
${域范围.键}
:从指定域中获取数据${键}
:从四个域中从小到达依次查找,找到返回pageContext
,request
,session
,application