1.sendRedirect 和 forward
sendRedirect 是 通知浏览器访问JSP
forward 是服务器自己访问JSP
Servlet访问JSP
通过 域 传递数据 JavaBean
通过forward可以 sendRedirect不行
域 本质上是容器
2.要是传入给JSP的是集合,那得要<% %>装Java代码
美工是不干滴,看着就恶心
EL JSTL 来取代脚本表达式
3.EL时代开始了
EL 用来获取数据
${}
PageContext.findAttribute()
JSP最终会翻译成Servlet
pageContext JSP上下文
findAttribute 依次从page , request, session, application setAttribute getAttribute
要是在四个域中都没有,返回"" 而不是null --> NullPointerException
4.EL访问JavaBean
JavaBean cn.itcast.domain
Servlet JSP cn.itcast.web
数据访问层 cn.itcast.dao
业务逻辑处理 cn.itcast.services
<jsp:useBean id class scope>
class一定要包名。类名 不能import 直接类名
<jsp:setProperty name property value>
<jsp:getProperty name property>
EL: ${XXX.YYY}
结合JSTL 从集合中取数据
5.EL进行简单的逻辑判断
和JSTL一起更强大
6.JSTL标签库
一堆标签的仓库
Sun公司开发的高级标签,给俺们用的
用来替代脚本代码
jstl.jar standerd.jar --> lib BuildPath 重新发布
<%@ taglib prefix="" uri=""%>
META-INF jar包的配置文件 c.tld 在uri中导入核心库的uri
<c:forEach items="从哪个集合(结合EL)" var="临时名" >
临时名具体输出
</c:forEach>
扩展:集合中传入的是对象
扩展:Map集合
items var items指定哪个集合 var临时
entrySet 返回key value的集合
${XXX.key} ${XXX.value} 我敢说他用了entrySet
想底层原理
<c:if test="">
....
</c:if>
test中放判断条件
将数据封装成对象 user对象:用户名和密码
7.文件的上传和下载
<input type="file"/>
form action=/代表web应用的上一层 method="post" enctype="multipart/form-data"
fileupload
commons-io.jar commons-fileupload.jar
8.上传
1.创建工厂 :缓冲区大小,临时目录,
临时目录(用this.getServletContext().getRealPath("/")+"upload/")
思想:判断是否存在,不存在就创建
2.创建ServletFileUpload,得到FileItem的集合 是否为multipart/form-data 设置大小 设置编码 设置监听器
封装成FileItem
List<FileItem> parseRequest(request)
ServletFileUpload upload = new ServletFileUpload(factory);
3.遍历集合,得到每个FileItem
4.判断:是文件 还是 FormField
FormField :
getFieldName getString
文件:得到流
getFieldName getInputStream
将Stream变为File
读出与写入 目录名+文件名
5.关流
步骤:
1.创建DiskFileItemFactory对象,并设置缓冲大小和临时文件保存目录
2.根据factory创建ServletFileUpload对象,并调用这个对象的parseRequest把上传表单解析成一个个FileItem
3.对每一个FileItem进行判断,如果isFormField为true,代表上传的是普通表单项
否则为文件
4.得到FileItem的输入流对象,并读取数据,写入到服务器的文件中
5.关流
关流后删除临时文件
XXX.close();
delete
9.乱码 setHeaderEncoding 或者 request.setCharacterEncoidng
10.uploadtemp 和 upload
11.多个文件上传 结合JS
添加 删除
添加的时候 把两个放入<div> 删除的时候就删div
this.parentNode 搞清楚,什么删什么 removeChild
12.安全问题 上传JSP,别人执行它
shutdown -a
将上传的文件放到WEB-INF web应用程序访问不到
WEB-INF 禁止外界访问 Servlet可以访问
或者不受WEB服务器管理的目录
13.为防止多个用户上传相同的文件名的文件
唯一的文件名
UUID radomUUID toString XXX(唯一标示)+"_"+文件名 方便下载时知道它的文件名
生成算法,分散存放 ---> hash算法生成目录树
public String hashpath(String fileName){
int hashcode = fileName.hashCode();
int dir1 = hashcode&0xf;
int dir2 = (hashcode&0xf0) >> 4;
return dir1+"/"+dir2+"/";
}
mkdirs mkdir 多级目录是s
14.将它封装成工具类,方便后期使用
15.显示上传进度
ProgressListener 字节 KB 百分数
结合AJAX
16.文件下载
两者方式:
(1)超链接指向资源
要是放到WEB-INF 就访问不到了 (下载别人上传的)
盗链 别人下载的指向你的了,吃亏
(2)通过程序
1.设置头
response setContentType("application/x-msdownload")
response setHeader("Content-Disposition", "")
2.得到该文件的流
路径通过getServletContext().getRealPath
3.写给客户端,每读多少字节就写多少
ServletOutputStream response.getOutputStream -->字节
4.关流
17.案例:
遍历上传目录下的所有文件显示给用户,用户可以下载
中文乱码 超链接是get方式 先编码后解码(String getBytes)
18.写博客,总结知识点
19.QQ群 : 27139555
20./
要是给浏览器用的 是webapps
要是给web服务器用的 是web应用
21.WEB-INF 建文件夹
放.jsp 别人就访问不到 只能通过转发访问
以后工作了 都是将jsp放入WEB-INF , 都是通过Servlet转发访问的
例外:将index.jsp开放,不放到WEB-INF中