Jsp知识点总结

1、JSP简介

   JSP---Java Server Pages

   拥有servlet的特性与优点(本身就是一个servlet)

   直接在HTML中内嵌JSP代码

   JSP程序由JSP Engine先将它转换成Servlet代码,接着将它编译成类文件载入执行   只有当客户端第一次请求JSP时,才需要将其转换、编译

 

 2、 Scriptlet

       <%=代码%> 局部变量

 3、 Declaration

<%!代码%> 成员变量,在此声明的变量、方法都会被保留成唯一的一份,直到JSP程序停止执行  

 <!-- html注释-->

<%--服务器端注释--%>

<%//服务器端单行注释

   /*服务器端多行注释*/

%>

内置对象:out、request、response,exception;

服务器端对象没有办法阻止服务器端程序执行的,只不过显示不出来。<!--<%System.out.println("aaaaaa")%> -->

<%int i%>这段代码在服务器端执行的,客户端接到的是值

 

<script>

  var ii=0;

<script>客户端执行

<%System.out.println(ii);%>服务器端执行 这句话先执行

 

<script>

 <%out.println("var ii=10");%>//服务器端把这句话传回客户端。

  alert(ii);

</script> 

 

4、Directive 指令

  (编译指令)相当于在编译期间的命令

    <%@page language=“script language”|

           extends=“className”|

   import=“importList”|

   buffer=“none|kb size”|   --none:不缓冲,默认8k

  session=“true|false”|   --是否可以使用session,默认true

   autoFlush=“true|false”  --缓冲器是否自动清除,默认true

          isThreadSafe=“true|false”|  --默认false(永远不要设成true)

        info=“infoText”|    --任何字符

errorPage=“errorPageUrl”|

         isErrorPage=“true|false”|

        contentType=“contentTyepInfo”|

        pageEncoding=“gb2312”

    %>

 

<%@page contentType="text/html;charset=gb2312"%>如果页面中文出不来,就加上这句话。

 

<@page errorPage="ErrPage.jsp"%> 页面1

<@page isErrorPage="true" %>页面2 当前页面是一个处理异常的java页面。

错误信息:<%=exception.getMessage()%>

 

5、include

将指定的JSP程序或者HTML文件包含进来

格式:<%@include file=“fileURL%>

JSP Engine会在JSP程序的转换时期先把file属性设定的文件包含进来,然后开始执行转换及编译的工作。(原封不动的把文件的代码copy到该位置,然后进行转换和编译,只生成一个java和class)

不能向fileURL中传递参数。在编译期间传参数无意义。

包含页面和被包含页面用的是同一个request对象。

包含页面和被包含页面的编码字符集要一致。

 

6、Action

常见的:

jsp:useBean

jsp:setProperty

jsp:getProperty

jsp:include

jsp:forward

jsp:param

jsp:plugin

嵌入applet

 

6.1、jsp:include

<jsp:include page="dage.jsp" flush="true"/>

用于动态包含JSP程序或HTML文件等

除非这个指令会被执行到,否则它是不会被Tomcat等JSP Engine编译。

 

<jsp:include page=“URLSpec” flush=“true”>

    <jsp:param name=“ParamName” value=“paramValue”/>jsp:param用来设定include文件时的参数和对应的值

</jsp:include>

<jsp:include page="URLSpec?ParamName=paramValue" flush="true">

</jsp:include> 作用相同

 

和编译指令include的区别:

include编译指令是在JSP程序的转换时期就将file属性所指定的程序内容嵌入,然后再编译执行;而include指令在转换时期是不会被编译的,只有在客户端请求时期如果被执行到才会被动态的编译载入

Include不能带参数, 而<jsp:include>可以

动态包含的文件和被包含文件用的不是同一个request对象

被包含页面可以取出包含页面的参数。

包含页面可以给被包含页面传参数。

被包含页面包含的东西比包含页面东西要多。

产生两个class文件

两种包含:静态包含常用,动态包含不常用!

6.2、sendRedirect

test.jsp

response.sendRedirect("forforward1.jsp");//往客户端发指令,让客户端转向forforward1.jsp

response.sendRedirecct("http://www.google.com");//这句话也可以。

System.out.println("ddd");//这条指令会被执行

 

test.jsp?param=paramvalue 如果传参数,forforward1.jsp是接收不到的。

 

response.sendRedirect("/forforward1.jsp"); /表示的是http://127.0.0.1/

 

 

6.3、jsp:forward

<jsp:forword page="forforward.jsp"> 在服务器端内部进行转向。所以客户端浏览器地址栏无变化

 虽然是不同的对象,但可以取到上一页面的参数。forward语句不会发给客户端 forward后的语句不会被执行了。

<jsp:forword page="/forforward.jsp"> /代表的是  http://127.0.0.1/webapp根路径/

可以传参数,不但当前页面可以给下一个页面传参数(<jsp param/>),而且当前页面能取得的参数,下一个页面也能取到。

 

6.4、Jsp:userBean

<jsp:userBean id="cb" class="bean.CounterBean"><jsp:userBean>

<%Counterbean cb=new CounterBean();%> 以上两句作用一样。

 

<jsp:setProperty name="cb" property="count" value="23"/>  <%--cb.setCount(Integer.parseInt("23"))--%>

<jsp:getProperty name="cb" property="count"/>             <%--out.print(cb.getCount())--%>

 

 

jsp:useBean各项参数含义:

id:对象实例名称

scope:Bean作用的范围,默认为page,对整个jsp页面有效  只是new出来一个javaBean对象,不是从篮子取。

class:Bean类名称(全名)

type:Bean实例类型,可以是本类,或其父类,或实现接口,默认为本类

 

Scope各项参数的意义:

    page:仅涵盖使用JavaBean的页面

    request:有效范围仅限于使用JavaBean的请求

    session:有效范围在用户整个连接过程中(整个会话阶段均有效)

    application:有效范围涵盖整个应用程序。也就是对整个网站均有效

 

<jsp:useBean id="counterBean" scope="request" class="bean.CounterBean"/>下一个页面也能取到counterBean的值

 

<%bean.CounterBean counterBean=(bean.CounterBean)request.getAttribute("counterBean");

 if(counterBean==null)

{

  counterBean=new bean.CounterBean();

 request.setAttribute("counterBean",counterBean);

}

%> 以上两段代码作用一样!

 

 

<jsp:useBean id="entry" class="bean.SaleEntry" />

<jsp:setProperty

       name="entry"

       property="itemID"

       value="<%=request.getParameter("itemID")%>" />

<jsp:setProperty

        name="entry"

        property="numItems"

        param="numItems" />

<jsp:setProperty

         name="entry"

         property="discountCode"

         param="discountCode" />

通过url传参数。

 

<jsp:getProperty name="entry" property="itemID" />

$<jsp:getProperty name="entry" property="itemCost" />

 

 

<jsp:useBean id="hello" class="bean.HelloBean" scope="request" >

  <jsp:setProperty name="hello" property="*" />

</jsp:useBean>

 

 

7、乱码问题

a.html

<form action=b.jsp method=get>

  <input name=user value="我们">

  <input type=submit value=get>

</form>

 

<form action=b.jsp method=post>

  <input name=user value=他们>

  <input type=submit value=post>

</form>

 

<a href="b.jsp?user=你们">this is a link</a>

<jsp:forward page="b.jsp">

  <jsp:param name="user" value="它们" />

<jsp:forward>

 

public static String URLEncode(String s,String enc)

{

  if(s==null)

   {return "null"}

 if(enc==null)

    {enc="ISO-8859-1"}

....

}

zhongwen="你好"//汉字

bytes=zhongwen.getBytes("GBK");//以GBK得到字节

zhongwen=new String(zhongwen.getBytes("GBK"),"iso8859-1");//以GBK得到字节,然后以iso8859-1编码 (四个问号,一个字节一个字符)

bytes=zhongwen.getBytes("iso8859-1");//以iso8859-1得到字节

bytes=zhongwen.getBytes("utf-8");//以utf-8的到字节(8个字节,一个iso8859-1编码的字符被编成两个字节)

zhongwen=new String(bytes,"utf-8");//以utf-8得到字节,再以utf-8编码。还原成ISO-8859-1;(四个问号)

bytes=zhongwen.getBytes("iso-8859-1");//以iso-8859-1得到字节。

new String(bytes,"GBK");//以iso-8859-1得到字节,再以GBK编码。还原成GBK;(汉字)

8、Servlet转到jsp

resp.sendRedirect(req.getContextPath()+/servlet_jsp/servlet_usejsp);

this.getSevletConfig.getServletContext().getRequestDispatcher("/servlet_jsp/ServletUseJsp.jsp").forward(req,resp);    /是webapp的访问路径

getServletContext().getRequestDispatcher("/servlet_jsp/ServletUseJsp.jsp").forward(req,resp);

<!--EndFragment-->

转自:http://fushengfei.javaeye.com/blog/783396

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值