JSP学习初体验
JSP简介:
1)JSP--Java Server Pages
2)拥有servlet的特性与优点(本身就是一个servlet)
3)直接在HEML中内嵌JSP代码
4)JSP程序由JSP Engine先将它转换成servlet代码,接着将它编译成类文件载入执行
5)只有当客户端第一次请求执行JSP时,才需要将其转换、编译
JSP的优点:
1)优良的性能
优于CGI、PHP、ASP
2)平台无关性
操作系统无关,web服务器无关
3)可扩展性
tag的扩展机制,简化页面开发
JSP编程--基本语法:
JSP传统语法:
1)Declaration:
基本语法:
<%! %>
说明:在此声明的变量、方法都会被保留成唯一的一份,直到JSP程序停止执行。此部分声明的变量会转化为SERVLET的成员变量,函数只能在此处声明。
例:
<%!
int i;
public void setName(){… …}
%>
【注意】:<% %>这种形式声明的变量和方法是局部的,例如<% int count1=0 %>
<%= xxx %>:原样输出xxx的内容
2)Scriptlet:
基本语法:
<%程序代码区%>
可以放入任何的Java程序代码,此部分声明的变量为局部变量,在service()方法里
例:
<%
for (int i=0;i<10,i++)
{
… …
}
%>
3)注释格式:
1)<%--... ...--%>
2)<%//... ...%>
3)<%/*... ...*/%>
4)表达式:
基本语法:
<%=… …%>
=后面必须是字符串变量或者可以被转换成字符串的表达式
不需要以;结束,只有一行
例:
<%=“hello world”%>
<%=i+1%>
<%=request.getParameter(“name”)%>
【注意】:形如http://localhost:8888/test/Expressions.jsp?testParam=abc%20de,问号?后面的testParam=abc%20de是传递给jsp的参数,如果参数内包含空格,则会用%20来进行替换;
5)Directive:编译期指令
Directive(编译指令)相当于在编译期间的命令
格式:
<%@Directive 属性=“属性值”%>
常见的Directive:
page
include
taglib
详细了解三种常见的Directive:
5.1 Directive-page:
【注意】比较重要的几个属性:import、errorPage、isErroPage、contentType
下面分别举例说明
import和contentType
<%@Page import="java.util.*"%> <%@page contentType="text/html;charset=gb2312"%>
<%= new Date() %>
<%
out.println("你好");
%>
ErrPage和isErrorPage:友好的出错界面,当出现错误的时候提供给用户ErrPage的页面
<%-- *******ErrPage.jsp******* --%>
<%@ page contentType="text/html;charset=gb2312" %>
<%@ page is ErrorPage="true" %>
<HTML>
<BODY TEXT="red"> 错误信息:<%= exception.getMessage() %>
</BODY>
</HTML>
5.2 Directive-include:用于包含非动态的代码,不能向fileURL中传递参数,即不能出现形如abc.jsp?user=aaa的形式
将指定的JSP程序或者HTML文件包含进来
格式:
<%@include file=“fileURL%>
JSP Engine会在JSP程序的转换时期先把file属性设定的文件包含进来,然后开始执行转换及编译的工作。(原封不动的把文件的代码copy到该位置,然后进行转换和编译,只生成一个java和class)
限制:
不能向fileURL中传递参数
不能abc.jsp?user=aaa
6)Action:运行期间的指令
Action(动作指令)在运行期间的命令
常见的:
jsp:useBean
jsp:setProperty
jsp:getProperty
jsp:include
jsp:forward
jsp:param
jsp:plugin
嵌入applet
6.1 jsp:inlcude/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>可以。
动态包含的文件和被包含文件用的是同一个request对象。产生两个class文件
6.2 jsp:forward/jsp:param
用于将一个jsp的内容传送到page所指定的JSP程序或者Servlet中处理(URL)
格式:
<jsp:forward page=“urlSpec” flush=“true”/>
<jsp:forward page=“urlSpec”>
<jsp:param name=“paramName” value=“paramValue”/>
</jsp:forward>
<jsp:param>用于指定参数和其对应的值 Forward的页面和forward到的页面用的是同一个request
与此相对应的是
response.sendRedirect
6.3 <jsp:forward>与response.sendRedirect的区别(重点:请求的重定向和请求的转发)
用于将一个jsp的内容传送到page所指定的JSP程序或者Servlet中处理(URL)
格式:
<jsp:forward page=“urlSpec” flush=“true”/>
<jsp:forward page=“urlSpec”>
<jsp:param name=“paramName” value=“paramValue”/>
</jsp:forward>
<jsp:param>用于指定参数和其对应的值 Forward的页面和forward到的页面用的是同一个request
与此相对应的是
response.sendRedirect
两者的区别可以用下面的图示描述:
用蓝色标注的是forward方式请求页面(前后是同一个request),用绿色标注的是sendRedirect方式(不同的request)
6.4 jsp:usebean(不要使用裸体类,将bean放到包中,如com.itcast.useBean)
通过jsp:useBean,可以在JSP中使用定义好的Bean
Bean的基本要素:
必须要有一个不带参数的构造器。在JSP元素创建Bean时会调用空构造器
Bean类应该没有任何公共实例变量,也就是说,不允许直接访问实例变量,变量名称首字母必需小写
通过getter/setter方法来读/写变量的值,并且将对应的变量首字母改成大写
基本用法:
test.jsp/CounterBean.java 不要使用裸体类(规范要求) jsp:useBean各项参数含义:
id:对象实例名称
scope:Bean作用的范围,默认为page,对整个jsp页面有效
class:Bean类名称(全名)
type:Bean实例类型,可以是本类,或其父类,或实现的接口,默认为本类
Scope各项参数的意义:
page:仅涵盖使用JavaBean的页面
request:有效范围仅限于使用JavaBean的请求
session:有效范围在用户整个连接过程中(整个会话阶段均有效)
application:有效范围涵盖整个应用程序。也就是对整个网站均有效 jsp:setProperty的格式:
<jsp:setProperty name=“beanName”
property=“propertyName” |property=“*”
value=“property value” |param=“paramName”/>
相当于beanName.setPropertyName(value)方法调用(setXxx()方法)
jsp:getProperty的格式:
<jsp:getProperty name=“beanName” property=“propertyName”/>
相当于beanName.getPropertyName()方法调用(getXxx()方法) 建立表单参数和Bean属性之间的关联
通过param指定表单元素的名称,通过perperty指定对应的Bean属性名称,由此建立这两个变量的关联
通过*来设置所有属性和输入参数之间的关联
在建立Bean属性和表单参数之间的对应关系时,服务器会将对应的参数自动转换成和属性类型匹配的数据
7)JSP内置对象(常用的六个内置对象和常用的方法)
out
request
response
pageContext 用的很少
session
application
config 用的很少
exception
Page用的很少
7.1 JSP--out
常用方法:
println():向客户端输出各种类型数据(常用)
newLine():输出一个换行符(常用)
close():关闭输出流
flush():输出缓冲区里的数据
clearBuffer():清除缓冲区里的数据,同时把数据输出到客户端
clear():清除缓冲区里的数据,但不把数据输出到客户端
getBufferSize():返回缓冲区的大小
7.2 JSP-request
可以用此对象取得请求的Header、信息(如浏览器版本、语言和编码等)、请求的方式(get/post)、请求的参数名称、参数值、客户端的主机名称等。
常用方法:
getMethod():返回客户端向服务器端传送数据的方法
getParameter(String paramName):返回客户端向服务器端传送的参数值,该参数由paramName指定
getParameterNames():获得客户端传送给服务器端的所有参数的名字,结果是一个枚举类型数据(Enumeration)
getParameterValues(String name):获得指定参数的所有值,由name指定
getRequestURI():获得发出请求字符串的客户端地址
getRemoteAddr():获取客户端的IP地址
getRemoteHost():获取客户端机器名称
getServerName():获取服务器的名字
getServletName():客户端所请求的脚本文件路径
getServerPort():获取服务器端的端口
对应类: javax.servlet.http.HttpServletRequest
7.3 JSP-response
表示的是返回给客户端的响应
是javax.servlethttp.HttpServletResponse接口的一个实例
经常用于设置HTTP标题,添加cookie、设置响应内容的类型和状态、发送HTTP重定向
常用方法:
addCookie(Cookie cookie):添加一个Cookie对象,用于在客户端保存特定的信息
addHeader(String name,String value):添加HTTP头信息,该Header信息将发送到客户端
containsHeader(String name):判断指定名字的HTTP文件头是否存在
sendError(int):向客户端发送错误的信息(例如404、505)
sendRedirect(String url):重定向JSP文件
sendRedirect和<jsp:forward>的区别
sendRedirect通过客户端发起二次申请,不同的request对象
Jsp:forward是同一个request,在服务器内部转发
setContentType(String contentType):设置MIME类型与编码方式
7.4 JSP-Cookie
Http协议的无连接性要求出现的一种保存C/S间状态的机制
Cookie:保存到客户端的一个文本文件,与特定客户相关
Cookie以"名-值"对的形式保存数据
通过getName和getValue的方式得到相应的名字和值
7.5 JSP-session
<% @page session="true"%>(默认)
--表示session功能已经在jsp页面中启动
session常用的方法:
void setAttribute(String name,Object value) Object getAttribute(String name) boolean isNew()
Servlet和JSP的通信
1)从JSP调用Servlet可用<jsp:forward>,请求信息自动传递到servlet,或者通过sendirect;
<!-- Forward to a servlet, 这个servlet存放在WEB-INF的servlet目录下 -->
<jsp:forward page="/servlet/ServletToJSP"> </jsp:forward>
2)从Servlet调用JSP可以使用RequestDispatcher接口的forward(req, resp)方法,请求信息需要显示传递;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class ServletToJSP extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 设置属性并将它分发给/servlet_jsp/ServletUseJsp.jsp处理
resp.setContentType("text/html;charset=gb2312");
req.setAttribute("servletName", "ServletToJSP");
// RequestDispatcher getRequestDispatcher(String path):
// Returns a RequestDispatcher object that acts as a wrapper for the resource located at the given path.
getServletConfig().getServletContext().getRequestDispatcher("/servlet_jsp/ServletUseJsp.jsp").forward(req, resp);
}
}
代码15行中要跳转到的JSP页面:servlet_jsp/ServletUseJsp.jsp
<%@page contentType="text/html;charset=gb2312" %>
<meta context="text/html;charset=gb2312">
<title>Servlet使用JSP</title>
<h2>Servlet使用JSP的例子</h2>
<h2>这个页面是被Servlet调用的</h2>
JSP学习初体验的更多相关文章
- YII学习,初体验 ,对YII的一些理解.
先说点没用的: 不会选择,选择后不坚持,不断的选择.这是人生中的一个死循环,前两一直迷茫.觉得自己前进方向很不明朗.想去学的东西有很多.想学好YII,想学PYTHON 想学学hadoop什么的,又想研 ...
- day21—AngularJS学习初体验
转行学开发,代码100天——2018-04-06 今天按照学习计划安排,开始AngularJS的学习. 关于AngularJS,在菜鸟教程上这样介绍 好吧,Angular学习起来非常简单,哈哈,现在就 ...
- linux学习初体验
前天买了鸟哥私房菜,昨天一早就到了.阅读了前两章. 一.Linux是什么 二.Linux如何学习 还有前面的计算机概论也值得一看.对于计算机构成,硬件解读,数据存储,比一般的电脑维修类的书深一些. 第 ...
- jsp&servlet初体验——用户登录功能实现
数据库准备-创建db_login数据库 t_user表 1.创建web工程 2.创建用户model user.java package com.gxy.model; public class U ...
- java学习初体验NO.1
一.学习目标: 1.理解Java编译原理 在Java编程语言中,所以源代码首先以用.Java扩展名结尾的纯文本件编写,然后,编译器将这些源文件编译成.Class文件.然后,Java启动器工具使用Jav ...
- 【学习博客】Python学习初体验
本周是正式开始学习Python的第一周.很久不写代码了,毕业第5年了,期间几乎没怎么动过手.这段时间比较规律.密集的学习又让我找回了当时的感觉,还不算陌生,我挺喜欢的这种能实实在在看到自己知识增长的状 ...
- json学习初体验--第三者jar包实现bean、List、map创json格式
1.的需要jar包裹json-lib.jar 下载链接: http://sourceforge.net/projects/json-lib/files/json-lib/ 此包还须要下面的依赖包, c ...
- java学习初体验之课后习题
import java.util.Scanner; public class HelloWorld { public static void main(String[] args) { //打印Hel ...
- 【170】◀▶ IDL 学习初体验-全
IDL Reference 操作符号 数组 字符及字符串 结构体 指针 链表 & 哈希表 程序控制(循环.条件.跳转语句) 过程 & 函数 输入与输出 系统变量 文件系统操作 直接图形 ...
随机推荐
- java--面向抽象编程
所谓面向抽象编程是指当设计某种重要的类时,不让该类面向具体的类,而是面向抽象类,及所设计类中的重要数据是抽象类声明的对象,而不是具体类声明的对象.就是利用abstract来设计实现用户需求. 比如:我 ...
- TagHighlight
:UpdateTypesFile 命令会生成相应的上色高亮文件(生成的着色文件可以叫types_c.taghl)还有相应的tags文件,寻找tags或taghl_config.txt确定project ...
- Android上常见度量单位【xdpi、hdpi、mdpi、ldpi】解读
术语和概念 屏幕尺寸 屏幕的物理尺寸,以屏幕的对角线长度作为依据(比如 2.8寸, 3.5寸). 简而言之, Android把所有的屏幕尺寸简化为三大类:大,正常,和小. 程序可以针对这三种尺 ...
- 网站常见问题及解决方法(div/css)
18.<a> 在IE6,7 下面重新定义宽和高的代码:{ display:block; display:-moz-inline-stack; display:inline-block; ...
- WebView点击加载的页面中的按钮时不弹出新窗口以及在加载后执行javascript
mWebView.setWebViewClient(new WebViewClient() { //点击网页中按钮时,在原页面打开 public boolean shouldOverrideUrlLo ...
- Android获取SharedPreferences失败,且App无法启动
说明: 一个app访问另外一个app的SharedPreferences,程序启动之后没有显示界面就卡死了,无任何提示信息. 错误原因: 应用调用createPackageContext失败,但是也不 ...
- db2数据库sql报错信息
sqlcode sqlstate 说明 000 00000 SQL语句成功完成 01xxx SQL语句成功完成,但是有警告 +012 01545 未限定的列名被解释为一个有相互关系的引用 +098 ...
- eclipse集承jboss服务器
eclipse Kepler + Jboss7.1 参考引用文档: http://www.tekdigest.com/how-to-install-jboss-tools-in-eclipse.htm ...
- MVC ActionResult -- JavaScriptResult,JsonResult
以下是ActionResult的继承图: 大概的分类: EmptyResult:表示不执行任何操作的结果 ContentResult :返回文本结果 JavaScriptResult:返回结果为Jav ...
- SQL 2005 日志损坏的恢复方法
SQL 在突然停电或者非正常关机下,可能会出现日期文件错误,导致数据库不正常.恢复数据库方法如下 1.数据库服务停掉 将数据库文件备份 例如数据库名为 DTMS 则将 DTMS.mdf 备份出来. 2 ...