MYSQL
rownum自身特性:只能查询<的数据,不能查询>的数据
SQLserver,oracle
row_number()over(字段)
指定字段值预编译,然后将预编译好的字段值
文件上传
a 引入两个jar apache:commons-fileupload.jar组件,且依赖commons-io
b 上传文件 type = “file”,如果有上传组件,必须提交方式为post,method = “post”,在表单中必须增加一个属性 enctype=“multipart/form-data">
代码
if(isMultipart){ //判断前台的form是否有mutipart属性
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
//通过parseRequest解析form中所有请求字段,并保存到items集合中(即前台传递的数据)
List<FileItem> items = upload.parseRequest(request)
//遍历items中数据
注意的问题 上传的目录 upload
1 如果修改代码,则在tomcat重新启动时会被删除
原因:当修改代码时,tomat会重新编译一份class,并重新部署(重新创建各种目录)
2 如果不修改代码,则不会删除(class仍然是之前的class)
因此,可以将上传目录放在非tomat文件夹里
servlet控制文件上传类型及大小
a 可以通过"."后缀名来判断文件类型
b 可以通过setSizeMax()函数来控制单个文件大小
upload.setSizeMax();单位:字节B
c 设置上传文件时,用到的临时区的缓冲n'g文件的大小factory
factory.setRepository();单位为b
//设置临时文件夹
setRepository(new File("uploadtemp");
下载 不需要jar包
a 请求(地址a form),请求servlet
b servlet通过文件的地址 将文件转为输入流 servlet中
c 通过输出流 将 刚才已经转化为输出流的文件 输出给客户
注意:下载文件 需要设置两个响应头
response.addHeader(“content-type”,“application/octet-stream”);二进制,任意文件
response.addHeader("content-Disposition","attachement;filename="+fileName);fileName包含了文件的后缀名
下载时乱码,出现中文时
edge:
需要转码URLEncoder.encode(fileName,“UTF-8”)
firefox:给文件名加
前缀:=?UTF-8?B?
String构造方法
Base64.encode
后缀:?=
JSTL
四大分类
a 核心标签,最常用.core.也就是通常说的c标签
b 格式化标签
c sql标签
d xml标签
核心标签共13个,功能上可分为4类
1 表达式控制标签 out,set,remove,catch
out 标签用法 1 输出常量 ,可在value属性中直接赋值。2 输出变量,变量不存在时可配合default属性输出默认值,还可以通过escapeXML控制转移字符的输出方式。
2 流程控制标签 if,choose,when,otherwise
3 循环标签 foreach,for tokens
4 URL操作标签 import,url,redirect
EL变量
jsp内置对象。Page,Request,Session,Application
EL名称 PageScope,RequestScope。SessionScope,ApplicationScope,也就是说,jsp的内置对象,要在EL中使用,需要在后面加上Scope。如果没有限定,EL会先在Page中找,然后是Request,然后是Session,最后是Application。如果都没有,EL会进行优化,本来会输出null,el会输出空字符串。el会自动进行类型转化,如 ${param.count+20}
el表达式获取jsp隐式对象,可以通过PageContext来间接获得例如${PageContext.session}
要使用JSTL,需要引入两个jar包:jstl.jar,standard.jar还要jsp头文件加入taglib:其中prefix=“c”前缀
核心标签库:通用条件库,条件标签库,迭代标签库
<c:out>
<c:set>
<c:remove>
过滤器
1 过滤器 请求,响应
2 需要过滤器放行
引入Filter包,实现Filter接口,实现了三个方法,void init,void doFilter(通过此方法进行拦截),void destroy,同时需要在xml文件中配置过滤器Filter,类似于Servlet。注意 * 代表一切请求
放行 chain
过滤器中的doFilter方法参数:ServletRequest
在Servlet中的方法参数:HttpServletRequest
过滤器链,可以配置多个过滤器,过滤器顺序在xml文件中<filter-mapping>的位置决定的
监听器
开发步骤
a 编写监听器
b 配置web.xml
a 监听对象的创建和销毁
监听对象:“request session application”
request:ServletRequestListener 两个方法,分别在创建或销毁时触发
session:HttpSessionListener 两个方法分别在创建或销毁时触发
application:ServletContextListener 两个方法分别在创建或销毁时触发
(Servletontext在servlet容器启动时,自动创建 )
b 监听对象中属性的变更(增加,删除,替换)
request:ServletRequestAttributeListener
session:HttpSessionAttributeListener
application:ServletContextAttribute Listener
需要实现后面的 一个监听器接口
配置:需要在xml文件中配置 <listener> 类名</listener>就可以
session的绑定解绑,钝化(持久化)活化
钝化:内存->硬盘
活化:硬盘->内存
session的四种状态:(监听这些状态时不需要配置web.xml)
(监听绑定和解绑的接口:HttpSessipnBindin gListener
this代表了 绑定的对象是 a;event 可以获取存储a对象的session
a session.setAttribute(“a”,xxx) 对象a绑定到session中
b session.removeAttribute(“a”) 将对象a从session中解绑
监听Session的对象钝化活化 HttpSessionActivationListener
sessionWillPassivate(HttpSessionEvent se)//监听即将钝化的对象。即将钝化之前,会触发此方法
sessionDidActivate(HttpSessionEvent se)//监听活化
c 钝化
d 活化
如何钝化,活化:配置 tomcat安装目录/conf/context.xml的Manager classname=“org.apache.catalina.session.PersistenceManger maxIdleSwap:最大空闲时间,如果超过该时间,将会被钝化。
<Store>通过FileStore类具体实现钝化操作。
directtory:相对路径,相对于()项目文件
钝化活化的本质就是序列化,反序列化:序列化,反序列化需要实现Seriizable接口
AJax 实现方式
1 js 依赖XMLHttpRequest对象
XMLHttpRequest对象的方法:1 open(提交方式get或false,服务器地址,true):与服务端建立连接。true采用异步刷新,false全局刷新. 2 send(): get: send(null) post: send(参数值) 3setRequestHeader(header,value):get不需要此方法,post需要设置。a 如果请求元素中包含了 文件上传:setRequestHeader("Content-type",multipart/formdata") b如果请求元素中不包含了 文件上传:setRequestHeader("Content-type","application/x-www-form-urlencoded")
XMLHttpRequest对象的属性 :readyState: 请求状态,只有状态为4代表请求完毕 status:响应状态,只有200代表响应正常。onreadystatechange:回调函数。responseText:返回或响应格式为String tresponseXML:返回或响应格式为XML
2 jquery下的ajax
第一种方式(推荐):$.ajax({url:服务器地址,请求方式:get|post,data:请求数据,success:function(result,testStatus){ 请求成功执行函数}
error:function(xhr,errorMessage,e){ 服务器故障时触发函数});
第二种 get方式(严格要求参数顺序)$.get(服务器地址,请求数据,function(result){只有一个function函数},预期返回值类型(string/xml/json......));
第三种 post方式(严格要求参数顺序)$.post(服务器地址,请求数据,function(result){只有一个function函数},预期返回值类型(string/xml/json......))
第四种load $(xxx).load(服务器地址,请求数据,function(result){函数}) 作用:将服务端的返回值,直接加载到$(xxx)对象所选择的元素中
JNDI:java命名与目录接口
pageContext(当前页面有效)< request(一次请求有效) < session(一次会话中有效) < application (一个项目运行中有效)
可以将任意的资源或者对象命名,将它放到配置文件(tomcat/conf/context.xml--<Envirment>)中,之后就可以通过名字来获取资源或者对象
注意type类型需要导入java所在的包。
OBJECT looup(java:comp/env/ String name);此函数通过名字来拿值。
约定
连接池
对于数据库来说,打开关闭数据库比较浪费资源,消耗性能。建立数据库连接池(个人理解有点概念像线程池)。常见的连接池:tomcat自带有tomcat—dbcp,别的有dbcp,c3p0,druid。
数据源datasource 包括连接池 ,可以用数据源(java.sql.DataSource)可以管理连接池.
Tomcat-dbcp:
1 类似jndi,在context.xml中配置数据库
配置(类似于jdbc)
name:连接池名字
2 在工程web.xml中配置
<resource-ref>
<res-ref-name>student</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
3 将访问数据库的连接指向数据源,而不再直接指向数据库.更改连接对象Connection的获取方式。通过数据源拿连接对象。
传统的方式:connection = DriverManager.getConnection(URL,USERNAME,PASSWORD);
数据源方式:
Context ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup(name:"java:comp/env/student");
ds.getConnection();
apache DBCP连接池:apache 出品。
1 先引入jar包,使用的BasicDataSource,BasicDataSourceFactory类
2