尚学堂马士兵servlet/JSP笔记(四、JSP)
来源:互联网 发布:windows7查看443端口 编辑:程序博客网 时间:2024/04/26 03:04
目录(?)[+]
一、JSP简介
JSP本身就是一个servlet;直接在HTML中内嵌JSP代码;JSP程序由JSP Engine先转换成servlet代码,接着编译成类文件载入执行;只有当客户端第一次请求JSP时,才需要将其转换、编译
HelloWorld.jsp
- <?xml version="1.0" encoding="ISO-8859-1" ?>
- <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
- pageEncoding="ISO-8859-1"%>
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
- <title>Hello World JSP</title>
- </head>
- <body>
- <%
- out.println("Hello World!");
- out.println(new java.util.Date());
- %>
- </body>
- </html>
二、JSP的基本语法
1.JSP有四种语法:
1)JSP传统语法。(使用<%%>嵌套java语言)
2)JSTL。(和标签语言类似,没有%)
3)JSF。(JSTL的替代品)
4)其他tablib(如struts)。
2.JSP的传统语言:
1)Declaration。 2)Scriptlet。 3)Expression。 4)Comment。 5)Directives。 6)Action动作指令。 7)内置对象
Declaration 基本语法:<%! %>
在此声明的变量、方法都会被保留成唯一的一份,直到JSP程序停止执行;类似java中的成员变量和成员方法。
示例:
- <body>
- <h1>JSP Declaration</h1>
- <%!
- int accessCount = 0; //此处声明的是成员变量,每次刷新页面,都会递增1
- %>
- <%
- int accessCount2 = 0; //此处声明的是局部变量,每次刷新页面,程序执行一次,就新生成一个变量,故每次刷新值都不会变。
- %>
- <h2>Access to page since server reboot:
- <%= ++accessCount %>
- <br />
- <%= accessCount2 %>
- <br />
- </h2>
- </body>
Scriptlet基本语法:<% 程序代码区 %>
可以放入任何的java程序代码
注释格式: <%--... ... --%>
<%//... ...%>
<%/*... ...*/%>
示例:(链接后面跟参数示例 url?bgColor=red)
- <!--
- 客户端可以看见的html注释
- -->
- <%
- // java单行注释,客户端看不见
- /*
- java多行注释
- 客户端看不见
- */
- String bgColor = request.getParameter("bgColor");
- boolean hasColor;
- if(bgColor == null) {
- hasColor = false;
- bgColor = "white";
- } else {
- hasColor = true;
- }
- %>
- <body style = "background-color:<%= bgColor %>;">
- <h1>Test BGColor</h1>
- <p>
- <%
- if(hasColor) {
- out.println("You have choosed " + bgColor + " as backgroud color");
- } else {
- out.println("You have the default backgroud color \"white\"");
- }
- %>
- </p>
- </body>
Expression 基本语法:<%=... ...%>
=后面必须是字符串变量或者可以被转换成字符串的表达式;不需要以“;”结束;只有一行;
示例:Expressions.jsp
- <body>
- <h1>JSP Expressions</h1>
- <p>Current time: <%= new Date() %></p>
- <p>You Host Name: <%= request.getRemoteHost() %></p>
- <p>You Session ID: <%= session.getId() %></p>
- <p>The testParam is: <%= request.getParameter("testParam") %></p>
- </body>
Directive 基本语法格式:<%@Directive属性="属性值"%>
directive(编译指令)相当于在编译期间的命令
常见的Directive:1)page 2)include 3)taglib
1)Directive — page
指明与JSP Container的沟通方式
基本格式:
<%@page language="script language"| --目前值只能取java,默认为java。
extends="className"| --说明该JSP页面从谁继承,不需要指定。
import="importList"| --*!引入进来哪些包,相当于java的import语句
buffer="none|kb size"| --缓冲区,none为不缓冲,默认8k的缓冲。
session="true|false"| --页面能不能使用session,默认能使用。指定较少。
autoFlush="true|false"| --页面输出完是否flush到客户端,默认true。
isThreadSafe="true|false"| --相当于servlet实现了singleThreadMode(已废弃)
info="infoText"| --JSP的描述信息,很少用
errorPage="errorPageUrl"| --*!这个页面出错了,显示哪个页面。
isErrorPage="true|false"| --*!这个页面是否是显示错误的页面
contentType="contentTypeInfo" --*!通常为"text/html"
%>
示例:
- <%@ page language="java" contentType="text/html; charset=gb2312"
- pageEncoding="ISO-8859-1" import="java.util.Date,java.text.*"
- errorPage="ErrPage.jsp"
- %>
2)Directive — include
将指定的JSP程序或者HTML文件包含进来
格式:<%@ include file="fileURL"%>
JSP Engine会在JSP程序的转换时期先把file属性设定的文件包含进来,然后开始执行转换编译工作。
不能向fileURL中传参数。
3)Directive — taglib
后续项目中再讲。
Action 基本语法:<jsp: .. /> 严格上来讲它属于jsp的第二种语法。
动作指令是在运行期间的命令
常见的:
jsp:useBean
jsp:setProperty
jsp:getProperty
jsp:include
jsp:forward
jsp:param
jsp:plugin //往网页里面插入一个applet小程序,基本不用了。
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>
与Directive include的区别:
1)include编译指令是在JSP程序的转换时期就将file属性所指定的程序内容嵌入,然后再编译执行;而jsp:include在转换期间不会被编译,只有在客户端请求时如果被执行到才会被动态编译载入,所以效率较低
2)include编译指令不能带参数;而jsp:include可以
jsp:forword/jsp:param
用于将一个jsp的内容传送到page所指定的JSP程序或者Servlet中处理
格式:
<jsp:forword page="URLSpec" flush="true" />或者
<jsp:forword page="URLSpec" >
<jsp:param name="ParamName" value="paramValue" />
</jsp:forword>forword的页面和forward到的页面用的是同一个request。
与此对应的是:
response.sendRedirect(区别,此为跳转到另一个链接上,不是同一个request;所以跳转后的链接地址不是原来的url)
jsp:useBean
通过jsp:useBean,可以在JSP中使用定义好的Bean
基本用法:
- <jsp:useBean id="beanName" scope="page|request|session|application"
- class="package.BeanClass" type="typeName" />
- <jsp:useBean ...>
- <jsp:setProperty ...>
- <jsp:getProperty ...>
- </jsp:useBean>
示例:
- <jsp:useBean id="cd" scope="page" class="bean.CounterBean" type="Object" />
- /*相当于
- <% Object cb = new bean.CounterBean();%>
- */
- <jsp:setProperty name="cd" property="count" value="23" />
- <jsp:setProperty name="cd" property="count" />
- /*相当于
- <% cd.setcount("23"); %>
- <% cd.getcount; %>
- */
bean的放置目录同servlet,连包一起放;
3.jsp_characterEncoding
<% request.setCharacterEncoding("GBK"); %>传过来就是GBK
或者在单个的显示上用:
<%
String name = request.getParameter("name");
new String(name.getBytes("ISO8859_1"),"GBK");
%>
<%= new String(hello.getName().getBytes("ISO8859_1"),"GBK")%>
4.JSP内置对象
out
request
response
pageContext //用得很少
session
application
config //用得较少;一般指web.xml对于这个JSP或者它编译成功之后的servlet的配置
exception
page //page里面的所有东西可以直接使用,一般不用它
5.servlet和JSP的相互跳转
JSP跳转到Servlet:使用<jsp:forword>或者response.sendRedirect
Servlet跳转到JSP:getServletConfig().getServletContext().getRequestDispatcher("/servlet_jsp/SercletUseJsp.jsp").forword(req,resp);
- 尚学堂马士兵servlet/JSP笔记(四、JSP)
- 尚学堂马士兵servlet/JSP笔记(四、JSP)
- 尚学堂马士兵servlet/JSP笔记(二、servlet)
- 尚学堂马士兵servlet/JSP笔记(二、servlet)
- 尚学堂马士兵servlet/JSP笔记(一、Http协议及WebApp初步)
- 尚学堂马士兵servlet/JSP笔记(三、Cookie、Session、Application和数据库处理)
- 尚学堂马士兵servlet/JSP笔记(一、Http协议及WebApp初步)
- 尚学堂马士兵servlet/JSP笔记(三、Cookie、Session、Application和数据库处理)
- 看尚学堂马士兵JSP的视频笔记
- 尚学堂马士兵struts2 课堂笔记(四)
- 尚学堂马士兵老师oracle笔记
- 尚学堂_马士兵_oracle_笔记
- 尚学堂马士兵Linux视频教程笔记
- 尚学堂马士兵老师oracle笔记
- 马士兵 Servlet & JSP
- 尚学堂马士兵Oracle学习笔记之四:开始学习DML语句
- Java学习资料(四)——尚学堂马士兵视频
- 尚学堂马士兵 Struts2 笔记心得修改版
- Java读取txt数据Demo
- 套接字通讯实例(TCP)
- Spring MVC 教程,快速入门,深入分析
- 共享存储区通信实例及分析
- sync_binlog
- 尚学堂马士兵servlet/JSP笔记(四、JSP)
- 三层
- 消息队列应用实例
- 白话windows多线程同步之事件对象
- java中类跟c++中类的区别
- 又一个网友放生后拍出红莲瓣!
- UINavigationController 直接返回到第一级目录
- 强制性锁建议性锁 .
- Windows平台下如何使用Android NDK