Http协议
** B/S**
Servlet
Servlet编写
案例:
public class Servlet1 extends HttpServlet {
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter pw = response.getWriter();
pw.append("<h1>我们的第一个servlet</h1>");
}
}
xml中配置Servlet
步骤:
1. 将Servlet 配置到web.xml中, 并起别名
<servlet>
<servlet-name>别名</servlet-name>
<servlet-class>类的全称(包名.类名)</servlet-class>
</servlet>
2. 使用Servlet别名, 映射一个或多个网址
<servlet-mapping>
<servlet-name>别名</servlet-name>
<url-pattern>/映射地址</url-pattern>
</servlet-mapping>
.....
<servlet-mapping>
<servlet-name>别名</servlet-name>
<url-pattern>/映射地址2</url-pattern>
</servlet-mapping>
映射完毕后, 访问此servlet的方式:
http://ip地址:端口号/项目名/映射地址
案例:
<servlet>
<servlet-name>s1</servlet-name>
<servlet-class>cn.xdl.demo.Servlet1</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>s1</servlet-name>
<url-pattern>/666.php</url-pattern>
</servlet-mapping>
Servlet生命周期
生命周期 在Servlet中, 存在三个方法的体现:
- init方法 : 当此方法被调用时, 表示对象已创建, 且初始化完成! 我们常在此方法中初始化 一些资源 !
- service方法 : 当被调用时, 表示来了一个客户端的请求, 此方法每次都执行在一个新的线程中 !
- destroy方法: 当此方法被调用时,表示Servlet即将被销毁 ! 我们常在此方法中 释放资源 !
乱码问题
请求时乱码
方式一:可适用于所有问题 引起的乱码
原理: 将乱码的文字, 重新变为字节数组, 再按照我们支持的编码重新组装 !
步骤1. 将接收到的文字, 按照ISO-8859-1编码打碎成字节数组
byte[] b = 乱码文字.getBytes("ISO-8859-1");
步骤2. 将打碎后的字节数组, 按照UTF-8组装
String text = new String(b,"UTF-8");
简化: String text = new String(乱码文字.getBytes("ISO-8859-1"),"UTF-8");
方式二: 只能解决POST乱码问题, 用于在获取数据之前, 设置请求体的编码格式
request.setCharacterEncoding("UTF-8");
响应时乱码
在处理响应时数据时, 无论时get/post请求, 方式都一致 ! 一定要在获取输出流之前!
方式一:
设置网页内容类型 , 并设置网页编码 , 不建议使用
response.setContentType("text/html;charset=utf-8");
方式二:
设置文字编码为UTF-8
response.setCharacterEncoding("UTF-8");
请求转发和重定向
Cookie和Session
Cookie
常用方法:
如何将Cookie设置到响应的消息头:
response.addCookie(Cookie cookie);
如何从请求的消息头中获取Cookie:
因为服务器可以给浏览器多个Cookie, 所以得到的是一个Cookie数组
Cookie[] cookies = request.getCookies();
Session
常用方法:
(session是JSP四大域对象之一)
- 设置属性: setAttribute(String key,Object value);
- 获取属性: Object value = getAttribute(String key);
- 删除属性: removeAttribute(String key);
- 销毁Session: invalidate();
设置Session存活时长:
方式一: 修改所有的session默认时长
修改tomcat目录下的conf文件夹下的 web.xml
<session-config>
<session-timeout>数字类型: 分钟</session-timeout>
</session-config>
方式二:修改单个session存活时长:
使用session对象, 调用setMaxInactiveInterval(int 秒);
JSP
JSP即是Java Server Pages的简称
JSP三大指令
page指令
用来快速的描述JSP页面的信息, 用来对JSP页面进行配置:
常用属性:
<%@page language=“script language”|-- 语言 ,一般为java
extends=“className” |--可以指定JSP在生成Java文件时, 文件所继承的Java类
*import=“importList” |--导包列表 ,可以在参数中导入多个包, 多个包之间使用逗号隔开
buffer=“none|kb size”| --none:不缓冲,默认8k
session=“true|false” | --是否可以使用session,默认true
autoFlush=“true|false” --缓冲器是否自动清除,默认true
isThreadSafe=“true|false”|--当前JSP代码执行区是否为线程安全的
*errorPage=“errorPageUrl” |--指定产生错误后, 处理错误的页面
*isErrorPage=“true|false” |--表示当前页面是否为处理错误的页面
contentType=“contentTyepInfo”|--描述网页的内容类型 和 编码格式
%>
导包案例:
<%@page import="java.util.HashMap,java.util.ArrayList" %>
错误页面处理:
在产生错误的页面中加入page指令, errorPage属性中指定错误处理页面
在错误处理的jsp文件中, 指定isErrorPage为true , 可以直接操作一个叫做exception的对象
在操作exception时, 注意有可能为null(当用户直接访问错误页面时)
处理项目中的错误码
使用上述的page指令, 无法处理404错误, 只有当程序出现BUG时, 才可以处理异常 !
想要处理404异常, 需要告知tomcat , 当在本项目中用户访问出现404以后, 跳转到指定页面:
**在项目的web.xml中添加如下节点: **
<error-page>
<error-code>404</error-code>
<location>/error.jsp</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/error.jsp</location>
</error-page>
include指令
用来在一个JSP文件中, 引入另一个JSP程序 或 HTML文件 !
格式:
<%@include file="文件路径" %>
JSP文件 在引擎转换时, 会将引入的文件代码复制粘贴到include指令的位置, 然后统一进行转换与编译操作(转换为一个Java文件)!
include动作
用于在一个JSP文件中, 引入另一个JSP程序 或 HTML文件 !
格式:
<jsp:include page="文件地址" flush="true"/>
include动作引入的JSP文件 , 在转换为.java的时候, 是单独转换的 ,只有在代码执行到include动作时, 才会编译被引入的文件, 动态载入!
taglib指令
JSP内置对象
隐含对象 | 类型 | 作用 |
---|---|---|
out | JSPWriter | 用来向客户端进行字符的响应 |
request | HttpServletRequest | 请求对象, 包含Http协议中请求数据 |
response | HttpServletResponse | 响应对象 |
session | HttpSession | 会话对象, 用来在一次会话中对单个用户 进行数据的共享与会话的跟踪 |
application | ServletContext | Servlet上下文 , 每个应用在启动时会创建且只创建一个对象, 在应用关闭时,对象被释放. 用来在当前项目中Servlet之间进行数据的共享与通信 |
pageContext | PageContext | 页面的上下文, 用于在当前页面进行数据的共享 , 在设计9大内置对象时, 将所有其他内置对象封装在了PageContext中 |
config | ServletConfig | 配置对象 |
page | Object | 当前页面本身 |
exception | Throwable | 当page指令中 isErrorPage为true时 才会产生此对象 , 用于收集其他页面产生的异常信息 |
四大域对象
EL和JSTL
Filter&Listener组件
在web.xml文件中配置Filter组件和Servlet配置基本一致
不使用注解在web.xml中配置Listener
<listener >
<listener-class>包名 + 类名</listener-class>
</listener>
AJAX
AJAX优点
作用:(1)异步请求和响应处理(2)页面局部刷新处理
优点:
- 减少页面整体刷新,提升用户体验(局部刷新)
- 减少交互的数据量,提升程序性能
- 以异步模式处理请求,较少用户操作等待时间,增 强了用户的操作连续性(异步交互)
AJAX技术应用步骤
-
创建XMLHttpRequest对象
-
调用open方法,创建请求
-
设定onreadystatechange事件函数,用于 响应处理
-
调用send方法发送请求
// 发送请求之前的准备 对象.open(请求方式,请求路径,是否异步) 如 xhr.open('get','getDate.do',true); // 注册请求处理函数 xhr.onreadystatechange=function(){ // 请求响应完成 并且 http 状态 是 200 if(xhr.readyState == 4 && xhr.status==200){ // 获取请求响应的数据 var text = xhr.responseText; } }; // 发送请求 xhr.send(null);
AJAX+Json应用
Json
- JSON (JavaScript Object Notation)是 JavaScript语言中的一种对象类型。
- JSON的好处是易于阅读和JavaScript解析
- 当客户端和服务器端交互大量数据时,使用JSON 格式传输可以简化客户端和服务器端的编程
Jquery和AJAX
jQuery对ajax请求的创建、发送和响应都进 行了相应的封装,同时也考虑 了浏览器的兼容性问题
$.ajax()函数
$.ajax({
url :请求 地址,
type :请求 方式,
async :默认 true false 表示同步 请求,
data :请求 参数,
dataType :服务器返回的 数据类型,
success : 服务器 正常 处理时执行的 回调函 数,
error : 服务器处理出错时执行的 回调函 数,
});
$.get()函数
$.get(url,data,function,datatype)
url:请求地址
data:请求参数
dataType:服务器返回的数据类型
function:服务器正常处理时执行的回调函数
$.post()函数
$.post(url,data,function,datatype)
url:请求地址
data:请求参数
dataType:服务器返回的数据类型
function:服务器正常处理时执行的回调函数
$.getJSON函数
$.getJSON(url,data,function)
url:请求地址
data:请求参数
function:服务器正常处理时执行的回调函数
load()函数
$obj.load(url,data,function)
url:请求地址
data:请求参数
function:ajax请求处理完毕后执行的回调函数 功能:利用ajax发送一个url请求,将返回结果填充到$obj元素中 (常用于页面引入)