## 软件架构
* C/S:客户端与服务器端
* B/S:浏览器与服务器端
## web 资源
* 静态资源
* HTML;,css..
* 动态资源
* PHP.ASP.Servlet/JSP
## 服务器
* Apache ---PHP
* IIS ----ASP
* websphere--- JAVA IBM 支持ee全部规范
* webLogic----- Java BEA 支持ee全部规范
* JBoss------
* TOMCAT------ 支持Servlet/JSP的开发规范
### WEB 动态资源目录结构
* website (站点)
* 静态资源
* WEB-INF(必须)
* web.xml(必须)
* classes(可选(编译后的java类))
* lib(可选(jar包))
## Tomcat目录结构
* bin :tomcat的执行的文件.
* conf :tomcat的配置文件.
* lib :tomcat运行的需要的jar包.
* logs :tomcat的运行的日志文件.
* temp :tomcat产生临时文件存放的路径.
* webapps :tomcat发布的web项目的路径.
* work :tomcat运行JSP的时候,JSP翻译成Servlet的代码存放的路径.
### 将一个web项目过程发布到Tomcat的三种方式
* 直接将工程拷贝到Tomcat/webapps下
* 将工程复制到webapps即可
* 配置Tomcat虚拟路径
* 在tomcat/conf/server.xml文件中进行配置:
* 在<Host>标签下配置:
* <Context path="/itheima" docBase="C:/website"/>
* 配置Tomcat虚拟路径(推荐)
* 在tomcat/conf/Catalina/localhost/xxx.xml
* 配置<Context docBase="C:/website"/>
* xxx作为虚拟路径的名称.
* 在conf/Catalina/localhost/xxx.xml 配置<Context docBase=””/>
### HTTP协议
* 用于规定浏览器与服务器之间的访问规则
* 特点(基于请求和响应的模型)
* 必须现有请求后又响应
* 请求和响应必须成对出现
* 默认端口 80
* HTTP版本
* 1.0 每次响应后即可关闭连接
* 1.1 (现在使用的版本)不是每次响应之后挂断,等待长时间没有请求会自动挂断
* 请求部分
* 请求行
* 提交方式(GET和POST)
* GET的提交的参数会显示到地址栏上,而POST不显示.
* GET往往是有大小限制的,而POST没有大小的限制.
* GET没有请求体,而POST有请求体.
* 请求头
* 都是键值对形式显示,一般一个key对应一个value也有一个key对应多个value
* User-Agent :代表浏览器的类型
* 作用 解决文件下载乱码问题
* 文件下载:下载中文文件:IE使用URLEncodor进行编码,而Firefox使用Base64编码.
* Referer :代表的是网页的来源
* 作用 防盗链
* IF-Modified-Since :通常与响应中的头Last-Modified一起使用查找本地缓存.
* 请求体
* 就是POST提交方式的提交的参数.
* 响应部分
* 响应行
* 协议版本
* 状态码
* 200 302 304 404 500
* 成功 重定向 查找本地缓存 资源不存在 服务内部错误
* 响应头 键值对一般一个key对应一个value,也有一个key对应多个value.
* Last-Modified :与请求中的If-Modified-Since一起使用查找本地缓存.
* Content-Dispostion :文件下载的使用使用的一个头信息
* Location :重定向的跳转的路径.
* ** Refresh :定时刷新/定时跳转. **
* 响应体 显示浏览器的页面内容
## Servlet
* 概述
* 运行在web服务器上的一个java程序,用于接收和响应客户端的请求,通常使用HTTP协议
* Servlet是SUN公司的提供的一个动态网页开发技术
* 作用
* 用于接收和响应客户端的请求
* 使用
* 编写一个类实现Servlet
* 将实现类配置到web服务器中
* 配置
```
<!-- servlet 配置 -->
<servlet>
<!-- Servlet的名称 -->
<servlet-name>servlet</servlet-name>
<!-- SErvlet的全路径 -->
<servlet-class>com.itheima.servet.ServletDemo1</servlet-class>
</servlet>
<!-- Servlet的映射 -->
<servlet-mapping>
<!-- Servlet的名称 与sevlet配置中的name标签值一致 -->
<servlet-name>servlet</servlet-name>
<!-- Servlet的访问路径 -->
<url-pattern>ServletDemo1</url-pattern>
</servlet-mapping>
```
### 使用ServletRequest接收参数
* String getParameter(String name) --用于接收一个名称对应一个值的数据.
* String[] getParameterValues(String name) --用于接收一个名称对应多个值的数据
* Map getParameterMap() --用于接收表单中的所有的数据,Map的key是表单提交的参数名称,Map的value是提交参数的值.
* Enumeration getParameterNames() ---用于获取表单中提交的所有的参数的名称.
### Servlet的实现关系
* servlet(接口)----GenericServlet(实现servlet,通用的servlet与协议无关)-----HttpServlet(继承GenericServlet 使用Http协议)
* HttpServlt使用方式
* 定义一个类继承HttpServlet 重写doGET和doPOST方法
* 在web.xml中配置(和上面的配置一样)
## Servlet生命周期
* 生命周期:对象从创建到销毁的过程
* servlet生命周期
* Servlet在内存中只只加载一次由init()方法初始化(在用户第一次请求Servlet)当客户端任何一次请求都会创建一个新的线程访问service方法,service根据请求的方式的不同调用doGet/doPost方法当servlet中服务器中移除,或者关闭服务器时,servlet被销毁,destroy方法执行
## Servlet的相关配置
* 启动时创建Servlet(默认是在第一次访问时被创建 现在让Servlet在服务器启动的时候创建好.进行对Servlet的配置)
* 在web.xml中在`<servlet></servlet>`标签中配置
* ` <load-on-startup>2</load-on-startup>` --- 传入正整数,整数越小,被创建的优先级就越高.
* 不能写1 Tomcat默认使用
* 配置该标签后在启动服务器时就会创建有该标签的servlet
* url-pattern的配置
* url-pattern配置方式共有三种:
* 完全路径匹配 : 以`/` 开始 例如:`/ServletDemo4 , /aaa/ServletDemo5 , /aaa/bbb/ServletDemo6`
* 目录匹配 : 以`/` 开始 需要以 * 结束. 例如: `/* ,/aaa/* ,/aaa/bbb/*`
* 扩展匹配 :不能以`/` 开始 以`*`开始。例如: `*.do , *.action ` ** 注意 错误的写法: /*.do **
* **优先级 **
* ** 完全路径匹配 > 目录匹配 > 扩展名匹配 **
## Http response设置响应头
* addHeader(String name,String value); --- 针对一个key对应多个value的响应头.
* addDateHeader(String name,long date);
* addIntHeader(String name,int value);
* setHeader(String name,String value); --- 针对一个key对应一个value的响应头.
* setDateHeader(String name,long date);
* setIntHeader(String name,int value);
### 解决 response 向页面跳转的中文乱码问题
* 该方式只能应用于字符流
* ** response.setContentType("text/html;charset=UTF-8"); **
### response 设置响应头 跳转刷新
* ** response.setHeader("Refresh", "5;url=/web_02/login/index.html"); **
* 参数
* Refresh 设置响应头自动刷新
* "5;url=/web_02/login/index.html" 固定格式 5秒后跳转该页面
## ServleContext 域对象
* ** ServleContext 对象主要用于存储数据 存的数据有一定的作用范围,该对象被称为域对象 **
* 作用
* 用来获得全局初始化参数
* 用来获得文件的MIME的类型
* ** 作为域对象存取数据 **
* ** 作用范围: 整个web工程 **
* ** 创建:服务器启动时Tomcat服务器会为每个web项目创建一个单独的ServletContext对象 **
* ** 销毁:服务器关闭的时候,或者项目从服务器中移除的时候. **
* ** 用于读取web项目下的文件 **
### 常用方法
* ** 存取数据 **
* setAttribute(String name,Object object)
* 用来向ServletContext中存入数据.
* getAttribute(String name)
* 用来从ServletContext中获取数据.
* removeAttribute(String name)
* 用来从ServletContext中移除数据.
* ** 用法 要用servletCount存取数据必须先在init方法中初始化 **
* 在一个HttpServlet的子类中的init初始化方方法中
* int count =0; this.getServletContext().setAttribute("count", count);
* 在需要的servlet的类中调用
* int count = (int) this.getServletContext().getAttribute("count");
* ** 读取文件 **
* InputStream getResourceAsStream(String path);
* 根据给定的文件路径获取一个文件输入流
* 该方法获取文件路径写法(**/WEB-INF/classes/db.properties **)
* ** 也可以用之前类的反射类的加载器获取输入流 **
* ReadFileServlet.class.getClassLoader().getResourceAsStream("db.properties");
* String getRealPath(String path);
* 返回一个路径的磁盘绝对路径
* 用法 servletContext.getRealPath("/WEB-INF/classes/db.properties");
* ** 读取全局变量 **
* String geInitParameter(String name)
* 根据指定的属性名称获取全局属性的值
* Enumeration getInitParameterNames()
* 获取全部的属性获取全部的全局属性名
* ** 获取文件的MIME的类型 **
* String getMimeType(String file)
## ServletCofig 获得Servlet的配置信息
* String getServletName() --获取Servlet在web.xml中配置的name的值
* String getInitParameter(String name); ---获得Servlet的初始化参数的.
* Enumeration getInitParameterNames(); ---获得所有Servlet的初始化参数的名称. |
|