javaweb

目录

html

css

JavaScript

jQuery

tomcat

servlet(是一个接口)

jsp(java serverpages)

el表达式(expression  language)

文件上传

文件下载 

session会话(cookie保存在客户端,而session存在服务器端)

filter过滤器

json

ajax(异步)


html

1.a标签  target属性_self表示当前页面跳转(默认) ,_blank表示打开新页面跳转

2.ul无序列表,里面用li,ol有序列表,里面用li。type属性的none可以把列表前面的符号去掉

3.java里绝对路径是盘路径,web里绝对路径是http://地址:端口号/工程名/资源路径

4.img标签的alt里的文字表示图片显示不了的时候显示的文字,border属性设置边框

5.table标签,tr标签是行,th标签是表头标签代表居中加粗,td标签是一个单元格。

cellspacing属性单元格间距(0最小代表重叠),align属性设置表格相对页面位置,文字相对单元格位置等等。colspan属性跨列,rowspan属性跨行

6.iframe标签在页面开辟一个小区域显示另一个页面,在iframe标签设置一个name属性,页面写一个a标签target写iframe的name名字,可以实现点击超链接,改变内嵌窗口iframe的显示页面

7.表单form里的input标签的type属性值radio为单选框,多个单选框需要设置同一个name,不然实现不了只能单选的效果。check属性值checked表示默认选中。checkbox复选框

8.select标签下拉列表,option标签代表每一个选项。select属性的selected表示默认选中

9.textarea标签多行文本输入框,rows属性设置可见行数,cols设置每行字符数。

10.type属性为reset设置表单的重置按钮。submit提交按钮。file文件上传域。hidden隐藏域

11.表单form内用table来让内容显示的整齐一点

12.form标签的action属性设置提交到的服务器地址,method属性是提交方式(默认为get)

细节:表单内的内容必须加上name属性,不然发不到服务器。

           单选复选以及下拉框的option选项都必须加上value。

13.get和post提交方式的区别

               get提交会在地址处显示?参数=值&,不安全,并且必须都是ascall码值。有长度限制

              非ascall值必须用post,     post提交在地址栏不显示具体参数,相对安全。理论上没有长度限制。

14.div标签默认独占一行,span标签长度是数据的长度,p段落标签默认上下各空一行(已空则不再空)

css

1.border:边框宽度(单位px等等),边框的样式(solid实线),边框的颜色(颜色有好几种实现方式)

2.方式一在标签里用style属性,再写css语句

方式二在head里用style标签设置type为text/css,在标签内用选择器来写css样式

方式三用.css文件然后link标签引入

3.选择器:

                标签名选择器   标签名{}

                id选择器   #名字{}

                class类选择器   .名字{}

                组合选择器      选择器1,选择器2,选择器3{}

JavaScript

1.js是弱类型,java是强类型。var i;i可以赋int ,string等等类型,而java在定义变量时就定好了类型

2.用script标签引入,type属性text/javascript,src属性xx.js

3.undefined是变量未定义,null空值,NAN非值

4.数值类型都是number

5.==比较字面量,===比较字面量以及类型比较

例如12==“12”   true

        12===“12”   false

6.在js中所有的变量都可以作为boolean类型的变量使用,

        0,null,undefined,“”都认为是false

7.&&:当表达式都为true,返回最后的一个true的值

             当有一个为false,返回第一个为false的值

8.||:当表达式全为假,返回最后一个表达式的值

        当一个为真,返回第一个为真的值

9.定义数组,var 数组名=[x,x,x],数组会根据最大下标自动扩容。

10.定义函数方式一  function   f(a,b){}   不需要写参数类型

                    方式二  var 函数名 = function (参数列表){}

11.js里函数不允许重载,会覆盖定义

12.js中函数有一个隐形参数,类似于java的可变长参数,实际上是一个数组叫arguments

无参方法里写参数就是将参数存入这个隐形数组里

13.Object形式的对象的定义:

                        var 变量名 =new Object()

                        变量名.属性 = 值

                        变量名.函数名 = function(){}

             对象的访问

                        变量名.属性 /函数名()

14.{}形式的对象的定义

                var  变量名 = {

                              属性名:值,

                               属性名:值,

                                函数名:function(){}

                        }

15.事件:

                onload加载完成事件       页面加载完成后,常用于页面代码初始化

                onclick单击事件      常用于按钮的点击事件

                onblur 失去焦点事件   用于输入框失去焦点验证操作

                onchange 内容发生改变   用于下拉列表和输入框内容改变后操作

                onsubmit 表单提交事件    表单提交前验证数据是否合法

事件的静态绑定,在标签写onxxx属性=“方法()”,然后方法在script里写明

动态绑定,通过document.getElmentById("xxx")得到对象,然后对象.onxxx = function(){}

document表示文档,通过选择器得到对象

getElmentByName

getElmentByTagName

16.DOM    document   object model   文档对象模型

17.正则对象.test(文本对象)方法用于测试是否符合正则表达式,返回true或者false

18.

正则表达式(用//包裹)(RegExp对象):

                /e/     字符串是否包含e

                /[abc]/  字符串是否包含a或b或c

                /[a-z]/   字符串是否包含小写字母

                 /[0-9]/   字符串是否包含任意数字

元字符:

               /\w/表示查找单词字符,包括a-z,A-Z,0-9,以及下划线

               /\W/查找非单词字符

                /\d/查找数字

量词:

                /a+/表示字符串是否包含至少一个a

                /a*/表示字符串是否包含0个或多个a

                /a?/表示字符串是否包含0个或一个a(很多个a也true,因为包含只需要满足最小条件就行)

                /a{3}/表示字符串是否包含连续三个a

                /a{3,5}/表示字符串是否最少包含连续三个a,最多包含五个连续a(大于五个也行,因为包含是满足最小条件即可)

                /a{3,}/表示字符串是否最少包含连续三个a

                /a$/表示字符串必须以a结尾(a不能在其他位置)

                 /a^/表示字符串必须以a开头(a不能在其他位置)

                 /^a{3,5}$/表示字符串从头到尾都必须匹配至少3个最多五个连续a

                /^\w{5,12}$/这样子就表示从头到尾必须是5到12个字母数字下划线

结论:加了^$表示整个字符串,不加只需要部分满足。

19.DOM的innerHTML属性表示起始和结束标签之间的内容(可以是文本也可以是html语句等等)

20.getElmentsByName  返回多个指定名称对象的集合 (操作和数组相同也是由下标来操作)

getElmentsByTagName 返回多个指定标签名对象的集合

21.页面加载完成后操作的节点,若写在head的script里需要加上window.onload = function(){}

因为浏览器解析代码是一行行解析的,所以不先加载页面会导致节点获取不到。

jQuery

jQuery就是js和query查询,是javascript的一个类库。

需要用script引入jQuery的js类库

在jQuery里面$是jQuery的核心函数,$:()就是调用这个函数

1.$(function(){

})          相当于onload页面加载完成之后,全写是$(document).ready(function(){})

2.$("#id名")按标签查询对象,jQuery中点击事件是下面的click

通常给jQuery对象加上$符号,效果没区别,只是便于区分

$(function (){
    var $aaa = $("#aaa")
    $aaa.click(function (){
        alert("aaaaaaa")
    })
})

3.$()里

传入的参数为函数,表示页面加载完成之后,相当于window.onload

传入的参数为html字符串,会创建这些html标签对象

传入的参数为选择器字符串时,根据字符串查找元素节点对象

传入的参数为dom对象,将dom对象包装成jQuery对象返回

4.通过document.getElmentById得到的就是dom对象

getElmentsByName得到的就是dom对象

getElmentsByTagName得到的就是dom对象

dom对象是[object HTML标签名Element]这种形式的

而通过jQuery提供的api创建的对象是jQuery对象

jQuery提供的api查询到的对象是jQuery对象

jQuery包装的dom对象也是jQuery对象

jQuery对象是[object,object]形式的

5.jQuery对象本质是dom对象的数组+jQuery提供的一系列函数

jQuery对象不能使用dom对象的属性和方法

6.jQuery对象和dom对象相互转换(通常给jQuery对象加上$符号,效果没区别,只是便于区分)

dom转jQuery      var  $jquery =  $(dom对象)

jquery转dom       var dom = $jquery对象[下标](用下标取出对应的dom对象)

7.$("#id,div,p.class1")这种形式将匹配的所有选择器对应的元素返回

p.class1表示必须是p标签并且class类型为class1

8.css()方法可以设置和获取样式

例如$("#id").css("background-color","#bbffaa")

9.层级选择器:

找到form下的所有input后代元素      $("form input")

找到form父元素下的所有input子元素      $("form>input")

匹配跟在label后面的input元素(下一个)     $("label + input")

找到form后和form同辈的input元素     $("form~input")

10.过滤选择器 之基本选择器:

       :first 取匹配到的第一个元素          $("li:first")

       :last 取匹配到的最后一个元素          $("li:last ")

       :not(在括号写一个选择器)  查找所有未选中的input元素    $("input:not(:checked) ")

       :even     匹配tr标签里所有索引值为偶数的元素(下标从0开始)    $("tr :even")

       :odd    和上一个相同,只不过是奇数

       :eq  匹配一个给定索引值的元素     例如tr的第二行   $("tr :eq(1)")

       :lt   匹配所有小于给定索引值的元素       tr的第一第二行            $("tr :lt(2)")

       :gt     大于

       :header   匹配所有标题标签例如h1,h2    $(":header")

       :animated 匹配正在执行动画效果的元素 

      例如没有执行动画效果的最后一个div   $("div:not(:animated ):last")

11.过滤选择器之内容过滤器

        :contains(text)   查找所有包含xxx的div     $(":contains('xxx')")

        :empty  查找div所有不包含子元素的元素或者空元素     $("div:empty  ")

'       :parent  查找所有包含子元素或者文本的元素

       :has(选择器)   匹配含有选择器匹配到的元素的元素   $("div:has(p)")

        

12.过滤选择器之属性选择器

        [属性]   匹配含有指定属性的元素     $("div[id]")

        [属性=value]   匹配给定属性以及对应值的元素 $("div[id="xxxxx"]")

        [属性!=value]    有属性但不等于该值的元素

        [属性^=value]   匹配给定属性值是某些值开头的元素

        [属性$=value]  匹配给定属性值是某些值结尾的元素

        [属性*=value]  匹配给定属性值包含某些值的元素

13.过滤选择器之表单选择器

        :input 匹配表单所有input

        :text  匹配所有单行文本框

        :password

        :radio

        :checkbox

        :submit

        :file

        :hidden

        :reset

        :button

14.表单对象属性过滤器

        :disabled   不可用元素

        :enabled      例如可用的单行文本框有几个      $(":text:enabled")

        :checked   匹配所有选中的元素

        :selected  匹配所有选中的option元素        $("select option:selected")

        

15.each()方法是jQuery提供的遍历dom元素的方法,提供了一个this对象,就是遍历到的dom对象

each(function(){

alert(this.value)

})   

16.元素的筛选

        eq()     获取给定索引的元素

        first()  获取第一个元素

        last()  获取最后一个元素 

        filter(exp) 留下匹配的元素

        is()    判断是否匹配给定的选择器

        has(exp)  返回包含有匹配选择器的元素的元素

        not(exp) 删除匹配选择器的元素

        children(exp) 返回匹配给定选择器的子元素

        find(exp) 返回匹配给定选择器的后代元素

        ……

17.jQuery属性操作

      (下面三个都一样不传参是获取,传参是设置)

        html()  可以设置和获取开始和结束标签之间的内容,作用和dom属性innerHTML一样

        text()  可以设置和获取开始和结束标签之间的文本,作用和dom属性innerText一样

        val()   可以设置和获取表单项的value ,作用和dom属性的value一样

18.attr()   可以设置和获取属性值   ,不推荐操作checked,readonly,selected,disabled

attr("name")获取name

attr("name","xxx")设置name值

prop()      可以设置和获取属性值     ,推荐操作attr操作不了的属性

prop和attr作用一样,但是attr("checked") 返回未定义,而prop返回false。

19.DOM增删改

内部插入(子元素):

a.appendTo(b)           把a插入到b子元素末尾

a.prependTo(b)         把a插入到b子元素最前面

例如  $("<h1>aaa</h1>").appendTo($("div"))

外部插入(平级):

a.insertAfter(b)    得到ba

a.insertBefore(b)    得到ab

替换:

a.replaceWith(b)    a替换掉b(所有b变成一个a)

a.replaceAll(b)         a替换掉b(一对一替换)

删除:

a.remove()    删除a标签

a.empty()   清空a标签

20.css样式操作

addClass()   添加样式

removeClass()   删除样式

toggleClass()添加/删除样式(相当于选中再点击不选中)

offset()     返回匹配到的第一个元素相对于页面的位置(左上角的坐标)

用法offset({

             left:  ,

             top:

})

21.jQuery动画

以下动画方法都可以添加参数:

第一个参数动画执行时间(毫秒)

第二个参数动画的回调函数(动画完成后自动调用的函数)

show()    将隐藏的元素显示

hide()  将可见的元素隐藏

toggle()    可见就隐藏,隐藏就可见

fadeln()    淡入

fadeOut()    淡出

fadeTo()     在指定时长内慢慢的修改透明度到指定值(参数一时间,参数二透明度,参数三回调函数)

fade Toggle()     淡入淡出切换

22.jQuery事件操作

window.οnlοad=function(){}      原生的页面加载(后执行)(只会执行最后一次赋值函数)

$(function(){})       jquery 的页面加载(先执行)(写多个会执行多次,按写的顺序)

原因 

        jQuery的页面加载完成后是浏览器的内核解析完标签创建好dom对象就会立刻执行

        原生的页面加载完成后除了等创建好标签后,还要等标签显示需要的内容加载完成

23.jQuery的一些常用事件处理方法

click()     绑定单击事件或者触发单击事件(加function是绑定事件,不加是触发事件)

mouseover()   鼠标移入事件

mouseout()    鼠标移出事件

bind()     一次性绑定一个或多个事件     例如$("#id").bind("click  mouseover",function(){})

多个事件之间空格隔开

one()    使用上和bind一样,但是one绑定的事件只触发一次

unbind()    解除事件的绑定

live()     使用上和bind一样,可以用来绑定选择器匹配的所有元素,哪怕这个元素是后面动态创建出来的也有效

24.事件的冒泡:

父元素和子元素同时绑定一个事件,当子元素触发事件,会传递到父元素也会触发。

如何阻止事件的冒泡:

在子元素函数体类使用return  false;

25.JavaScript的事件对象

原生js获取事件对象:

                        window.onload  =  function(){

                                        decument.getElementById("id值").onclick =  function(event){

                                }

                         }

jquey获取事件对象:

                        $(function(){

                                $("#id").click(function(event){

                                })

                        })

使用bind对多个事件绑定同一个函数,怎么获取当前操作的事件

                      $(function(){

                                  $("#id").bind("mouseover   mouseout",function(event){

                                        if(event.type=="mouseover"){

                                        }                  

                                        else if(event.type=="mouseout"){

                                        }

                        })

                   })

26.图片移动跟随

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
  <script type="text/javascript" src="jquery-3.6.0.js"></script>
  <script>
    $(function (){

      $("#xxx").bind("mouseover mouseout mousemove",function (event){
        if (event.type=="mouseover"){
          $("#yyy").show()
        }else if (event.type == "mouseout") {
          $("#yyy").hide()
        }
        //从左上角向右下角很快移动会导致鼠标在大图片上,事件变成鼠标移出,隐藏大图片出现一闪一闪的效果,所以在left和top上加一个距离
        else if (event.type == "mousemove"){
          $("#yyy").offset({
            left:event.pageX+10,
            top:event.pageY+10
          })
        }
      })
    })
  </script>
</head>
<body>
<img src="02.jpg" id="xxx" >
<img src="02.jpg"id="yyy"   width="500px"  height="300px">
</body>
</html>

        

tomcat

1.request请求:客户端向服务器发送数据

   response响应:服务器向客户端回传数据

  有请求就有响应,成对出现

2.web资源:

        静态资源:html,css,js,txt,mp4,jpg

        动态资源:jsp页面,servlet程序

     

3.启动tomcat方式

方式一:bin下的startup.bat

方式二:cd 到tomcat的bin下 ,输入命令catalina run

关闭方式一:关闭窗口

关闭方式二:bin目录下的shutdown.bat

4.如何修改tomcat端口号(默认8080)(改完需要重启服务器)

修改在conf目录下的server.xml配置文件的connector标签的port属性

例如http协议默认的端口号是80,http://www.baidu.com:80

域名实际上就是ip,也是有端口号的。80端口号比较特殊会自动去掉

5.如何部署web项目到tomcat服务器

方式一:将web项目拷贝到tomcat服务器的webapps目录下(访问方式localhost:8080/工程名/文件名)

方式二:在conf的Catalina的localhost下建立一个xxx.xml文件(一个文件代表一个工程),

内容写为<Context path="/xxx"  docBase="D:\xxx\xxx"/>

Context表示一个工程上下文,path写访问路径,docbase写工程的绝对路径(意味着不需要放入webapps里去)

6.将html页面拖到浏览器运行和通过访问ip端口号工程文件的区别?

第一种html页面拖到浏览器运行使用的是file协议,直接读取本地硬盘的绝对路径来解析资源

第二种使用http协议,(通过网络)浏览器发送请求给服务器,服务器收到请求读取访问的资源文件回传给客户端要的页面内容,浏览器解析并展示。

7.webapps下的root目录工程的访问比较特殊

http://ip:port  不加工程名的时候默认访问的是Root工程

http://ip:port/工程名     不加资源名的时候默认访问index.html页面

8.idea整合tomcat服务器

在settings的Build的application  servers应用服务里添加tomcat  server

9.

 10.

11.配置资源热部署

servlet(是一个接口)

是Javaweb三大组件之一    servlet程序,Filter过滤器,listener监听器

是运行在服务器上的java小程序,可以接受客户端发送过来的请求,并响应数据给客户端


实现servlet程序

1.写个类实现servlet接口

2.实现service方法

3.在web.xml配置文件写servlet标签


servlet程序生命周期(理论上)
1.执行构造器方法
2.执行init初始化方法
前两步只在第一次访问创建servlet程序执行一次(说明这个实例是单例的),后面访问只执行第三步。
3.执行service方法,有servletrequest和servletresponse两个参数
4.执行destory方法,在web工程停止的时候才会调用。
表单提交有get和post两种方式,通常用于不同的业务。但是任一请求都会调用service方法。不好区分是哪个请求。
参数servletrequest类有一个子类httpservletrequest有一个getmethod方法可以获取到提交方式,然后if判断调用哪个方法。


在实际开发中,通过继承servlet的一个子类httpservlet类实现servlet程序

根据业务需要重写doget和dopost方法。(实际上httpservlet实现的service做的内容也和上面写的一样,getmethod来获取get还是post)


servlet的继承结构:


servletconfig类(servlet程序配置类),是一个接口

1.可以获取servlet程序别名servlet-name

2.获取初始化参数init-param(在web.xml里的标签)

3.获取servletcontext对象

servlet程序和servletconfig是由tomcat服务器创建的,都在第一次访问时创建。每个servlet对应一个servletconfig对象。


servletcontext类,是一个接口

1.表示servlet上下文对象

2.一个web工程只有一个servletcontext对象实例(重启服务器会销毁这个对象,并且存储的数据也会消失)

3.servletcontext对象是一个域对象(像map一样可以存取数据,域表示存取数据的操作范围)

存数据setAttribute(),取数据getAttribute(),删除数据removeAttribute()


servletcontext类的四个作用

1.获取web.xml配置的上下文参数context-param(在web.xml里的标签)

2.获取当前工程路径(格式:/工程路径)getContextPath()

3.获取工程部署后在服务器硬盘的绝对路径    getRealPath("/")   这个/表示http://ip:port/工程名/,也就是映射idea里web文件夹的位置

4.像map一样存取数据


http协议

get请求:

        1.请求行

                (1)请求方式

                (2)请求的资源路径【+?+请求参数】

                (3)请求的协议版本号   http/1.1

        2.请求头

                key:value   

                例如accept:告诉服务器客户端可以接受的参数类型

                        accept-language:告诉服务器客户端可以接受的语言类型

                        user-agent:浏览器的信息

                        accept-encoding:可接受数据编码格式

                        host:ip端口号

                        connection:1.keep-alive告诉服务器回传完数据保持一段时间连接

                                                2.closed  马上关闭

post请求:

         1.请求行

                (1)请求方式

                (2)请求的资源路径【+?+请求参数】

                (3)请求的协议版本号   http/1.1

        2.请求头

                key:value 

        这里有个空行

        3.请求体(发送给服务器的数据)

                name=value&name=value……


哪些是get请求,哪些是post请求?

get:

        1.form  method=get

        2.a标签

        3.link引入css

        4.script引入js

        5.img

        6.iframe引入窗口

        7.在浏览器地址栏输入地址后回车

post:

         1.form  method=post


response响应的http格式

        1.响应行

                (1)响应的协议和版本号  http/1.1

                (2)响应状态码    200

                (3)响应状态描述符   ok

        2.响应头

                key:value         

         空行

        3.响应体(回传的数据)

                


常见的响应码

200   请求成功

302   请求重定向

404    服务器收到请求,但是数据不存在(可能资源地址错了)

500    服务器收到请求,服务器内部错误(代码错误)


httpservletrequest类 

作用:每次有请求发送到服务器,服务器将请求的http协议信息封装到httpservletrequest对象中,然后作为参数传递到service方法(doget和dopost方法),我们可以通过这个对象获取到信息。

 getParameterValues()用于多个单选框返回的值,用数组

setCharacterEncoding("utf-8")  设置字符集防止中文乱码


请求转发

        1.地址栏不改变

        2.虽然访问了两个资源,但是只有一次请求

        3.共享request中的域数据

        4.可以转发到WEB-INF目录下(而浏览器不能直接访问这个目录)

        5.不能访问工程以外的资源

        在servlet1里调用getRequestDispatcher("/servlet2")     (/表示到web目录下)

        再用得到的对象掉forward(req,resp)


base标签设置页面相对路径工作时参照的地址。
/被浏览器解析表示http://ip:port
/被服务器解析表示http://ip:port/工程名
特殊情况response.sendredirect("/")表示http://ip:port

httpservletresponse类也是和httpservletrequest一样,在请求发送到tomcat服务器,由服务器创建的一个response对象。

响应流
getoutputstream()   字节流,用于回传二进制文件
getwriter()字符流,用于回传字符串
在doget或者dopost方法里两个流只能使用一种。


中文乱码解决方式一
设置服务器字符集
resp.setcharacterencoding("utf-8")
设置浏览器字符集
resp.setheader("Context-type","text/html,charset=utf-8")

中文乱码解决方式二
同时设置服务器和浏览器的字符集
resp.setcontenttype("text/html,charset=utf-8")



请求重定向  

方式一:             

1.设置响应码302表示重定向

setStatus(302)

2.设置响应头的新地址

setHeader("location","http://localhost:8080/工程名/新资源名")

方式二:

setRedirect("http://localhost:8080/工程名/新资源名")

特点:

1.地址栏改变

2.两次请求

3.不共享request域数据

4.不能访问web-inf目录

5.可以访问工程外的资源


jsp(java serverpages)

作用是代替servlet程序回传html页面的数据

jsp本质上是一个servlet程序。当第一次访问jsp页面时,tomcat服务器会将jsp页面翻译为一个java源文件,并将它编译为字节码文件。

实际上servlet源码和jsp翻译成的java源文件里都是通过输出流的write方法将html语句一行行回传给浏览器。


jsp头部的page指令

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

language   属性      表示jsp翻译后是什么语言文件(暂时只支持java)

contentType属性    表示返回的数据类型

pageEncoding属性  表示当前页面的编码集

import 属性    和java一样用于导包导类

errorPage属性   运行时出错自动跳转到的错误页面


jsp常用脚本

(不用)1.声明脚本格式    <%!  声明代码%>

作用:可以给jsp翻译出来的类定义属性方法甚至静态代码块,内部类等

(常用)2.表达式脚本格式 <%= 表达式%>(不能;结尾)

作用:输出整型,浮点型,字符串,对象

(常用)3.代码脚本  格式<%  java语句  %>

作用:在jsp页面编写java语句功能


jsp三种注释

html注释<!-- -->

java注释   //单行注释

                /**/多行注释

 jsp注释  <%-- --%>               


jsp九大内置对象

在tomcat翻译jsp成servlet程序源代码后内部提供的九个对象。

request   请求对象

response  响应对象

pageContext   jsp上下文对象

session   会话对象

application   servletcontext对象

config      servletconfig对象

out      jsp输出流对象

page    指向当前jsp对象

exception   异常对象


jsp四大域对象(存取数据)(优先顺序从小到大pageContext,request,session,application)

pageContext(pageContextImpl类)    当前jsp页面有效

request(httpservletrequest类)       一次请求有效

session(httpsession类)            一个会话范围有效(浏览器访问服务器到浏览器关闭为止)

application(servletcontext类)     整个web工程有效

获取方式:

<%=pageContext.getAttribute("key")%>

<%=request.getAttribute("key")%>

<%=session.getAttribute("key")%>

<%=application.getAttribute("key")%>


jsp中的out输出和response.getWriter()输出的区别?

 jsp翻译后底层源代码都用out输出,所以一般统一使用out输出,避免打乱页面输出顺序

out.write和out.print用哪个?

write只适合输出字符串

print底层会将任何类型都转为字符串然后用write输出


jsp常用标签

 静态包含(常用)

<%@ include file="/jsp页面的路径"%>

通常是网页的最下面部分,不经常改变每一页都相同

静态包含不会翻译被包含的jsp页面,而是把该页面代码拷贝到静态包含的位置执行输出。

动态包含(效果和静态的一样)

<jsp:include page="/jsp页面的路径">

动态包含会将被包含的jsp页面翻译为java代码。用java代码去执行输出

请求转发

<jsp:forward page="/jsp页面的路径"></jsp:forward>


Listener监听器(接口)

javaweb三大组件之一。

servletcontextlistener监听器可以监听servletcontext对象的创建和销毁,在web工程启动的时候创建,web 工程停止的时候销毁。

实现步骤:

1.写一个类实现servletcontextlistener接口

2.实现两个回调方法,创建时调的方法和销毁调的方法

3.在web.xml里写listener标签配置一下监听器


el表达式(expression  language)

1.作用是代替jsp页面的表达式脚本来输出数据(原来是<%=   %>),

改为${ 表达式}更简洁

区别:el表达式在输出null值时输出空串,而jsp表达式输出null

2.若四个域都有相同的key名,那么${key}输出的是按照优先级取范围域最小的输出

pageContext<request<session<application

3.如何用el表达式输出bean的普通属性,数组属性,list集合属性,map集合属性

变量.普通属性

变量.数组     (输出的是地址)

变量.数组[下标]

变量.list      (输出整个list集合)

变量.list[下标]

变量.map集合   (输出整个map集合)

变量.map.key    (输出对应value)

4.empty运算判断空            例如${empty 值}

值为null     结果为true

值为空串       结果为true

值为长度为0的数组      结果为true

list集合元素个数为0        结果为true

map集合元素个数为0       结果为true

5.点运算和中括号运算

例如map.put("a.a.a","value")

map.put("a","value")

${map[a.a.a]}  特殊的key名会导致出错,可以用这样子取值

${map.a} 

6.el表达式的11个对象(可以直接使用)

pageContext    可以获取jsp九大内置对象                  

下面几个都是map类型的

pageScope      可以获取pageContext   域数据

requestScope   可以获取request域数据

sessionScope    可以获取session域数据

applicationScope   可以获取application域数据

param     可以获取请求参数的值                   (地址栏传的参数param.key可以获取到value)

paramvalues    获取多个请求参数的值             (例如paramValues.hobby[0])

header  获取请求头信息

headervalues    获取请求头多个值的情况

cookie     获取当前请求的cookie信息

initparam   获取web.xml中配置的<context-param> 上下文参数


jstl标签库

(el表达式是为了替代jsp的表达式,而jstl标签库是为了代替代码脚本)

先引入jar包

然后加上<%@  taglib   prefix="c"  uri="http://java.sun.com/jsp/jstl/core"  %>

1.<c:set />

set标签可以往域保存数据

原来的方式:域对象.setAttribute(key,value)

set方式:${xxxscope.key}

                <c:set scope="page"  var ="key" value="value"/>

                page表示pageContext

                request表示request

                session表示session

                application 表示application

                var表示key

                value表示value

2.<c:if>

if标签用来做if判断

<c:if test="${12==12}">  方法体</c:if>

test里写判断的条件,用el表达式表示

3.<c:choose>  <c:when>   <c:otherwise>

类似于switch   case   default

<c:choose> 

        <c:when test="${}"> </c:when>

        <c:when test="${}"> </c:when>

        <c:otherwise> </c:otherwise>

</c:choose> 

区别在于switch有条件满足后会继续执行完后面的语句,需要自己加break跳出

而这个只会执行满足条件的语句

注意点:

        1.标签里不能使用html注释

        2.when的父标签必须是choose

        

4.<c:forEach />

第一种遍历1到10

<c:forEach   begin="1" end="10" var="i">      ${  i  }  </c:forEach>

begin和end表示开始和结束的索引,var表示循环的变量

第二种变量对象类型数组

java的方式for(object  o:arr){}

<c:forEach  items="${xxxscope.xxx}" var="o">      </c:forEach>

items表示遍历的数组对象arr    var表示当前遍历到的数据

第三种遍历map集合 

java的其中一种方式获取到entry对象    for(Map.Entry  entry:map.entryset()){}

<c:forEach  items="${xxxscope.map}" var="entry">    ${entry.key} = ${entry.value}  </c:forEach>

第四种遍历list集合

<c:forEach  items="${xxxscope.person}" var="p"   step="2" varStatus="status">     ${p.name} </c:forEach>

step属性表示步长

varStatus表示当前遍历到的数据的状态="status"

        ${status.current}   表示当前遍历到的数据

        ${status.index}   当前索引

         ${status.count}    遍历的个数

         ${status.first}       是否是第一条

         ${status.last}      是否是最后一条

         ${status.begin}      获取begin

        ${status.end}      获取end

         ${status.step }     获取step


文件上传

1.form表单提交方式必须是post,因为get有长度限制

2.form的encType属性必须为multipart/form-data

3.input type=file

4.编写服务端的程序接受文件(以流的形式接收 fileinputstream流去read)

引入commons-fileupload.jar

       commons-io.jar

其中servletfileupload类用于解析上传的数据

ismultipartcontent()判断上传的数据是否是多段的(文件是多段的)

parserequest()解析上传的数据返回list集合

isformfield()判断当前表单项是否为普通表单项还是上传的文件  true普通  false文件

getfieldname()获取表单项的name属性

getstring () 获取表单项的值

getname()获取上传的文件名

write()将上传的文件保存到磁盘


文件下载 


服务器发送信息给客户端,由客户端保存键值对信息

客户端有了cookie后,每次请求都会发送给服务器(通过请求头里的cookie携带信息发给服务器)

每个cookie大小不能超过4kb

如何创建cookie(可创建多个)

Cookie cookie = new Cookie(key,value)

resp.addCookie(cookie)     //通知客户端保存cookie

服务器如何获取客户端保存的cookie

req.getCookies()  返回cookie数组

只有这一种方式,所以如果要取其中一个需要在遍历里面判断key值来获取

可以将这种遍历查找封装成一个工具类里的方法

cookie值的修改

方式一:

        创建一个同名的cookie对象,在构造器赋予新值,调用response.addCookie()覆盖原来的

方式二:

        找到要修改的cookie对象,调用setValue()设置新值,调用response.addCookie()保存修改

cookie生命控制(cookie什么时候删除)

setMaxAge()设置cookie过期时间(负数表示浏览器退出就删除,正数表示秒数,0表示删除)

cookie有效路径path属性的设置

可以过滤哪些cookie可以发给服务器

path属性通过请求的地址来进行过滤


session会话(cookie保存在客户端,而session存在服务器端)

是一个接口(httpsession类实现了这个接口)

作用是用来维护客户端和服务器关联的技术

每个客户端都有自己的session会话,经常在session里保存用户登录之后的信息

如何创建session和获取(id,是否为新)

req.getSession()这个方法第一次调用是创建,之后调用是获取

isNew()判断是否为刚创建的session

getId()每个会话都有一个唯一的id值

之后变为获取的本质:

客户端在没cookie的情况下发请求给服务器,服务器创建session对象存入内存,并且创建一个cookie对象,key为JSESSIONID,value为session的id值,通过响应头将这个cookie信息发送给客户端,客户端在之后的每次请求会带着这个cookie,服务器通过获取这个session的id去和内存里的所有session比较,从而实现获取session。

等到超时时间到,将session的cookie删除,又变为第一次创建session。

session域数据的存取

获取数据    req.getSession().getAttribute(key)

存数据       req.getSession().setAttribute(key,value)

session生命周期

setMaxInactiveInterval()  设置session的超时时间(秒),超过销毁(默认超时时长为1800秒)

getMaxInactiveInterval()  获取session的超时时间

因为在tomcat的web.xml里设置的默认超时时长为30分钟,自己也可以在工程的web.xml配置文件修改值来手动设置。


filter过滤器

是接口,作用是拦截请求

如果是jsp页面,我们可以通过检查session域里保存的用户信息来判断是否有权限访问某些资源,

但是html页面以及图片资源等等不能用这种方式来判断,所以需要用到过滤器来过滤。

1.编写一个类实现filter接口(javax.servlet里的接口)

2.重写方法其中doFilter方法用于拦截请求,做权限检查。

先获取session对象,然后取出session域的用户信息进行判断

必须加上filterChain.doFilter(servletRequest,servletResponse)    这行代码是继续访问用户的目标资源。

3.在web.xml配置filter标签(类似servlet配置)

filter生命周期

1.构造器

2.init方法

前两步在web工程启动就创建了

3.doFilter方法

第三步拦截到请求就会执行

4.destory方法

第四步停止web工程的时候执行

filterconfig类

tomcat每次创建filter的同时会创建一个filterconfig类对象,包含filter配置信息

1.获取web.xml里配置的filter的名称  filter- name

2.获取web.xml里配置的filter的初始化参数  init-param

3.获取servletcontext对象

filterChain过滤器链

filterChain.doFilter(servletRequest,servletResponse) 

 在doFilter方法里这行代码的作用是执行下一个过滤器(按web.xml配置的顺序),如果没有则访问目标资源

 多个filter过滤器执行特点

        1.所有filter和目标资源都在同一个线程里

        2.多个filter执行的时候,共用一个request对象

filter路径匹配方式

精确匹配     /目录/具体资源

目录匹配      /目录/*

后缀名匹配   *.jsp(不能斜杠开头)


json

1.在JavaScript中的使用

{

        "key":value,

        "key":value,

        "key":value

}

value可以是数字,字符串,布尔值,数组[],json对象{},甚至json数组[{},{},{}]等等

json的访问(json是一个对象,key可以认为是一个属性)

对象.key就是访问属性

json的常用方法

JSON.stringify()     json对象转为json字符串

JSON.parse()        json字符串转为json对象

用于操作json的数据时需要转为json对象,

用于客户端和服务器数据交换需要json字符串

2.json在java中的使用(引入jar包例如gson)

javaBean和json的转化:

        创建一个类的对象s

        再创建一个Gson gson = new Gson();

        String  ss =   gson.toJson(s)      java对象转为json字符串

        gson.fromJson(ss,类名.class)   json字符串转为java对象

List和json的转化:

        (多个java对象在list集合里)

        Gson gson = new Gson();

       String   lists  =  gson.toJson(list) 把list集合转为json字符串

    下面的前提是同类的对象(使用匿名内部类):

       gson.fromJson(lists,  new TypeToken<ArrayList<具体类>>{}.getType())    json字符串转为java对象

                

map和json的转化:

         Gson gson = new Gson();

        String   map1 =  gson.toJson(map) 把map集合转为json字符串

    下面的前提是同类的对象: 

       gson.fromJson(lists,  new TypeToken<HashMap<xxx,具体类>>{}.getType())  json字符串转为java对象


ajax(异步)

局部刷新不会改变地址栏,并且异步的形式不会卡在等待服务器返回数据而是执行其他,用户体验感比较好。

原生的ajax请求(不常用)

 function   ajaxRequest(){

           1.创建xmlhttprequest

                var   xmlhttprequest  = new XMLHttpRequest()

            2.调用open方法设置请求参数三个参数分别是提交方式,url地址,异步还是同步(true  or  false)

               xmlhttprequest .open("GET",http://ip:port/工程/资源,true)

             3.在send方法之前绑定onreadystatechange事件,进行请求完成后的操作

           

                xmlhttprequest.onreadystatechange  = function(){

                        if(xmlhttprequest.readyState == 4 && xmlhttprequest.status==200){

                                    xmlhttprequest.responseText     //接收服务器传回来的字符串数据(再                              parse转为json对象)

                            }

                }

              4.调用send方法发送请求给服务器

                xmlhttprequest.send()

 }         

jQuery的ajax请求

1.$.ajax方法

使用: 

$.ajax({

        url:"http://loacalhost:8080/工程/资源",

        data:"action=调用的方法名",

        type:"GET",

        success:function(data){

        这里的data就是服务器返回的数据

        },

        dataType:"json"

        (这里的数据格式写成text返回的数据就是字符串,写成json返回的就是json对象)

 })

        

2.$.get方法和$.post方法(底层是封装$.ajax())

 相对于ajax少了一个type参数

使用(对应四个参数):

     $.get("http","action=调用的方法名",function(data){},"json")

        post和get用法相同

3.$.getJson方法(固定get请求以及json格式)

        


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值