Respinse 的概述Response : 代表响应的对象.从服务器向浏览器输出内容.
文件下载的方式
一种:超链接下载.直接将文件的路径写到超链接的href中.---前提:文件类型,浏览器不支持.
二种:手动编写代码的方式完成文件的下载.
设置两个头和一个流:
Content-Type :文件的MIME的类型.
Content-Disposition :以下载的形式打开文件.
InputStream :文件的输入流.
response输出响应内容的方法:向页面响应的方法:
getOutputStream();
getWriter();
这两个方法是互斥的.
做出响应的时候只能使用其中的一种流响应.
输出中文乱码的处理:
字节流:
设置浏览器默认打开的编码:
rsposne.setHeader("Content-Type",text/html;charset=UTF-8);
设置中文字节取出的时候编码.
中文.getBytes("UTF-8");
字符流:
设置浏览器打开的时候的编码 resposne.setHeader("Content-Type",text/html;charset=UTF-8");
设置response的缓冲区的编码 response.setCharacterEncoding("UTF-8");
简化的写法 response.setContentType("text/html;charset=UTF-8");
POST的解决方案:
request.setCharacterEncoding(“UTF-8”); --- 一定要在接收参数之前设置编码就OK.
GET的解决方案:
使用String的构造方法:
String(byte [] bytes, String charsetName)
通常使用指定的charset解码指定的 byte 数组,构造一个新的 String
Request作为域对象存取数据:使用request对象存取数据:
request的作用范围:
创建:客户端向服务器发送了一次请求以后,服务器就会创建一个request的对象.
销毁:当服务器对这次请求作出了响应之后.
重定向和转发的区别:(redirect和forward的区别)Response
通过response设置响应头:setHeader(String name,String value);,setIntHeader(String name,int value),setDateHeader(String name,long date);
通过response设置响应体:getOutputStream(),getWriter();
Cookie : 就是将数据保存到客户端浏览器的会话技术.浏览器获得Cookie :request.getCookies();
浏览器回写Cookie :response.addCookie(Cookie cookie);
Cookie的相关的API:
Cookie的分类:
会话级别Cookie:会话级别关闭浏览器的时候Cookie就销毁了.默认的
持久级别Cookie:设置有效时长的Cookie,关闭浏览器的时候不会销毁的.
Session : 就是将数据保存到服务器端的会话技术.基于Cookie回写SessionID的.
Session存取数据:
setAttribute(String name,Object value);
getAttribute(String name);
Session作用域:
session的作用范围:一次会话.(多次请求)
session生命周期:
创建:第一次调用getSession的时候创建session。
销毁:
非正常关闭服务器.
session过期
手动调用invalidate方法的时候
Cookie : 将数据保存到客户端浏览器
Cookie 常用的API:
Cookie 的分类有关:
会话级别的Cookie:默认的Cookie.关闭浏览器Cookie 就会销毁
持久级别的Cookie:可以设置Cookie 的有效时间,那么关闭浏览器Cookie 还会存在.手动销毁持久性Cookie. setMaxAge (0) --- 前提是有效路径必须一致
Session : 将数据保存到服务器端
Cookie 技术的使用:
HttpSercletResponse 有一个方法:
void addCookie(Cookie cookie);
HttpServletRequest 有一个方法:
Cookie[] getCookies();
Cookie (String name,String value);
Session的概述
Cookie 本身是有大小和个数的限制.Session 没有限制. Cookie 的数据保存在客户端, Session 数据保存在服务器端.
Session是域对象session何时创建:
服务器端第一次调用getSession() 创建 session.
session何时销毁:
1.session 过期,默认过期时间为30分钟
2.非正常关闭服务器,如果正常关闭session序列化到硬盘.
3.手动调用session,invalidate();
作用范围:
多次请求.(一次会话)
JSP的概述什么是JSP:
Java Server Pages(Java服务器端的页面)
使用JSP:
JSP = HTML + Java代码 + JSP自身的东西.
执行JSP的过程:
JSP翻译成Servlet,编译这个Servlet的类,生成class文件.得到执行.
JSP的脚本<%! %> :翻译成Servlet中的成员内容. 定义变量,方法,类. -- 不建议.
<% %> :翻译成Servlet中service方法内部的内容. 定义类,变量
<%= %> :翻译成Servlet中service方法中out.print();
JSP的注释-- 了解
HTML的注释 :<!-- 注释 -->
Java代码的注释 :// 单行注释 /多行注释/ /** 文档注释 */
JSP的注释 :<%-- JSP的注释 --%>
JSP的指令
指令的语法:
<%@ 指令名称 属性名称=”属性值” 属性名称=”属性值” ...%>
JSP中有三个指令:page指令, include指令, taglib指令.
JSP中page指令:<%@ page %> -- 设置JSP的.
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
extends :设置JSP翻译成Servlet后继承的类,默认值:org.apache.jasper.runtime.HttpJspBase,这个值要想修改,这个类必须是HttpServlet的子类
Ø JSP中的include指令:指示JSP包含其他的页面.
<%@ include file="logo.jsp" %>
<%@ include file="menu.jsp" %>
<h1>BODY部分</h1>
<%@ include file="footer.jsp" %>
JSP中的taglib指令:指示JSP引入标签库.
<%@ taglib uri="标签的URI的路径" prefix="标签的别名" %>
JSP的内置对象
JSP的内置对象:在JSP中可以直接使用的对象.
JSP中有9大内置对象:
exception Throwable getMessage(),getCause(); 设置isErrorPage=”true”
age内置对象 :真实对象是Object,就是JSP翻译成Servlet后的类的引用.
ut内置对象 :out和response.getWriter是不是同一个对象?区别是什么?
不是out真实对象JspWriter ,response获得Writer是PrintWriter.
pageContext内置对象:
JSP的四个域范围:
PageScope :当前页面中有效. pageContext PageContext
RequestScope :一次请求范围. request HttpServletRequest
SessionScope :一次会话范围. session HttpSession
ApplicationScope :应用范围 application ServletContext
JSP的动作标签
标签的作用:简化代码.
<jsp:forward /> :用于页面的转发.
<jsp:forward page="/demo1-jsp/demo3-object/demo3.jsp">/jsp:forward <jsp:include /> :用于页面的包含.(动态包含)
<jsp:param /> :用于带有路径的标签下,传递参数.
<jsp:useBean /> :用于在JSP中使用JavaBean.
<jsp:setProperty /> :用于在JSP中向JavaBean设置属性的.
<jsp:getProperty /> :用于在JSP中获得JavaBean的属性.
. 和 [] 的区别.
[]用于有下标的数据(数组,list集合) .用于有属性的数据(map,对象)
如果属性名中包含有特殊的字符.必须使用[]
JSTL的概述JSTL的标签库 : 包含了五类标签:
core(核心标签),fmt(国际化标签),xml(XML 标签),sql(SQL 标签),fn(JSTL 提供EL函数库)
使用JSTL:
JSTL 的核心标签的用法
JSTL的提供EL的函数库
<h1>JSTL提供的EL的函数库</h1>
${ fn:contains("Hello World","Hello") }
${ fn:length("HelloWorld") }
${ fn:toLowerCase("ABCDE") }
<c:forEach var="i" items='${ fn:split("a-b-c-d","-") }'>
${ i }
JSP的概述: JSP:Java Server Pages.
JSP的运行原理:翻译成Servlet,编译成Class进行执行.
JSP的脚本元素:
<%! %>
<% %>
<%= %>
JSP的注释:
JSP的三个指令:
page,include,taglib <%@ 指令名称 属性=”属性值”%>
JSP的内置对象:
pageContext,request,session,application,page,response,out,config,exception
JSP的四个作用范围
PageScope :当前页面
RequestScope :一次请求范围.
SessionScope :一次会话
ApplicationScope :整个应用范围.
EL的概述EL:Expression Language
EL的作用:
获取数据${ }
执行运算
操作web开发中常用的对象${param }
调用Java中方法:
JSTL的概述:
JSTL:JSP 标准标签库.
JSTL标签库:core,fmt,sql,xml,fn
JSTL的核心标签库:
if,forEach
JSTL的函数库:
${fn:}
JSP的设计模式: M:Model
V:View
C:Controller
MVC和EE开发三层结构的关系:
反射:(*)
获得类的字节码对象:Class对象.三种获得的方式.
类名.class;
类的实例.getClass();
Class.forName();
获得构造器:Constructor
获得属性:Field
获得方法:Method
JDBC的事务管理:
事务的概念:指的是逻辑上的一组操作,要么一起成功,要么一起失败.
事务的特性:
持久性:事务一旦结束,将会永久修改到数据库.
如果不考虑隔离性:
脏读 :一个事务读到另一个未提交的数据.
不可重复读 :一个事务读到另一个事务已经提交的update的数据,导致多次的查询结果不一致.
虚读 :一个事务读到另一个事务已经提交的insert的数据,导致多次的查询结果不一致.
解决读问题:
未提交读:以上情况都能发生.
已提交读:解决脏读,但是不可重复读和虚读有可能发生
重复读:解决脏读和不可重复读,但是虚读有可能发生.
串行化:可以解决以上的所有情况.
JDBC进行事务的管理:
Connection:
setAutoCommit(boolean flag);
commit();
rollback();