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) 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
本文深入讲解Tomcat服务器的目录结构,发布项目的方式,以及Servlet的工作原理。包括Servlet的生命周期、配置方法、访问路径规则,HTTP协议解析,请求与响应处理,会话管理,JSP页面介绍,EL表达式应用等。
726

被折叠的 条评论
为什么被折叠?



