javaweb开发笔记2

这篇博客主要讲解了JavaWeb开发中的文件上传和下载,介绍了Apache Commons FileUpload组件的使用,以及如何设置上传目录和限制文件大小。此外,还探讨了JSTL的核心标签库,包括out、if、foreach等标签的用法。过滤器部分解释了过滤器的工作原理、配置以及过滤器链。最后提到了JNDI和连接池的概念,特别是Tomcat-DBCP的配置和使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值