JSP学习笔记
一,JSP简介
- JSP---Java Server Pages
- 拥有servlet的特性与优点(本身就是一个servlet)
- 直接在HTML中内嵌JSP代码
- JSP程序由JSP Engine先将它转换成Servlet代码,接着将它编译成类文件载入执行
- 只有当客户端第一次请求JSP时,才需要将其转换、编译
- 优点:
- 优良的性能
- 优于CGI,PHP,ASP
- 平台无关性
- 操作系统无关,Web服务器无关
- 可扩展性
- tag的扩展机制,简化页面开发
- 优良的性能
二,JSP基本语法
- Declaration 声明
- Scriptlet 小程序段
- Expression 表达式
- Comment 注释
- Directives 指令
- Action 动作指令
- 内置对象
JSTL
JSF
1,JSP-Declaration
body> <%! int count=0; %>//成员变量,相当于全局变量,因为jsp会先转换为servlet,servlet只new一个实例。可以定义方法 <% int count2=0; %>//局部变量,不能定义方法 <h> count:<%= ++count %><br> count2:<%= ++count2 %> </h> </body>
2,Scriptlet
<!-- html注释,客户端源码可以看见 --> <%-- jsp注释 --%> <% // 注释1 java注释 /* 注释2 */ String bgColor=request.getParameter("bgColor"); boolean hasColor; if(bgColor!=null){ hasColor=true; } else{ hasColor=false; bgColor="white"; } %> <body BGCOLOR=<%= bgColor %>> <% if(hasColor){ out.println("bgColor:"+bgColor); } else{ out.println("background is white"); } %> </body>
3,表达式
4,Derictive
- Directive(编译指令)相当于在编译期间的命令
- 格式:
- <%@Directive 属性=“属性值”%>
- 常见的Directive:
- page
- include
- taglib
<%@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” %>
b,Directive--include 编译期间的指令
- 将指定的JSP程序或者HTML文件包含进来
- 格式:
- <%@include file=“fileURL%>
- JSP Engine会在JSP程序的转换时期先把file属性设定的文件包含进来,然后开始执行转换及编译的工作。(原封不动的把文件的代码copy到该位置,然后进行转换和编译,只生 成一个java和class)
- 限制:
- 不能向fileURL中传递参数
- 不能abc.jsp?user=aaa
5,Action
- jsp:useBean
- jsp:setProperty
- jsp:getProperty
- jsp:include
- jsp:forward
- jsp:param
- jsp:plugin
- 嵌入applet
a,jsp:include/jsp:param
- 用于动态包含JSP程序或HTML文件等
- 除非这个指令会被执行到,否则它是不会被Tomcat等JSP Engine编译。
- 格式:
- <jsp:include page=“URLSpec” flush=“true”/>
- <jsp:include page=“URLSpec” flush=“true”>
- <jsp:param name=“ParamName” value=“paramValue”/>
- </jsp:include>
- jsp:param用来设定include文件时的参数和对应的值
- 和编译指令include的区别
- include编译指令是在JSP程序的转换时期就将file属性所指定的程序内容嵌入,然后再编译执行;而include指令在转换时期是不会被编译的,只有在客户端请求时期如果被执行到才会被动态的编译载入
- Include不能带参数, 而<jsp:include>可以
b,jsp:forward / jsp:param
<jsp:param name=“paramName” value=“paramValue”/>
</jsp:forward>
<jsp:forward page="forforward.jsp" />
<jsp:forward page="forforward1.jsp"> <jsp:param name="name" value="m" /> <jsp:param name="oldName" value=‘<%=request.getParameter("name")%>‘ /> <jsp:param name="roles" value="manager" /> </jsp:forward>
- <jsp:forward>
- response.sendRedirect
- 通过jsp:useBean,可以在JSP中使用定义好的Bean
- Bean的基本要素:
- 必须要有一个不带参数的构造器。在JSP元素创建Bean时会调用空构造器
- Bean类应该没有任何公共实例变量,也就是说,不允许直接访问实例变量,变量名称首字母必需小写
- 通过getter/setter方法来读/写变量的值,并且将对应的变量首字母改成大写
- 基本用法:
-
<jsp:useBean id="cb" class="bean.CounterBean" type="typeName" scope="page|request|session|application"> </jsp:useBean>
- test.jsp/CounterBean.java 不要使用裸体类(规范要求)应该放在包里面
-
<%@ page import="bean.*" %> <%-- <% //response.sendRedirect("../servlet/ShowRs"); %> <% CounterBean cb = new CounterBean(); %> <font color="red" size="5"> <%=cb.getCount()%> </font> --%> <jsp:useBean id="cb" class="bean.CounterBean"> <%-- 相当于 CounterBean cb = new CounterBean() --%> </jsp:useBean> <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各项参数含义:
- Scope各项参数的意义:
- jsp:setProperty的格式:
property=“propertyName” |property=“*”
value=“property value” |param=“paramName”/>
- jsp:getProperty的格式:
- 建立表单参数和Bean属性之间的关联
<jsp:setProperty name="entry" property="numItems" param="numItems" /> //相当于<jsp:setProperty name="entry" property="numItems" numItems=<%=reuest.getParameter("numItems")%> />
- 在建立Bean属性和表单参数之间的对应关系时,服务器会将对应的参数自动转换成和属性类型匹配的数据
- 初步解释编码问题
- <%=new String(hello.getName().getBytes("ISO8859_1"),"GBK")%>
- request.setCharacterEncoding("gb2312");
三,JSP内置对象
- JSP编程---out
- JSP编程--request
- JSP-response
- JSP-Cookie
- JSP—session & application
- 从JSP调用Servlet可用<jsp:forward>
<jsp:forward page="/servlet/ServletToJSP" />
<%
response.sendRedirect("../servlet/ShowParameters?a=b");
%>
- 从Servlet调用JSP使用
public class ServletToJSP extends HttpServlet { public void doGet (HttpServletRequest req,HttpServletResponse resp) { try { // 设置属性并将它提交给ServletUseJsp.jsp resp.setContentType("text/html;charset=gb2312"); req.setAttribute ("servletName", "ServletToJsp"); getServletConfig().getServletContext().getRequestDispatcher ("/servlet_jsp/ServletUseJsp.jsp").forward(req, resp);
//.forward(req, resp)把servlet的请求发送到另一个页面
//.include(req, resp)把另一个页面的内容包含在response中
}catch (Exception e){ e.printStackTrace (); } } }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。