第十四天:听课笔记

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中

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值