【JavaWeb】基础知识总结02 JSP

【JavaWeb】基础知识总结02 JSP

一.JSP基础

1.JSP(Java Server Pages)

 

2.<% %>内可以嵌入任何合法的JAVA程序,包括Swing的GUI程序。

 

3.程序操作都在服务器端执行,网上传给客户端的仅仅是结果。

 

4.用JAVA循环语句来循环HTML语句

<% for(int i=0;i2;i++)

       {

 %>

       你好<br>

 <%     

       }

 %>


5.JSP最终都会转化成Servlet去执行。

 

6.JSP原始代码中包含了JSP元素和Templatedata两类,后者指的是JSP引擎不处理的部分,即标记<%%>以外的部分,前者则必须符合JAVA语法要求,否则会报错。

 

7.JSP 执行过程如下:





二.JSP语法

1.JSP语法分为三种不同的类型

-编译器指令  <%@ ... %>

-脚本语法    <% ... %>中间是java代码

-动作语法    <jsp: ...>

 

2.脚本语法包括

-“HTML注释”:<!--...-->

-“隐藏注释”:<%--...--%>    (jsp注释,不会发送给客户端)

-“声明”

-“表达式”

-“脚本段”

 

3.在HTML注释中嵌入<%%>会在HTML源代码中执行,然后将结果作为HTML注释一起发送给客户端。

 

4.编辑器指令中的几个属性:

<%@ page language="java"(编码语言,目前只有JAVA) import="java.util.*"(引入的JAVA类包,用','隔开) pageEncoding="UTF-8"%(编码格式)>

 

5.JSP声明语句

<%! int a=3; %>  转换为servlet之后a为成员变量

 

6.声明与脚本段的区别

<% int b=3;  %>  转化为servlet之后b为方法内部的局部变量

<%= 表达式 %>        输出语句


7.包含指令(编译器指令之一):

include指令:向当前页中插入一个静态文件的内容。

jsp语法格式如下:

<%@ include file="relativeURL"%> 或

<%@ include file="相对位置"%>

页面的重复使用,提高代码复用率

 include在插入的时候插入的是执行结果,查看源代码看起来则像是固定死的。

 

8.Page指令:

<%@ page language="java" import="{package.class|package.*} , " pageEncoding ="UTF-8"....>  其他属性基本用不上,暂不了解

 

9.<@ import "...">

需要导入的java包的列表,这些包作用于程序段,表达式,以及声明。下面的包在JSP编译的时候就已经导入了,所以就不需要再指明了:

java.lang.*      javax.servlet.*    javax.servlet.jsp.*    javax.servlet.http.*

 

10.page指令在一个页面中可以用多个,但其中除了import属性其他都只能在页面中用一次。

 

11.<jsp:forward page="--路径--">    转向目标页面,后续代码不能继续进行

       <jsp:paramname="参数名",value="参数值">  可以带上一些参数,传入转向页面

 </jsp:forword>

 

12.<jsp:include page="---路径--">   插入目标页面

       <jsp:paramname="参数名",value="参数值">  可以带上一些参数,传入插入页面

 </jsp:include>

 

三.JSP内置对象

1.jsp内置对象一览:

-request,请求对象---------------------重点

-response,响应对象

-pageContext,页面上下文对象

-session,回话对象---------------------重点

-application,应用程序对象-------------重点

-out,输出对象

-config,配置对象

-page,页面对象

-exception,异常对象

 

2.request对象中使用较多的是getParameter()getParameterName()getParameterValues()三个方法。

request.setAttribute(String,Object);  将servlet属性绑定与Sring上.....

request.getAttribute(String);


3.Session用来保存客户端状态信息

session.setAttribute(String,Object);  将Object绑定到String所表示的字符串上.并存储一定周期.

session.getAttribute(String);             将返回一个String字符串所绑定的Object对象.


4.request的信息存储周期只有一次请求,当请求一次后再发起一次请求时,第一次请求的信息将不再存在。即客户端向服务器端发送一个请求,服务器端向客户端返回一个响应后,请求对象即被销毁。

 

5.request的getAttribute和setAttribute一般是成对出现的,两个方法均在服务器端执行,用户端并不知道服务器调用了此方法。

 

6.reuqest的getParameter方法的作用是获取到客户端,通过表单或者url请求参数所发送过来的数据,服务器端需要获取客户端发过来的消息就需要使用此方法。

 

7.session对象内数据的存活范围就是session对象的存活范围,(目前可以任务只要浏览器窗口不关闭,session对象就会一直存在)无论向服务器端发送多少个请求session对象只有一个。

 

8.application(应用对象):存活范围最大的对象,只要服务器没有关闭,application对象中的数据就会一直存在。在整个服务器运行的过程中,application对象就只有一个,它会被所有的用户所共享。

 

9.getAttribute和getParameter区别在与前者可以处理各种批量信息,即使使用getParameterValue实用性也不如getAttribute.

 

10.application的一些其他方法:getServerInfo()返回当前服务器(servlet容器)的信息和版本号,getResource(String)string必须用'/'开头,返回String所表示文件的URI。

 

11.application中的getRealPath(String)返回字符串所代表的文件名或者路径的绝对路径。

 

12.在实际web开发中除了保存用户登录信息时使用session,其他情况,尽量减少使用session进行传递数据,尽量使用html里form中的hidden隐藏域进行传递,使用例子如下:

<input type="hidden"name="username" value="<%= username>">

 

13.HttpServletResponse对象的sendRedirect(String location)方法称作重定向。如果location地址前面加上“/”,则表示相对于Servlet容器的根来请求,即http://localhost:8080,如果location地址前没有加上“/”,则表示相对于当前请求URI来寻址。

 

14.RequestDispatcher的forward(request,response)称作请求转发。

 

15.请求转发与重定向的区别(重要)

-请求转发,整个过程处于同一个请求中。

-重定向,服务器端在执行到sendRedirect()的时候就会返回一个响应,通知客户端去访问参数中的页面,服务器端收到响应再次发出一个请求去访问参数中的页面,此过程中使用了2次请求。

 

-请求转发,RequestDispatcher是通过调用HttpServletRequest对象getRequestDispatcher()方法得到的,是属于请求对象的方法。

-重定向,sendRedirect()是HttpServletResponse对象的方法,那就表明整个请求过程已经结束了,服务器开始向客户端返回执行的结果。


16.(问题)setAttribute后用getAttribute得到后再显示在页面上时中文会出现乱码

答:客户端向服务器端传送数据时的编码格式是iso-8859-1,而jsp则设置为utf-8格式,所以在输入中文时结果显示会出现中文乱码。

-解决方法:

修改成统一的编码格式:

xxx = newString(xxx.getBytes("iso-8859-1"),"utf-8");


四.表单的确认(客户端确认)JS了解

1.java script 最基本介绍,用于客户端处理信息,给出示例如下,通常放在head中:

<script type="text/javascript">
   
            function validate() {
                    //var username =document.getElementById("un");
                    //var password =document.getElementById("pw");
                   //var repassword =document.getElementById("rpw");
                  
                   var username=document.getElementsByName("username")[0];
                   var password=document.getElementsByName("password")[0];
                   var repassword=document.getElementsByName("repassword")[0];
                  
                   if(username.value.length==0) {
                          alert("usernamecan't be blank!");
                          return false;
                   }
                  
                   if(password.value.length<6||password.value.length>10){
                          alert("length ofpassword is invalid!");
                          return false;
                   }
                  
                   if(repassword.value.length<6||repassword.value.length>10){
                          alert("length ofrepassword is invalid!");
                          return false;
                   }
                  
                   if(password.value!=repassword.value){
                          alert("password notthe same!");
                          return false;
                   }
                  
                   return true;
            }
  
  </script>

注:方法类型和变量类型都只有一种分别是function和var,js方法是基于事件响应的,所以必须在控件上进行事件注册,即添加属性οnclick="函数名" οnsubmit="return 函数名"等。


五.JavaBean

1.JavaBean是一种可重复使用,且跨平台的软件组件。JavaBean可分为两种:一种是有用户界面(UI,User,Interface)的JavaBean;还有一种是没有用户界面,主要负责处理事务(如数据运算,操纵数据库)的JavaBean。JSP通常访问的是后一种的JavaBean。


2.jsp与javabean搭配使用的优点:

-使得html与java程序分离,这样便于维护代码。如果把所有的程序代码都写到jsp网页中,会使得代码繁杂,难以维护

-jsp侧重于生成动态网页,事务处理有javabean来完成,这样可以充分利用javabean组件的可重用性特点,提高开发网站的效率。

 

3.一个标准的JavaBean有以下几个特性:

-JavaBean是一个public类

-JavaBean有一个不带参数的构造方法

-JavaBean通过setXXX方法设置属性,用getXXX方法获取属性

 

4.导入JavaBean

通过<%@ pageimport="com.xxx.XXXBean" %>指令导入JavaBean类

 

5.声明JavaBean对象

-<jsp:useBean> 标签用来声明JavaBean对象,例如:

<jsp:useBean id="myBean"class="mypack.CounterBean" scope="session"/>

 

6.访问javaBean属性

jsp提供了访问JavaBean属性的标签

-如果要将JavaBean的某个属性输出到网页上,可以用<jsp:getProperty>标签,例如:

<jsp:getProperty name="myBean"property="count"/>

-如果要将JavaBean的某个属性赋值,可以用<jsp:setProperty>标签,例如:

<jsp:setProperty name="myBean"property="count" value="0"/>

 

7.JavaBean中属性一般用private,使用get,set进行操作即可

 

8.<jsp:setPropoerty>标签中param属性(获取客户端传过来的动态参数)与value不能同时使用,会产生冲突。

 

9.JavaBean的范围

.scope属性决定了JavaBean对象存在的范围。scope的可选值包括:

-page(默认值)页面没了就没了,最小

-request

-session

-application

 

10.JavaBean设置为request范围的时候,如果用forward跳转页面,可以用getAttribute获取对象,参数为JavaBean声明时候的ID值。

 

六.自定义标签库

1.创建客户化jsp标签的步骤

-创建标签的处理类

-创建标签库描述文件

-在jsp文件中引入标签库,然后插入标签,例如:<mm:hello/>

 

2.Servlet容器编译jsp网页时,如果遇到自定义标签,就会调用这个标签的处理类。标签处理类必须扩展以下两个类之一:

-javax.servlet.tagext.TagSupport

-javax.servlet.jsp.tagext.BodyTagSupport

 

3.TagSupport类的主要方法:

-doStartTag()方法:

Servlet容器遇到自定义标签的起始标志时调用该方法

 

-doEndTag()方法:

Servlet容器遇到自定义标签的结束标志时调用该方法

 

-setValue(String k,Object o):

在标签处理类中根据参数key返回匹配的value

 

-getValue(String k):

在标签处理类中根据参数key返回匹配的value

 

-removeValue(String k):

在标签处理类中删除key/value

 

-setPageContext(PageContext pc)

设置PageContext对象,该方法由Servlet容器在调用doStartTag或doEndTag方法前调用

 

-setParent(Tag t)

设置嵌套了当前标签的上层标签的处理类,该方法由Servlet容器在调用oStartTag或doEndTag方法前调用

 

-getParent()

返回嵌套了当前标签得到上层标签的处理类

 

4.TagSupport类的两个重要属性

-jsp容器在调用doStartTag或doEndTag方法前,会先调用setPageContext和setParent方法,设置pageContext和parent

-在doStartTag或doEndTag方法中可以通过getParent方法获取上层标签的处理类;在TagSupport类中定义了protected类型的pageContext成员变量,因此在标签处理类中可以直接访问pageContext变量。

 

5.PageContext类提供了保存和访问Web应用的共享数据的方法:

-public void setAttribute(Stringname,Object value,int scope)

-public Object getAttribute(String name,int scope)

其中scope参数的可选值有:

-pageContext.PAGE_SCOPE

-pageContext.REQUEST_SCOPE

-pageContext.SESSION_SCOPE

-pageContext.APPLICATION_SCOPE

 

6.doStartTag()方法

.当Servlet容器遇到自定义标签的起始标志,就会调用doStartTag()方法。

.doStartTag()方法返回一个整数值,用来决定程序的后续流程。它有两个可选值:

-Tag.SKIP_BODY         表示标签之间的内容被忽略。

-Tag.EVAL_BODY_INCLUDE     表示标签之间的内容被正常执行。

 

7.doEndTag()方法

.当Servlet容器遇到自定义标签的结束标志,就会调用doEndTag()方法。

.doEndTag()方法也返回一个整数值,用来决定程序后续流程。它有两个可选值:

 

-Tag.SKIP_PAGE  表示立刻停止执行jsp网页,网页上未处理的静态内容和jsp程序均被忽略,任何已有的输出内容like返回到客户的浏览器上。

 

-Tag.EVAL_PAGE 表示按正常的流程继续执行jsp网页。

 

8.在标签处理类中应该将这个属性作为成员变量,并且分别提供设置和读取属性的方法。

 

9.标签库描述文件的后缀名是:.tld

实质上就是一个标准的xml文件,必须存在于web.xml相同的目录中。


七.EL

1.EL(Expression Language 表达式语言)用于简化jsp页面,尽量减少java代码,基本语法如下:

- ${表达式}

<%=request.getParameter("username")%>等同于${param.username}

 

- \${表达式}则表示转义,在页面上显示整个表达式

 

2.EL默认对象

-pageContext         相当于PageContext对象(用的少)

-pageScope            包含了page范围内的属性和值

-requestScope        包含了reuqest范围内的属性和值

-sessionScope         包含了session范围内的属性和值

-applicationScope   包含了application范围内的属性和值

-param                  相当于request.getparameter(xxx)

-paramValues         相当于request.getparameterValue(xxx)

-header                  包含了头信息

-headerValues         同上

-cookie                  包含了cookie内的属性和值

例如:

${paramValues.fruit[2]}等

 

3.EL支持运算符:{+,-,*,/,div,%,mod}

 

4.EL支持比较运算符和逻辑运算符:

{==(eq)   ,!=(ne)    ,<(lt)       ,>(gt)      ,<=(le)    ,>=(ge)   }

{&&(and),||(or),!(not)}

 

5.EL提供.和[]两种运算符来存取数据:

${sessionScope.user.sex}等于${session.Scope.user["sex"]}

也可以混合使用:

${sessionScope.shoppingCart[0].price}

 

6.当存取的属性名称中包含一些特殊字符,如.或-等飞字母或数字的符号,就一定要使用[],例如:

${user.My-Name}就不正确,只能写成:

${user["My-Name"]}

 

7.使用[]可以进行动态取值,如下:

${sessionScope.user[data]}

此时,data就是一个变量,如data值为"sex",则相当于:

${sessionScope.user.sex}

如data值为"name",则相当于

${sessionScope.user.name}

 

8.EL存取变量数据的方法很简单,例如:

${usernmae}.它的意思是去除某一范围中名称为username的变量。因为我们并没有制定哪一个范围的username,所以它的默认值会先从Page范围开始找,假如找不到,再依序到Request、Session、Application范围。假如途中找到username就直接回传,不在继续找下去,但是假如全部的范围都没有找到就回传null

 





注:以上全部类容总结来自于北京圣思园Java_Web教学视频,总结只是为了方便自己查阅&和大家交流=.=

本文固定链接:http://blog.csdn.net/fyfmfof/article/details/25534367

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值