随便写写01
===============================================复习===========================================
1.相对与绝对路径
绝对路径:是文件或目录在硬盘上的绝对位置
--以根目录为开始:/home/soft01
相对路径:文件或目录相对于当前工作目录的位置
--不以根目录为开始:home/soft01
2.Linux常用命令
pwd --打印工作目录
cd --改变工作目录
ls --查看目录内容
mkdir --创建目录
3.JRE --Java SE Runtime Environment --Java SE运行时环境
JVM --Java虚拟机
Libaries --丰富的类库
JDK --Java Development Environment --Java开发工具包,是JRE的超集,或者说JDK包含了JRE、编译器和调试工具等。
4.8种基本数据类型
byte
short
int
long
float
double
char
boolean
5.16进制以0X或0x开头,8进制以0开头
6.Unicode是世界通用的定长字符集,所有的字符都是16位。
7.byte -> short ->int -> long -> float -> double
^
char---|
自动类型转换(隐式类型转换):从小类型到大类型可以自动完成
强制类型转换:从大类型到小类型需要强制转换符,会造成精度损失或者溢出。
long l =1024L*1024*1024*4;
int i =(int)l;//会造成溢出
double pi =3.14159567896789085;
float f =(float)pi;//会造成精度损失
8.除(/)、取余(%)
条件运算符--三目运算符--boolean表达式?表达式1:表达式2
9.JDK 中的java.utils.Arrays类提供对数组操作的一系列实用方法
10.算法
--插入排序:将数组种的每个元素与第一个元素比较
for (int i;i<arr.length;i++){
int k =arr[i];//取出待插入元素
//找到插入位置
int j;
for(j =i-1;j>=0&&k<arr[j];j--){
arr[j+1] =arr[j];//移动元素
}
//插入元素
arr[j+1] =k;
System.out.println(Arrays.toString(arr));
}
--冒泡排序:比较相邻的元素,将小的放到前面
for(int i=0;i<arr.length-1;i++){
boolean isSwap =false;
for(int j =0;j<arr.length-1-i;j++){
if(arr[j]>arr[j+1]){
int t =arr[j];
arr[j] =arr[j+1];
arr[j+1] =t;
isSwap =true;
}
}
if(!isSwap)
break;
System.out.println(Arrays.toString(arr));
}
11.数据库标准语言:SQL--结构化查询语言
1)数据定义语言 DDL
2)数据操作语言 DML
3)事务控制语言 TCL
4)数据查询语言 DQL
5)数据控制语言 DCL
12.Servlet
1.如果servlet要输出中文,需要调用 --> response.setContentType("text/html;charset=utf-8");
2.解决出现中文乱码问题:
--解决方式1:
step1,先保证表单所在的页面按照指定的编码格式打开。
使用<meta http-equiv="content-type" content="text/html;charset=utf-8">
step2,调用request.setCharacterEncoding("utf-8");
意思是告诉服务器,使用指定的编码格式进行解码。
该方法只适用于post请求。
--解决方式2:
step1,同上。
step2, 使用new String(str.getBytes("iso-8859-1"),"utf-8");
3.如何重定向?-->response.sendRedirect(String url);
4.jdbc驱动必须能够正确地进行编码和解码,有些mysql的驱动不能够正确进行编码和解码(默认会
使用iso-8859-1进行编码和解码),可以在jdbc url后添加 useUnicode=true&characterEncoding=utf8。
创数据库时-- 可以create database XXX dafault character set utf8;
5.servlet获得请求路径---->String request.getRequestURI();
13.什么是DAO? --封装了数据访问逻辑的一个模块。
14.为什么要使用工厂类?--工厂为调用者提供符合接口要求的对象(这个对象一般称为产品),这样做的好处是,
调用者不用了解对象的创建的细节,这样,当对象的创建过程发生改变,不会影响到调用者。
15.servlet的生命周期
--servlet容器如何去创建servlet对象?
如何给servlet对象分配资源?
如何调用servlet对象的方法来处理请求?
如何去销毁servlet对象的整个过程?
16.JSP
1.设置contentType属性 --> response.setContentType的内容:<%@page contentType="text/html;charset=utf-8"%>
2.设置pageEncoding属性: --> 告诉容器.jsp文件的编码格式,这样,容器在读取jsp文件的内容时(即解码)时,不会出现乱码。
el表达式?--是一套简单的计算规则,用于给jsp标签的属性赋值,也可以直接输出 ---->${}
JSTL? 是由apache开发的标签库然后捐献给SUN,SUN结合EL然后再开发提供一套标签库JSTL
17.如何转发?<<<<<<<<<<<<<<<<-------------JSP
step1, 绑订数据到request
//name:绑订名, obj:绑订值
request.setAttribute(String name,Object obj);
step2, 获得一个转发器
//url:要转发给哪一个web组件
RequestDispatcher rd =
request.getRequestDispatcher(String url);
step3,转发
rd.forward(request,response);
step4, 在转发的目的地,可以使用request.getAttribute
方法获得绑订的数据,然后进行处理。
//如果name对应的值不存在,会返回null。
Object request.getAttribute(String name);
--->获得实际部署时的应用名:String request.getContextPath();
18.转发与重定向的区别
(1)转发的目的地只能是同一个应用内部某个组件的地址,
而重定向的目的地是任意的。
(2)转发之后,浏览器地址栏的地址不变,而重定向会变。
(3)转发所涉及的各个web组件可以共享request对象,而
重定向不可以。
(4)转发是一件事情未做完,而重定向是一件事情已经做完。
19.状态管理
--cookie
1)什么是cookie?
a, 是一种客户端的状态管理技术。
b, 当浏览器访问服务器的时候,服务器可以将少量的
数据以set-cookie消息头的方式发送给浏览器,浏览器
会将这些数据保存下来;当浏览器再次访问服务器时,会
将之前保存的这些数据以cookie消息头的方式发送给
服务器。
2)如何创建一个cookie?
//name:cookie的名称, value:cookie的值。
Cookie c = new Cookie(String name,String value);
response.addCookie(c);
3)查询cookie
//如果没有任何的cookie,返回null。
Cookie[] request.getCookies();
//返回cookie的名称
String cookie.getName();
//返回cookie的值
String cookie.getValue();
4)编码问题
cookie的值或者名称只允许出现合法的ascii字符串。
如果是中文,需要将中文转换成ascii字符串。
String URLEncoder.encode(String str,String code);
String URLDecoder.decode(String str,String code);
5)cookie的生存时间
默认情况下,浏览器会将cookie保存在内存里,只要浏览器
不关闭,cookie会一直存在。
cookie.setMaxAge(int seconds);
注意:
a, 单位是秒。
b, 当seconds > 0时,浏览器会将cookie保存在硬盘上,
当cookie保存的时间超过了seconds,则cookie会被浏览器
删除。
当seconds < 0时,缺省值
(浏览器会将cookie保存在内存里)。
当seconds = 0时,删除cookie。
比如,要删除名称为userId的cookie:
Cookie c = new Cookie("userId","");
c.setMaxAge(0);
response.addCookie(c);
6)cookie的路径问题
a,路径问题指的是:浏览器在向服务器上的某个
地址发请求时,会比较请求地址与cookie的路径是否
匹配,只有匹配的cookie才会发送。
b, cookie有一个默认的路径,等于创建该cookie的
组件的路径,比如,/web06_2/app01/addCookie.jsp
创建了一个cookie,则该cookie默认的路径
是"/web06_2/app01"。
c,匹配规则
只有当要访问的地址是cookie的路径或者是其子
路径时,浏览器才会将这个cookie进行发送。
比如:
cookie的路径是"/web06_2/app01",则
访问:
/web06_2/app01/findCookie2.jsp ok
/web06_2/app01/sub/findCookie3.jsp ok
/web06_2/findCookie1.jsp error
d,可以调用 cookie.setPath(String path)方法来修
改默认的路径。
一般我们会设置 cookie.setPath("/appname");
这样,应用内部的某个组件所添加的cookie可以被
该应用内部的其它组件访问到。
7) cookie的限制
a, cookie可以被用户禁止。
b, 因为cookie保存在浏览器端,所以cookie不安全。
对于一些敏感的数据,需要加密处理。
c, cookie只能够保存少量的数据(大约是4k左右)。
d, cookie的个数也有限制(浏览器只能够保存大约
300个左右的cookie,另外,对于某个服务器,也有
cookie个数的限制,大约是20个)。
e, cookie只能够保存字符串。
--session
--如何创建一个session?
(1)session是什么?
a,session是服务器端的状态管理技术
b, 当浏览器访问服务器时,服务器会创建一个
session对象(该对象有一个唯一的id号,称之为sessionId),
接下来,服务器在默认情况下,会使用set-cookie消息头
将这个sessionId发送给浏览器,浏览器会将这个sessionId
保存下来(内存);当浏览器再次访问服务器时,会将sessionId
使用cookie消息头发送给服务器,服务器依据这个sessionId
就可以找到之前创建的session对象。
(2)如何获得一个session对象
1)方式一
//HttpSession是一个接口
HttpSession s = request.getSession(boolean flag);
当flag = true时:
服务器会先检查请求当中是否有sessionId,如果
没有,则创建一个session对象。如果有sessionId,
则服务器会依据sessionId查找对应的session对象,
如果找到了,则返回,找不到,服务器会创建一个
新的session对象。
当flag = false时:
服务器会先检查请求当中是否有sessionId,如果
没有,则返回null。如果有sessionId,则服务器会
依据sessionId查找对应的session对象,如果找到了,
则返回,找不到,返回null。
2)方式二
HttpSession s = request.getSession();
等价于request.getSession(true)。
(3)HttpSession接口中提供的常用方法
//获得sessionId
String getId()
//绑订一个对象到session对象上。
setAttribute(String name,Object obj);
//获得绑订对象,如果不存在,返回null。
Object getAttribute(String name);
//解除绑订
removeAttribute(String name);
(4)session的超时
服务器会将空闲时间过长的session对象删除掉。
服务器默认的session超时限制一般是30分钟,可以修改
这个默认的超时限制,比如,可以修改tomcat的web.xml
文件。
<session-config>
<session-timeout>30</session-timeout>
</session-config>
修改之后需要重新启动tomcat服务器。
也可以修改某个应用的web.xml。
也可以通过编程的方式来修改超时的限制
setMaxInactiveInterval(int seconds);
(5)立即删除session
invalidate()
20.session的优点
a, session比较安全(相对于cookie)
b,session能够保存的数据类型更加丰富(cookie
只能保存字符串)
c, session能够保存的数据大小更大(cookie只能保存
大约4k左右的数据)
d, cookie可以被用户禁止,而session没有这个问题。
缺点:
a, session会将数据放在服务器端,所以,对服务器的
资源的占用比较大。而cookie会将数据保存在浏览器端,
对服务器资源的占用没有。
b, session默认情况下,会将sessionId以cookie的方式
发送给浏览器,浏览器会将session保存到内存里面,
如果浏览器关闭,浏览器发请求时就没有sessionId,
服务器端的session对象就找不到了。
21.Servlet的过滤器
(1)什么是过滤器?
servlet规范当中定义的一种特殊的组件,可以拦截servlet容器
的调用过程并进行相应的处理。
(2)如何写一个过滤器?
step1,写一个java类,实现Filter接口。
step2, 在doFilter方法里面,编写处理逻辑。
step3, 配置过滤器。
(3)过滤器的优先级
如果有多个过滤器都满足过滤的条件,则容器会依据
<filter-mapping>的先后顺序来调用过滤器。
(4)初始化参数
step1, 使用<init-param>配置初始化参数
step2,调用
String FilterConfig.getInitParameter(String paramname);
(5)优点
a, 可以实现代码的“可插拔性”(增加或者减少某个模块,不
会影响程序的正常运行)。
b,可以将多个组件相同的处理逻辑集中写在过滤器里面,
方便代码的维护。
Servlet的监听器
1)什么是监听器
servlet规范当中定义的一种特殊的组件,用来监听
容器产生的事件并进行处理。
容器会产生两大类事件:
a, 生命周期相关的事件:容器在创建或者销毁request,
session,servletContext(servlet上下文)时产生的事件。
b,绑订相关的事件:容器调用了request,
session,servletContext的setAttribute,
removeAttribute时产生的事件。
(2)如何写一个监听器
step1, 写一个java类,实现监听器接口(依据监听的事件类型来选择对应的接口)
step2, 在监听器接口定义的方法里面,编写处理逻辑。
step3,配置
统计在线人数:
(3)ServletContext
a,容器在启动的时候,会为每一个应用创建唯一的一个
符合ServletContext接口要求的对象(Servlet上下文),
该对象会一直存在,除非容器关闭。
b,如何获得Servlet上下文
b1, GenericServlet.getServletContext();
b2, HttpSession.getServletContext();
b3, ServletConfig.getServletContext();
b4, FilterConfig.getServletContext();
c,作用
c1,绑订数据
setAttribute,removeAttribute,getAttribute
request,session,servletContext都提供了绑订数据
相关的三个方法。如果都满足使用的条件,应该优先使用
生命周期短的(request的生存时间<session<servletContext)。
request对象上绑订的数据只有同一个请求所涉及的各个
web组件可以共享,比如:
一个servlet将数据绑订到request,然后转发到一个jsp。
请求先交给过滤器来处理,然后调用servlet。
session对象上绑订的数据是同一个会话所涉及的各个
web组件可以共享。
servletContext绑订的数据是公开的,谁都可以访问,而
且随时可访问。
c2, 访问全局的初始化参数
即使用<context-param>配置的初始化参数,可以被
同一个应用中的所有的servlet,filter共享。
String getInitparameter(String paraName);
c3, 依据逻辑路径(path)获得实际部署时的物理路径。
String getRealPath(String path);
22.servlet线程安全问题
(1)为什么说servlet会有线程安全问题?
当容器收到一个请求之后,会启动一个线程来处理该请求,
如果有多个请求到达容器,并且这多个请求要访问的是同
一个servlet,则会发生多个线程调用同一个servlet的情况,
此时,就需要考虑线程安全问题了,比如,这多个线程都要
修改servlet的属性值。
(2)如何处理线程安全问题
a, 加锁
使用synchronized对方法或者代码块加锁。
加锁会影响一些性能。
b,让一个servlet实现SingleThreadModel接口。
容器会为这样的servlet(实现了SingleThreadModel接口)
创建多个实例(一个线程一个实例)。
因为有可能会产生过多的servlet实例,所以,
在比较大型的应用当中,尽量少用。
========================================Servlet小结=========================================
(1)servlet基础
1)什么是servlet?
2)如何写一个servlet?
3)servlet容器是什么?
4)servlet依不依赖某个特定的servlet容器?
5)http协议(了解)
6)get请求与post请求
7)表单的处理
a,如何获得表单中的参数值
b,中文参数值如何获得
8)servlet如何输出中文
(2)servlet核心
1)重定向与转发
2)如何获得请求参数值
3)容器如何处理请求资源路径
4)servlet的生命周期
5)线程安全
6)servletContext
(3)状态管理
1)什么是状态管理
2)cookie
a, cookie是什么?
b,如何创建一个cookie?
c, cookie的编码问题
d, cookie的生存时间
e,cookie的路径问题
f,cookie的限制
3)session
a,什么是session?
b,如何获得一个session?
c, session的常用方法
d, session的超时
e,删除session
f,如果用户禁止cookie,如何继续使用session
g,session的优缺点(和cookie比较)
(4)数据库访问
a,如何使用jdbc访问数据库
b, dao
(5)过滤器和监听器
(6)典型案例和扩展
员工管理
session验证
验证码
购物车
上传文件
j2ee1.4+version="2.4"+tomcat5.5
j2ee5.0+version="2.5" +tomcat6.0