博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
javaweb
阅读量:3966 次
发布时间:2019-05-24

本文共 24539 字,大约阅读时间需要 81 分钟。

javaweb

数据库(MySQL)

E-R图

在这里插入图片描述

  1. DDL

    操作库

    • Create-----> create if exists database 库名 charater set 字符集;
    • Retrieve-----> show if exists databases;
    • Update-----> alter if exists database 库名 character set 字符集;
    • Delete-----> drop if exists database 库名;
      查询当前数据库 : select database();
      使用库 : use 库名;

    操作表


Create----->create table 表名( 		列名 数据类型 约束, 		列名 数据类型 约束, 		列名 数据类型 约束 		外键 	);
复制表-----> 		 create table 表名 like 被复制表名;
* Retrieve----->	show tables(查所有的表)   desc(查表结构)
Update----->alter table 表名 rename to 新表名;alter table 表名 character set 字符集;alter table 表名 add 列名 数据类型; 		全改 : alter table 表名 change  列名 新列名 数据类型; 		只改数据类型 : alter table 表名 modify 列名 数据类型;
* Delete----->		    delete table if exists 表名;						alter table 表名 drop 列名 -----删列;
  1. DML(增删改表中的记录)
insert to 表名(列名1,列名2,列名3...) values(值1,值2,值3...));
delete from 表名 [where 筛选条件];----删除truncate table 表名;----清空表
update 表名 set 列名1 = 值1,列名2 = 值2,列名3 = 值3...[where 筛选条件];
  1. DQL
    查询 : select * from 表名;
    排序 : select * from 表名 order by 字段 排序方式(desc(降序),asc(升序));
    聚合函数 : count (个数),max,min,sum,avg
    分组查询 : select 字段列表 from 表名 group by 分组字段 having 分组后的条件;
where和having 的区别?1.where 在分组之前限定,不满足条件不分组2.having 在分组之后限定,不满足条件不查询3.where后面不可以跟聚合函数4.having后面可以跟聚合函数
分页查询 : select  * from 表名 limit 开始索引,每页查询条数		开始索引=(当前页码 - 1) * 每页显示条数基础查询 : 去重 : distinct  select distinct 列名 from 表名;	ifnull(字段,0)--去除null值	起别名 : As 名称	运算符 : 1. Between...and....			2.And or (is not)模糊查询 : select * from 表名 where 字段名 like '_%''_' : 下划线,单个任意字符'%' : 多个任意字符
约束 :1.主键(primary key)	2.非空(not null) 3.唯一(unique) 4.外键(foreign key) 5.自动增长(auto_increment)* creat table 表名(	.....	外键列	constraint 外键名 foreign key (外键列名) references 主表名(主表列)	);* 级联操作	添加外键时,设置级联更新/级联删除	alter table 表名 add constraint 外键名 foreign key (外键列名) reference 主表名(主表列名) (on update cascade)/(on delete cascade);
  1. DCL : 修改用户密码update user set password = newpassword where 条件;
select	字段列表from	表名列表where	条件列表group by 	分组字段having	分组后的条件order by 	排序limit	分页限定;
数据库设计	多表之间的关系	1.一对一	2.一对多 : 在多的一方建立外键,指向为一的一方的主键	3.多对多(双向的一对多) : 建立中间关系表 ,并且中间表至少包含两个字段,两个字段指向两张表的主键多表查询	1.内连接:		*隐式内连:  select 字段字段 from 表1,表2...条件;		*显式内连:select 字段列表 from 表1 [inner] join 表2 on 条件;从哪些表中查询数据:	*.条件是什么?	*.查询哪些字段?	2.外连接	*.左外连接(用的多)---查询的是左表中的所有数据以及交集部分数据	select 字段列表 from 表1(左表) left [outer] join 表2(右表) on 条件;	*.右外连接	select 字段列表 from 表1(右表) right [outer] join 表2(左表) on 条件;事务:	一个包含多个步骤的业务操作,被事务管理,这些操作要么成功,要么同时失败	*.start transaction  开始事务	*.rollback           事务回滚	*.commit             提交事务事务的四大特征	1.原子性:不可分割的最小操作单位	2.持久性:事务提交或回滚后,数据持久化保存	3.隔离性:多个事务之间,相互独立	4.一致性:事务操作前后,数据总量不变

JDBC(数据库连接)

数据库工具类

import com.alibaba.druid.pool.DruidDataSource;import com.alibaba.druid.pool.DruidDataSourceFactory;import java.io.InputStream;import java.sql.Connection;import java.sql.SQLException;import java.util.Properties;public class JDBCUtils {	//定义成员变量dataSource    private static DruidDataSource dataSource;    static {        try {        	//Properties配置文件对象            Properties properties = new Properties();            //类加载器getClassLoader()的getResourceAsStream()方法加载配置文件返回一个字节输入流            InputStream resource = JDBCUtils.class.getClassLoader().getResourceAsStream("db.properties");            //加载配置文件            properties.load(resource);			//获取DataSource            dataSource = (DruidDataSource) DruidDataSourceFactory.createDataSource(properties);            // System.out.println(dataSource.getConnection());        } catch (Exception e) {            e.printStackTrace();        }    }	//获取连接方法    public static Connection getConnection() {        Connection connection = null;        try {            connection = dataSource.getConnection();        } catch (SQLException e) {            e.printStackTrace();        }        return connection;    }	//关闭资源方法    public static void close(Connection connection) {        if (connection != null) {            try {                connection.close();            } catch (SQLException e) {                e.printStackTrace();            }        }    }}

HTML(超文本标记语言 Hyper Text markup language)

  1. 文件标签
  : html文档的跟标签  : 头标签 指定html文档的属性,引入外部资源  : 标题  : 体标签
  1. 文本标签

to

: 标题,字号随逐渐减小,自动换行

: 段落

/
: 换行,自闭和标签


/

: 显示一条水平线,自闭和标签 : 字体加粗 : 斜体 : 字体标签
: 文本居中特殊字符 : 空格 :   版权 : ©
  1. 图片标签
 / 
  1. 列表标签
1.无序 : 	
2.有序 :
  1. 超链接标签
 : 本页面跳转,默认值 : 打开新页面div标签和span标签 : 1. : 文本信息在一行展示,不会跳行2.
: 会跳行语义化标签 : :头
:脚
  1. 表格标签
table标签 : 定义表格tr标签 : 定义行td标签 : 定义单元格th标签 : 表头单元格格式 :	
属性 : 1.align : 对齐方式 2.border : 边框 3.width : 宽度 4.cellpading : 内容与单元格间的距离 5.cellspacing : 单元格之间的距离 : 可以在页面上开单独窗口
  1. 表单标签
用于采集用户输入的数据和服务器进行交互
action : 指定提交数据的urlmethod : 指定提交方式---> 1.get(默认值) : 请求参数会在地址栏中显示 url的长度有限制 不太安全 2.post : 请求参数不会在地址栏中显示 url的长度没有限制 较为安全表单项中的数据想要被提交,必须指定其name属性1.GET请求有哪些? *from标签 method=get *a标签 *link标签引入css *script标签引入js *img标签引入图片 *iframe标签引入html页面 *在浏览器地址栏中输入地址敲回车2.POST请求有哪些? *from标签 method=post表单项标签 : : 可以通过type属性值改变元素展示的样式type属性值有哪些? *text : 文本输入框 *password : 密码输入框 *radio : 单选框--> name必须一致 *checkbox : 复选框

css(样式控制)

  1. 选择器
    1.基本选择器
1.id选择器--> #id属性值{
}2.元素选择器-->标签名称{
}3.类选择器-->.class属性值{
}
2.**扩展槽选择器**
1.* : *{
}2.并集选择器 : 选择器1,选择器2{
}
3.**子选择器**
选择器1, 选择器2{
}
4.**父选择器**
选择器1>选择器2{
}
5.**属性选择器**
元素名[属性名:'属性名']{
}
  1. 属性
    1.文本,字体
*font-size : 字体大小*color : 文本颜色*text-algin : 对齐方式*line-height : 高度
2.**边框**
(复合属性)border : border: px solid red;
3.**尺寸**
width : 宽  height : 高
4.**背景**
(复合属性)background: url("") no-repeat(不重复显示) center;
5.**盒子模型**
目的 : 控制布局	1.margin : 外边距	2.padding : 内边距	3.float :浮动 : * left  * right

javascript(客户端脚本语言)

1.数据类型 : 	*原始数据类型  *引用数据类型(对象)	number  string  boolean  null  undefined(未定义)2.变量 : 	var 变量名 = 初始值;	带var的为局部变量,不带的为全局变量	输出语句 : document.write();  alert();-->弹窗3.运算符 : 	typeof(变量);-->判断变量类型	一元运算符 : ++ -- +(正号) -(负号)	逻辑运算符 : &&(与) ||(或) -->0为假,非0为真	三元运算符 : ? : -->表达式 ? 值1 : 值2;在java中switch可以接受的数据类型有 : byte,int,shot,char,枚举,stringECMAScript : 	1.流程控制语句 : 		*if...else		*switch		*while		*do...while		*for	2.基本对象		*Function(函数对象)			1.创建				*var fun = new Function(形参列表,方法体);				*Function 方法名(形参列表){
} *Array(数组对象) 1.创建 *var arr = new Array(元素列表); *var arr = new Array(默认长度); *var arr = [元素列表]; 2.特点 *数组元素类型可变 *设有固定长度 *Date(日期对象) 1.创建 *var date = new Date(); 2.方法 *tolocalString(); *getTime();--->毫秒值正则表达式(RegExp) *定义字符串的组成规则 : 1.单个字符 : [] 如: [a] [ab] [a-zA-Z0-9] 特殊符号代表特殊含义的单个字符 \d : 单个数字字符 : [0-9] \w : 单个单词字符 : [a-zA-Z0-9] 2.量词符号 ? : 出现0次或1次 * : 出现0次或多次 + : 出现1次或多次 {
m,n} : 表示 m<= 数量 <=n 3.创建 : *var reg = new regExp("正则表达式"); *var reg = /正则表达式/ 4.test()方法 : 验证是否符合正则 ^ : 开始 $ : 结束 如 : /^\w{
6,12}$/

正则表达式

$("#sub_btn").click(function(){
// 验证用户名:必须由字母,数字下划线组成,并且长度为5到12位 //1 先获取用户名输入框中的内容 var usernameText = $("#username").val(); //2 创建正则表达式对象 var usernamePatt = /^\w{
5,12}$/; //3 调用test方法验证结果 if ( !usernamePatt.test(usernameText) ) {
//4 如果不合法,要提示用户,并阻止提交。 $("span.errorMsg").text("用户名不合法!"); return false; }// 验证密码:必须由字母,数字下划线组成,并且长度为5到12位 //1 先获取密码输入框中的内容 var passwordText = $("#password").val(); //2 创建正则表达式对象 var passwodPatt = /^\w{
5,12}$/; //3 调用test方法验证结果 if ( !passwodPatt.test(passwordText) ) {
//4 如果不合法,要提示用户,并阻止提交。 $("span.errorMsg").text("密码不合法!"); return false; }// 验证确认密码:和密码相同 // 1 获取确认密码内容 var repwdText = $("#repwd").val(); // 2 比较确认密码和密码是否一致 if ( repwdText != passwordText ) {
// 3 不一致就要提示用户,并阻止提交 $("span.errorMsg").text("确认密码和密码不一致!"); return false; }// 邮箱验证:xxxxx@xxx.com // 1 先获取邮箱内容 var emailText = $("#email").val(); // 2 创建邮箱正则表达式 var emailPatt = /^[a-z\d]+(\.[a-z\d]+)*@([\da-z](-[\da-z])?)+(\.{
1,2}[a-z]+)+$/; // 3 使用test方法验证结果 if ( !emailPatt.test(emailText) ) {
// 4 不合法时提示用户,阻止提交 $("span.errorMsg").text("邮箱格式不合法!"); return false; }// 验证码:现在只需要验证用户已输入。因为还没讲到服务器。验证码生成。 var codeText = $("#code").val(); /*alert("去空格前:[" + codeText + "]"); codeText = $.trim( codeText ); alert("去空格后:[" + codeText + "]");*/ if ( codeText == "" ) {
$("span.errorMsg").text("验证码不能为空!"); return false; } $("span.errorMsg").text(""); // return false 可以阻止元素的默认行为。 return true; });
DOM(控制Html文档内容) : Browser Object Model	获取页面标签(Element) : document.getElementById("id值");事件 : 	1.直接在Html上指定事件的属性 		onclick="alert('内容')";	2.通过JS获取元素对象指定属性 设置一个函数		var img = document.getElementById("");	 		Document : 文档对象 	事件 : 		1.点击事件 			*onclick : 单击			*ondbclick : 双击		2.焦点事件			*onblur : 失去焦点			*onfoucs : 获取焦点		3.加载事件			*onload		4.鼠标事件			*onmousedown			*onmouseup		5.键盘事件			*onkeydown			*onkeyup			*onkeypress		6.选中和改变			*onchange			*onselect		7.表单			*onsubmit : 确认按钮被点击			*onreset : 重置按钮

tomcat(服务器)

1.网络通信三要素 : 	*ip	*端口 : 0-65536	*传输协议 :			  1.tcp : 安全协议,三次握手			  2.udp tomcat目录结构 : 	1. bin:启动和关闭 tomcat 的 bat 文件 	2. conf:配置文件server.xml 该文件用于配置 server 相关的信息,比如 tomcat 启动的端口号,配置主机(Host) ;web.xml 文件配置与 web 应用(web 应用相当于一个 web站点);tomcat-user.xml 配置用户名密码和相 关权限	3. lib:该目录放置运行 tomcat 运行需要的 jar 包 	4. logs:存放日志,当我们需要查看日志的时候,可以查询信息 	5. webapps:放置我们的 web 应用 	6. work 工作目录:该目录用于存放 jsp 被访问后生成对应的 server 文件和.class 文件

服务器端三大组件

  1. Servlet
servlet : server applet	运行在服务器上的程序配置servlet	1.在web.xml中配置	
servlet类名
servlet类路径
servlet类名
/servlet类名
2.servlet3.0注解配置 : @webservlet("/servlet类名")servlet体系结构 : servlet----->interface | GenericServlet----->abstract | HttpServlet----->abstractservlet中的方法 : 1.init(初始化) : 只执行一次(单例模式) 2.service(提供服务) : 多次执行 3.destroy(销毁) : 执行一次 4.servletConfig(获取servletConfig对象) : servlet的配置对象
  1. Filter
1.Filter 过滤器它是 JavaEE 的规范。也就是接口 2.Filter 过滤器它的作用是:拦截请求,过滤响应** 拦截请求常见的应用场景有: 1、权限检查  2、日记操作  3、事务管理  	……等等** Filter的工作流程 :

在这里插入图片描述

Filter代码

public class AdminFilter implements Filter {
/** * doFilter 方 法 , 专 门 用 于 拦 截 请 求 。 可 以 做 权 限 检 查 */ @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;HttpSession session = httpServletRequest.getSession(); Object user = session.getAttribute("user"); // 如 果 等 于 null , 说 明 还 没 有 登 录 if (user == null) {
servletRequest.getRequestDispatcher("/login.jsp").forward(servletRequest,servletResponse); return; } else {
// 让 程 序 继 续 往 下 访 问 用 户 的 目 标 资 源 filterChain.doFilter(servletRequest,servletResponse); } }}

web.xml中的配置

AdminFilter
com.atguigu.filter.AdminFilter
AdminFilter
/admin/*
Filter 过滤器的使用步骤: 1、编写一个类去实现 Filter 接口 2、实现过滤方法 doFilter() 3、到 web.xml 中去配置 Filter 的拦截路径

FilterChain过滤器链 :

在这里插入图片描述
***使用 Filter 和 ThreadLocal 组合管理事务(重点)

使用 ThreadLocal 来确保所有 dao 操作都在同一个 Connection 连接对象中完成
public class JdbcUtils {
private static DruidDataSource dataSource; private static ThreadLocal
conns = new ThreadLocal
(); static {
try {
Properties properties = new Properties(); // 读 取 jdbc.properties 属 性 配 置 文 件 InputStream inputStream = JdbcUtils.class.getClassLoader().getResourceAsStream("jdbc.properties"); // 从 流 中 加 载 数 据 properties.load(inputStream); // 创 建 数 据 库 连 接 池 dataSource = (DruidDataSource) DruidDataSourceFactory.createDataSource(properties);} catch (Exception e) {
e.printStackTrace(); }} /** * 获 取 数 据 库 连 接 池 中 的 连 接 * @return 如 果 返 回 null, 说 明 获 取 连 接 失 败
有 值 就 是 获 取 连 接 成 功 */ public static Connection getConnection(){
Connection conn = conns.get(); if (conn == null) {
try {
conn = dataSource.getConnection(); // 从 数 据 库 连 接 池 中 获 取 连 接 conns.set(conn); // 保 存 到 ThreadLocal 对 象 中 , 供 后 面 的 jdbc 操 作 使 用 conn.setAutoCommit(false); // 设 置 为 手 动 管 理 事 务 } catch (SQLException e) {
e.printStackTrace(); } } return conn;} /** * 提 交 事 务 , 并 关 闭 释 放 连 接 */ public static void commitAndClose(){
Connection connection = conns.get(); if (connection != null) {
// 如 果 不 等 于 null , 说 明 之 前 使 用 过 连 接 , 操 作 过 数 据 库 try {
connection.commit(); // 提 交 事 务 } catch (SQLException e) {
e.printStackTrace(); } finally {
try {
connection.close(); // 关 闭 连 接 , 资 源 资 源 } catch (SQLException e) {
e.printStackTrace(); } } } // 一 定 要 执 行 remove 操 作 , 否 则 就 会 出 错 。 ( 因 为 Tomcat 服 务 器 底 层 使 用 了 线 程 池 技 术 ) conns.remove(); } /** * 回 滚 事 务 , 并 关 闭 释 放 连 接 */ public static void rollbackAndClose(){
Connection connection = conns.get(); if (connection != null) {
// 如 果 不 等 于 null , 说 明 之 前 使 用 过 连 接 , 操 作 过 数 据 库 try {
connection.rollback(); // 回 滚 事 务 } catch (SQLException e) {
e.printStackTrace(); } finally {
try {
connection.close(); // 关 闭 连 接 , 资 源 资 源 } catch (SQLException e) {
e.printStackTrace(); } }}//一 定 要 执 行 remove操 作 , 否 则 就 会 出 错 。 ( 因 为 Tomcat服 务 器 底 层 使 用 了 线 程 池 技 术 )conns.remove(); }}

使用 Filter 过滤器统一给所有的 Service 方法都加上 try-catch。来进行实现的管理。

public class TransactionFilter implements Filter {
@Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
try {
filterChain.doFilter(servletRequest,servletResponse); JdbcUtils.commitAndClose(); // 提 交 事 务 } catch (Exception e) {
JdbcUtils.rollbackAndClose(); // 回 滚 事 务 e.printStackTrace(); } }
  1. Listener
1.什么是listener监听器	1、Listener 监听器它是 JavaWeb 的三大组件之一。JavaWeb 的三大组件分别是:Servlet 程序、Filter 过滤器、Listener 监 听器。	2、Listener 它是 JavaEE 的规范,就是接口	3、监听器的作用是,监听某种事物的变化。然后通过回调函数,反馈给客户(程序)去做一些相应的处理。2.如何使用 ServletContextListener 监听器监听 ServletContext 对象。 使用步骤如下:  	1、编写一个类去实现 ServletContextListener 	2、实现其两个回调方法 3、到 web.xml 中去配置监听器**监听器实现类 : 	public class MyServletContextListenerImpl implements ServletContextListener {
@Override public void contextInitialized(ServletContextEvent sce) {
System.out.println("ServletContext 对象被创建了"); } @Override public void contextDestroyed(ServletContextEvent sce) {
System.out.println("ServletContext 对象被销毁了"); }}**web.xml中的配置
com.atguigu.listener.MyServletContextListenerImpl

HTTP协议

Hyper text Transfer protocol : 超文本传输协议,客户端和服务器端通信时,发送数据的格式	1.基于tcp/ip的高级协议	2.基于请求/响应模型	3.无状态的: 每次请求之间相互独立,不能交互数据请求消息数据格式 : 	1.请求行	2.请求头	3.请求空行	4.请求体Request : 获取请求消息转发 : request.getRequestDispatcher("").forward(request, response);-->服务端行为解决乱码 : request.setCharacterEncoding("UTF-8");响应消息数据格式 :	1.响应行	2.响应头	3.响应空行	4.响应体Response : 响应对象重定向 : response .sendRedirect("");--->客户端行为  动态获取虚拟目录 : request.getContextPath();  解决乱码 : response.setContentType("text/html:charset=utf-8")--->设置服务端编码  			response.setHeader("content-type", "text/html;charset=UTF-8");--->设置服务端编码  域对象 : 共享数据  	1.setAttribute(String name,Object value);  	2.getAttribute(String name);  	3.removeAttribute(String name);

转发和重定向的区别 :

在这里插入图片描述

JSP (Java Server Pages)

* jsp 的本质 ,其实是一个 Servlet 程序。* JSP语法(重点掌握) : 	1.、jsp 文件头部声明介绍(page 指令介绍)		<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>		这是 jsp 文件的头声明。表示这是 jsp 页面。	* language 属性 值只能是 java。 表示翻译的得到的是 java 语言的	* contentType 属性 设置响应头 contentType 的内容 	* pageEncoding 属性 设置当前 jsp 页面的编码 	* import 属性 给当前 jsp 页面导入需要使用的类包	* autoFlush 属性 设置是否自动刷新 out 的缓冲区,默认为 true 	* buffer 属性 设置 out 的缓冲区大小。默认为 8KB	* errorPage 属性 设置当前 jsp 发生错误后,需要跳转到哪个页面去显示错误信息 	* isErrorPage 属性 设置当前 jsp 页面是否是错误页面。是的话,就可以使用 exception 异常对象 	* session 属性 设置当前 jsp 页面是否获取 session 对象,默认为 true 	* extends 属性 给服务器厂商预留的 jsp 默认翻译的 servlet 继承于什么类	2.jsp 中的脚本介绍		1.(***重点 使用的多)		表达式脚本格式如下: <%=表达式 %>		表达式脚本 用于向页面输出内容。		 表达式脚本 翻译到 Servlet 程序的 service 方法中 		 以 out.print() 打印输出 out 是 jsp 的一个内置对象,		 用于生成 html 的源代码 		2.(***重点 使用的最多)		代码脚本如下: <% java 代码 %>		代码脚本里可以书写任意的 java 语句。		代码脚本的内容都会被翻译到 service 方法中。		所以 service 方法中可以写的 java 代码,都可以书写到代码脚本中	3.jsp 的常用标签(重点****)		1.静态包含--常用			<%@ include file="" %>			静态包含是把包含的页面内容原封装不动的输出到包含的位置。		2.动态包含--少用			
动态包含会把包含的 jsp 页面单独翻译成 servlet 文件, 然后在执行到时候再调用翻译的 servlet 程序。 并把 计算的结果返回。 动态包含是在执行的时候,才会加载。所以叫动态包含 3.页面转发--常用

Session和Cookie

* Cookie对象 : 	Cookie是浏览器提供的一种技术,通过服务器的程序能将一些只须保存在客户端,或者在客户端进行处理的数据, 放在本地的计算机上,不需要通过网络传输,因而提高网页处理的效率,并且能够减少服务器的负载,但是由于 Cookie 是服务器端保存在客户端的信息, 所以其安全性也是很差的。例如常见的记住密码则可以通过 Cookie 来实 现。有一个专门操作Cookie的类 javax.servlet.http.Cookie。随着服务器端的响应发送给客户端,保存在浏览器。当下 次再访问服务器时把Cookie再带回服务器。Cookie 的格式:键值对用“=”链接,多个键值对间通过“;”隔开。1.Cookie的创建和发送 : 	通过 new Cookie("key","value");来创建一个 Cookie 对象,要想将 Cookie 随响应发送到客户端,需要先添加到 response 对象中,response.addCookie(cookie);此时该 cookie 对象则随着响应发送至了客户端。在浏览器上可以 看见。	//创建Cookie对象	Cookie cookie = new Cookie("name","password");	//发送Cookie对象	response.addCookie(cookie);2.Cookie设置到期时间 : 	// 创建Cookie对象 	Cookie cookie = new Cookie("uname","zhangsan");	 // 设置Cookie 3天后失效 	 cookie.setMaxAge(3 * 24 * 60 * 60); 	 // 发送Cookie对象 	 response.addCookie(cookie);* HttpSession对象 : 	HttpSession对象是 javax.servlet.http.HttpSession 的实例,该接口并不像 HttpServletRequest 或 HttpServletResponse 还存在一个父接口,该接口只是一个纯粹的接口。这因为 session 本身就属于 HTTP 协议的范 畴。对于服务器而言,每一个连接到它的客户端都是一个 session,servlet 容器使用此接口创建 HTTP 客户端和 HTTP 服 务器之间的会话。会话将保留指定的时间段,跨多个连接或来自用户的页面请求。一个会话通常对应于一个用户,该 用户可能多次访问一个站点。可以通过此接口查看和操作有关某个会话的信息,比如会话标识符、创建时间和最后一 次访问时间。在整个 session 中,最重要的就是属性的操作。1.Session的作用 : 	Session 的作用就是为了标识一次会话,或者说确认一个用户;并且在一次会话(一个用户的多次请求)期间共享数 据。我们可以通过 request.getSession()方法,来获取当前会话的 session 对象	// 如果session对象存在,则获取;如果session对象不存在,则创建 	HttpSession session = request.getSession();2.JSESSIONID标识符 : 	Session 既然是为了标识一次会话,那么此次会话就应该有一个唯一的标志,这个标志就是 sessionId。    每当一次请求到达服务器,如果开启了会话(访问了 session),服务器第一步会查看是否从客户端回传一个名为 JSESSIONID 的 cookie,    如果没有则认为这是一次新的会话,会创建 一个新的 session 对象,并用唯一的 sessionId 为此次会话做一个标志。    如果有 JESSIONID 这 个cookie回传,服务器则会根据 JSESSIONID 这个值去查看是否含有 id为JSESSION值的session 对象,    如果没有则认为是一个新的会话,重新创建一个新的 session 对象,并标志此次会 话; 如果找到了相应的 session 对象,则认为是之前标志过的一次会话,返回该 session 对象,数据达到共享。3.Session域对象 : 	// 获取session对象	 HttpSession session = request.getSession();	 // 设置session域对象	  session.setAttribute("uname","admin"); 	 // 获取指定名称的session域对象	  String uname = (String) request.getAttribute("uname");	  // 移除指定名称的session域对象	   session.removeAttribute("uname");

EL表达式(***重点)

  • **EL 表达式主要是代替 jsp 页面中的表达式脚本在 jsp 页面中进行数据的输出。 **
  • 语法---------> ${表达式}
  • 空运算符 empty : 用于判断字符串 ,集合,数组,对象是否为空和判断长度是否为0
    例 :${empty list}
1.EL 表达式的 11 个隐含对象 ; 	变量               类型                      作用1.pageContext       PageContextImpl            它可以获取 jsp 中的九大内置对象2.pageScope         Map
它可以获取 pageContext 域中的数据 3.requestScope Map
它可以获取 Request 域中的数据 4.sessionScope Map
它可以获取 Session 域中的数据 5.cookie Map
它可以获取当前请求的 Cookie 信息6.applicationScope Map
它可以获取 ServletContext 域中的数据7.param Map
它可以获取请求参数的值 8.paramValues Map
它也可以获取请求参数的值,获取多个值的时候使用。9.header Map
它可以获取请求头的信息 10.headerValues Map
它可以获取请求头的信息,它可以获取多个值的情况11.initParam Map
它可以获取在 web.xml 中配置的
上下文参数** EL 获取四个特定域中的属性1.pageScope ====== pageContext 域 2.requestScope ====== Request 域 3.sessionScope ====== Session 域 4.applicationScope ====== ServletContext 域

AJAX和json

1.什么是Json?	JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式。* JSON在JavaScript中的使用	**json 的定义		json 是由键值对组成,并且由花括号(大括号)包围。每个键由引号引起来,键和值之间使用冒号进行分隔, 多组键值对之间进行逗号进行分隔。	var jsonObj = {
"key1":12, "key2":"abc", "key3":true, "key4":[11,"arr",false], "key5":{
"key5_1" : 551, "key5_2" : "key5_2_value" }, "key6":[{
"key6_1_1":6611, "key6_1_2":"key6_1_2_value" },{
"key6_2_1":6621, "key6_2_2":"key6_2_2_value" }]};
json的两个常用方法 	json 的存在有两种形式。 	 一种是:对象的形式存在,我们叫它 json 对象。	 一种是:字符串的形式存在,我们叫它 json 字符串。 	 **一般我们要操作 json 中的数据的时候,需要 json 对象的格式。	 **一般我们要在客户端和服务器之间进行数据交换的时候,使用 json 字符串***JSON.stringify() 把 json 对象转换成为 json 字符串***JSON.parse() 把 json 字符串转换成为 json 对象	实例 : 		//把 json对 象 转 换 成 为json字 符 串 		var jsonObjString = JSON.stringify(jsonObj); //特 别 像java中 对象 的 toString	alert(jsonObjString) 	// 把 json 字 符 串 。 转 换 成 为 json对 象 	var jsonObj2 = JSON.parse(jsonObjString); 	alert(jsonObj2.key1);// 12 	alert(jsonObj2.key2);// abc*JSON在java中的使用 	1.javaBean 和 json 的互转		@Test 		public void test1(){
Person person = new Person(1,"国哥好帅!"); // 创 建 Gson 对 象 实 例 Gson gson = new Gson(); // toJson 方 法 可 以 把 java 对 象 转 换 成 为 json 字 符 串 String personJsonString = gson.toJson(person); System.out.println(personJsonString); // fromJson 把 json 字 符 串 转 换 回 Java 对 象 // 第 一 个 参 数 是 json 字 符 串 // 第 二 个 参 数 是 转 换 回 去 的 Java 对 象 类 型 Person person1 = gson.fromJson(personJsonString, Person.class); System.out.println(person1); } 2.、List 和 json 的互转 // List和 json的 互 转 @Test public void test2() {
List
personList = new ArrayList<>(); personList.add(new Person(1, "国哥")); personList.add(new Person(2, "康师傅")); Gson gson = new Gson();//把 List转 换 为 json字 符 串 String personListJsonString = gson.toJson(personList); System.out.println(personListJsonString); List
list = gson.fromJson(personListJsonString, new PersonListType().getType()); System.out.println(list); Person person = list.get(0); System.out.println(person);} 3.map 和 json 的互转 // map和 json的 互 转 @Test public void test3(){
Map
personMap = new HashMap<>(); personMap.put(1, new Person(1, "国哥好帅")); personMap.put(2, new Person(2, "康师傅也好帅")); Gson gson = new Gson(); // 把 map 集 合 转 换 成 为 json字 符 串 String personMapJsonString = gson.toJson(personMap); System.out.println(personMapJsonString);// Map
personMap2 = gson.fromJson(personMapJsonString, new PersonMapType().getType()); Map
personMap2 = gson.fromJson(personMapJsonString, new TypeToken
>(){ }.getType()); System.out.println(personMap2); Person p = personMap2.get(1); System.out.println(p);}Ajax : 1.什么是Ajax请求 AJAX 即“Asynchronous Javascript And XML”(异步 JavaScript 和 XML),是指一种创建交互式网页应用的网页开发 技术。 *ajax 是一种浏览器通过 js 异步发起请求,局部更新页面的技术。 *Ajax 请求的局部更新,浏览器地址栏不会发生变化 *局部更新不会舍弃原来页面的内容 ***原生Ajax请求实例 :
Insert title here
onreadystatechange事件 : *readystate: 0: 请求为初始化 1: 服务器连接已建立 2: 请求已接受 3: 请求处理中 4: 请求已完成,且响应已就绪 *status: 200: ok 404: 未找到页面 ***jQuery中的Ajax请求实例 : 1.$.ajax 方法 url 表示请求的地址 type 表示请求的类型 GET 或 POST 请求 data 表示发送给服务器的数据 格式有两种: 一:name=value&name=value 二:{ key:value} success 请求成功,响应的回调函数 dataType 响应的数据类型 常用的数据类型有: text 表示纯文本 xml 表示 xml 数据 json 表示 json 对象 $("#ajaxBtn").click(function(){ $.ajax({ url:"http://localhost:8080/16_json_ajax_i18n/ajaxServlet", // data:"action=jQueryAjax", data:{ action:"jQueryAjax"}, type:"GET", success:function (data) { // alert(" 服 务 器 返 回 的 数 据 是 : " + data); // var jsonObj = JSON.parse(data); $("#msg").html("编号:" + data.id + " , 姓名:" + data.name); }, dataType : "json" }); }); 2.$.get 方法和$.post 方法 url 请求的url地址 data 发送的数据 callback 成功的回调函数 type 返回的数据类型 代码实例 : // ajax--get请 求 $("#getBtn").click(function(){ $.get("http://localhost:8080/16_json_ajax_i18n/ajaxServlet","action=jQueryGet",function (data) { $("#msg").html(" get 编号:" + data.id + " , 姓名:" + data.name); },"json"); }); // ajax--post 请 求 $("#postBtn").click(function(){ $.post("http://localhost:8080/16_json_ajax_i18n/ajaxServlet","action=jQueryPost",function (data) { $("#msg").html(" post 编号:" + data.id + " , 姓名:" + data.name); },"json"); }); 3.$.getJSON 方法 url 请求的 url 地址 data 发送给服务器的数据 callback 成功的回调函数 // ajax--getJson请 求 $("#getJSONBtn").click(function(){ $.getJSON("http://localhost:8080/16_json_ajax_i18n/ajaxServlet","action=jQueryGetJSON",function (data) { $("#msg").html(" getJSON 编号:" + data.id + " , 姓名:" + data.name); }); });演示当用户在输入框中键入字符时,网页如何与 web 服务器进行通信:

请在下面的输入框中键入字母(A - Z):

姓氏:

建议:

转载地址:http://jjyki.baihongyu.com/

你可能感兴趣的文章
Ubuntu 16.04开机隐藏菜单缩短时间
查看>>
《Linux内核设计与实现》- Linux的进程
查看>>
用户态切换到内核态的3种方式
查看>>
内核库函数
查看>>
Linux 系统内核空间与用户空间通信的实现与分析
查看>>
64位int类型用printf输出问题
查看>>
进程的状态转换
查看>>
如何查看进程的信息(线程数)
查看>>
Linux中的chage命令
查看>>
linux-详细解析密码文件passwd与shadow
查看>>
su- 与su的区别
查看>>
linux下发邮件mail
查看>>
echo如何手动输出换行
查看>>
身份证的正确使用方法——非常重要的知识
查看>>
ExtJS & Ajax
查看>>
Tomcat在Windows下的免安装配置
查看>>
JMeter常用测试元件
查看>>
JMeter——使用技巧
查看>>
Hibernate 实体层设计--Table per subclass
查看>>
Ruby解决方案:The 'ffi' native gem requires installed build tools ; 含最新DevKit下载地址
查看>>