Jsp基础教程.ppt_第1页
Jsp基础教程.ppt_第2页
Jsp基础教程.ppt_第3页
Jsp基础教程.ppt_第4页
Jsp基础教程.ppt_第5页
免费预览已结束,剩余97页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、JavaServer Pages(JSP)网页程序设计,王新颖,2,Web的发展过程,静态Web:以 *.htm ,*.html 为后缀,读取服务器端内容时,直接将网页内容传递给客户端浏览器;所有用户看到的效果都是一样的,3,Web的发展过程,Applet:可以让客户端应用程序具有交互性 没有摆脱静态Web的处理流程,仍旧是在客户端使用各种动态效果 Applet程序本身执行效率低,4,Web的发展过程,动态Web:Web页面的展示效果,因人而改变;并且具有交互性;支持数据库操作 无需在客户端植入JVM,普通浏览器即可 实现手段:ASP、PHP、Java Servlet 、JSP,5,JSP简介

2、,JSP(Java Server Pages)是由Sun公司倡导、许多公司参与一起建立的一种动态网页技术标准。JSP技术有点类似ASP技术,它是在传统的网页HTML文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件(*.jsp)。 用JSP开发的Web应用是跨平台的,既能在Linux下运行,也能在其他操作系统上运行。 JSP的1.0规范的最后版本是1999年9月推出的,12月又推出了1.1规范。目前比较新的是JSP2.0规范。,6,Tomcat服务器配置与使用,Tomcat是一个Web服务器,是用Java语言开发的,实现了一个S

3、ervlet引擎和JSP引擎,因此他支持Java Servlet和JSP Tomcat是一个Web容器,所有的JavaEE WEB程序可以在其上运行 Tomcat服务器是一个符合JavaEE标准的WEB服务器,因此J2EE的EJB程序无法在其上运行,如果要运行EJB程序,可以选择能够运行EJB程序的容器:WebLogic、WebSphere,7,Tomcat服务器配置与使用,Tomcat是一个免费的服务器,下载地址:/ 目前比较新的版本是Tomcat6 Tomcat版本: 手工安装版 tar.gz Linux安装版 zip Windows安装版 e

4、xe Windows中有一个服务,则自动在服务注册,8,Tomcat服务器配置与使用,下载JDK 安装JDK 配置JDK JAVA_HOME=jdk的安装目录 CLASSPATH=%JAVA_HOME%libdt.jar;%JAVA_HOME%libtools.jar; path=%JAVA_HOME%bin;,9,Tomcat服务器配置与使用,下载Tomcat 安装Tomcat 注意服务器端口:8080 配置Tomcat CATALINA_HOME=tomcat的安装路径 CATALINA_BASE= tomcat的安装路径 CLASSPATH

5、=%CATALINA_HOME%libservlet-api.jar;,10,Tomcat服务器目录结构,bin 存放启动和关闭Tomcat服务器的可执行文件 conf Tomcat配置的目录,所有与Tomcat配置有关的内容都在此文件夹之下 |-Sever.xml:Tomcat服务器的配置文件 lib 存放Tomcat运行所需的*.jar包 logs 存放日志文件 temp 存放一些动态生成的临时文件 webapps 存放所有的WEB应用程序,包括应用程序示例,以及用户应用程序 work 存放JSP编译后产生的class文件,11,Tomcat服务器配置与使用,修改端口号:80 当虚拟目录下

6、的class被更新时,自动被加载,12,Tomcat服务器配置与使用, ,13,Tomcat服务器配置与使用,显示服务器目录列表:修改 conf/web.xml文件 default org.apache.catalina.servlets.DefaultServlet debug 0 listings true 1 ,14,Tomcat服务器配置与使用,设置网站默认页 WEB-INF/web.xml default.html default.htm default.jsp ,15,第一个JSP示例, The First 程序编写完成之后一定要放在服务器上(虚拟目录中),通过浏览器运行 运行时第

7、一次(修改后)很慢,之后速度很快!,16,JSP的工作流程,一个JSP页面的具体执行可分为如下几个步骤: 浏览器客户端向JSP容器(如:Tomcat)发出对JSP页面(如index.jsp)的请求 JSP容器将对应JSP页面转换成JAVA Servlet源代码(如index_jsp.java) JSP容器编译该源代码,生成.class文件(如index_jsp.class) JSP容器加载运行对应的.class文件,生成响应的结果页面; JSP容器把响应的输出结果发送到浏览器端,17,JSP的工作流程,18,JSP文件结构, . 其他 HTML 语言 其他 HTML 语言 ,19,JSP示例(

8、Hello.jsp), 你好 , 你好 你好 ,20,JSP的工作流程,JSP页面是由JSP容器自动管理的。JSP页面的生命周期包括两个阶段:转换阶段(Translation Phase)和执行阶段(Execution Phase) Jsp页面对应的“页面实现类”Servlet和对应的编译结果class文件被自动存放在Tomcat 的安装目录下的 workCatalinalocalhost应用程序名orgapachejsp 所有的JSP文件在第一次运行时都会自动编译成*.class文件: 首次运行:*.jsp *.java *.class 运行显示 第二次: |-|,21,JSP的工作流程,2

9、2,查找对应的JSP文件,是否存在,Y,N,是否是修改或创建,后第一次调用,Y,调用Jsp Parser将其,编译成Servlet程序,调用JSDK将对应的Servlet,程序编译成Servlet字节码,执行(若未载入则先载入),已有的对应的Java字节码,N,JSP,23,JSP语法基础,JSP文件的命名规则 JSP中包括:常规JSP页面、静态包含段和JSP文档等。 常规JSP页面:使用扩展名.jsp 静态包含段:“JSP段”或“JSP碎片”,一般使用扩展名为.jspf JSP文档:以XML格式定义的JSP页面,默认扩展名.jspx,24,JSP语法基础,JSP属性值 JSP使用的标记可指定

10、属性,其格式同样遵守XML规范,放在引号(单引号或双引号)中; 属性值可以是:文字属性值或表达式 例如: ,25,JSP语法基础,JSP中的注释 显式注释:HTML注释:最终会发送到客户端 ,客户通过查看源代码可以看到这些注释 - - 隐式注释:JAVA注释:不会在客户端显示,即不会被服务器执行 -%,26,JSP语法基础, ,27,JSP语法基础,JSP数据输出 或 此处的换行只作用于生成的HTML代码,而跟页面显示效果无关 :表达式 类似于:out.println() ; 提示:在开发时尽量不要使用out.println()输出,而使用进行输出 示例:打印9*9表,28,JSP语法基础,)

11、 ; for(int i=0;i) ; for(int j=0;j+i*j+) ; out.println() ; out.println() ; %,29,JSP语法基础, ,30,JSP语法基础,JSP中的变量声名 :声明全局变量、类、方法 全局变量,实例化一次 在此处声明类或方法,在开发中很少 :写具体的JAVA代码或声明局部变量 与 声明变量区别: JSP是一种动态WEB程序,必须有交互功能,31,JSP语法基础,JSP页面构成 元素(Elements) JSP容器支持的元素类型的实例,如指令元素、行为元素和脚本元素 模版数据(Template Data) 需要经过JSP容器特殊处理、

12、直接发送到客户端的所有非元素的其他内容,如HTML文本,32,JSP语法基础,JSP有三种不同类型的语法 编译器指令(DIRECTIVE) 脚本语法(SCRIPTING) 动作语法(ACTION) , , , ,,33,JSP语法基础,编译器指令:独立于JSP页面接受任何请求,但不产生任何页面输出信息 include 用于在代码编译时包含指定的源文件的静态内容,可以包含任意类型的文件 page 用于指明当前JSP页面的属性 taglib 用于设置JSP标签库,34,Page指令, language:定义转换单元中的生命、脚本片段和表达式中使用的脚本语言 info:定义JSP页面描述信息,其值可

13、以是任意字符串 import:导入JSP页面脚本环境中使用的Java类定义 session:指定该页面师傅有HTTP回话 contentType:指定返回的浏览器的内容类型和编码格式(charset) text/plain:纯文本 text/html:纯文本的HTML页面(默认值) text/xml:XTML页面 application/x-msexecl:Excel文件 application/msword:Word文件 errorPage:指定错误处理也面 isErrorPage:指定当前的JSP页面是否为另外JSP页面的错误处理页面 buffer和autoFlush:用于指定处理页面输出

14、内容时的缓冲模式,控制JSP的缓冲 isElIgnored:是否禁止EL表达式的计算(true则禁止),35,动作指令,为JSP页面的执行提供信息,遵循XML语法 JSP2.0中有20种标准行为,可分为如下几类: JSP1.2中原有的6种: , , , , 和 存取JavaBean的3种: , 和 用于JSP文档的6种: , , , , 和 用于动态产生XML元素的3种: , 和 用于标记文件的2种:和,36,和 可以向被包含页面中传递参数 不包含参数的 包含参数的 * ,37,incl.txt PARAM1: PARAM2: incl.jsp PARAM1: PARAM2: Demo1.js

15、p Demo2.jsp ,38,Demo3.jsp ,39,include.jsp include.jsp: Demo4.jsp / 比较两类包含语句的差别 includeDemo04.jsp: ,40, 跳转指令,属于无条件跳转语句 标签指令形式代码,必须写在Scriptlet()之外 使用此跳转语句,页面的内容是已经跳转了,但是地址栏没有任何变化;即:用户的请求依然没有改变,所以此跳转,属于服务器端跳转 转向的目标可以是静态HTML页面,JSP页面或Java Servlet类,41,fDemo1.jsp 这里永远不会执行! fDemo2.jsp: ,42,JSP的四种属性范围,JSP中属性

16、的保存范围: 在JSP中可以采用以下方法设置和取得属性: 设置:public void setAttribute(String name, Object value) name:属性名称为字符串 value:属性值可以为任意对象 取得:public Object getAttribute(String name),43,Page范围,在JSP中设置的一个页的属性范围内有效,44,Page范围,pageDemo01.jsp name : password : ,45,Page范围,pageDemo01.jsp pageDemo02.jsp name : password : ,46,Reques

17、t范围,将属性保存在一次请求范围之内 前提:必须使用服务器端跳转,47,Request范围,requestDemo01.jsp name : password : ,48,Request范围,requestDemo01.jsp requestDemo02.jsp name : password : 刷新 ,49,Session范围,与session有关的任何打开的页面都有效 任何类型的跳转均可,50,Session范围,sessionDemo01.jsp name : password : ,51,Session范围,sessionDemo01.jsp sessionDemo02.jsp na

18、me : password : 刷新 ,52,Application范围,在整个服务器范围内都有效 applicationDemo01.jsp name : password : ,53,Application范围,applicationDemo01.jsp applicationDemo02.jsp name : password : 刷新 ,54,JSP属性范围,四种属性范围都可以依靠pageContext 展开 public static final int APPLICATION_SCOPE public static final int SESSION_SCOPE public st

19、atic final int REQUEST_SCOPE public static final int PAGE_SCOPE 在开发中,往往使用session、request 范围,55,JSP属性范围,pageDemo03.jsp name : password : ,56,JSP内置对象,57,JSP内置对象,JSP内置对象分类 与Servlet相关的对象:page、config 与I/O相关的对象:out、request、response JSP执行时,提供有关Context对象:session、application、pageContext 与Error相关的对象:exception

20、,58,request对象,用于服务器端接收客户端请求的信息,以便对其做进一步处理,实现交互设计的功能 getParameter():接收请求的参数 功能: 处理中文,避免乱码 对所有的数据进行再编码:ISO8859-1编码 ;转换后,再将byte数组重新变为字符串 public byte getBytes(encoding) 设置统一字符编码 public void setCharacterEncoding(String env) throws UnsupportedEncodingException,59,request对象,demo01.jsp 用户名: ,60,request对象,de

21、mo02.jsp 输入内容为:,61,request对象,demo02.jsp 输入内容为:,62,request对象,如果传递的内容是数组(复选框的情况下、多个下拉列表项) public String getParameterValues(String name) demo03.jsp 用户名: 兴趣: 篮球1 游泳1 唱歌1 跳舞1 看书1 ,63,request对象,demo04.jsp 用户名为: 兴趣为: 、 ,64,request对象,隐藏域 通过URL地址获取参数 http:/localhost/test/demo06.jsp?un=Hello response.setHeade

22、r(“refresh”,“秒;URL= 页面地址) ; response进行跳转重定向 response.sendRedirect (跳转路径) 思考:试比较两种跳转的差别,66,response对象,设置Cookie Cookie是服务器端保存在客户端的一组资源 登陆时会问你是否记住密码?或XX长的时间不用再登陆 此种功能的实现就是通过Cookie public void addCookie(Cookie cookie) 向客户端设置Cookie response 在服务器端取得Cookie request,67,response对象,Cookiedemo1.jsp ,68,response

23、对象,Cookiedemo2.jsp - ,69,response对象,服务器端在客户端第一次访问之后,会设置一个默认的Cookie在客户端上:JSESSIONID JSessionID :表示唯一的一个客户端在服务器上的编号 身份证编号 自动获得(对应一个SESSION对象) 默认情况下,Cookie只对当前浏览器有效 Cookie是保存在客户端上的信息,安全性较差。不要把过多的隐秘信息保留在Cookie中,70,session对象,用于保存用户的各种信息, 直到超时(一般为900S)或被人为释放 服务器上通过session来分别不同的用户 Session ID:任何连到服务器上的用户,服务

24、器都会为之分配唯一的一个不会重复的session ID ;sessionID是由服务器统一管理的,人为不能控制 session.getId() session.isNew(),71,session对象,session的属性 设置属性: public void setAttribute(String name, Object value) 取得属性: public Object getAttribute(String name) 删除属性: public void removeAttribute(String name) putValue setAttribute getValue getAtt

25、ribute removeValue removeAttribute,72,session对象,设置session失效 session.invalidate() 得到session的创建时间 session.getCreationTime() 取得用户最后一次操作的时间 session. getLastAccessedTime() 用户在线时间 最后一次操作时间-创建时间,73,Application对象,用于保存公共信息,对所有用户共享 属性操作:setAttribute()、getAttribute()、removeAttribute(),74,Application对象,获取服务器的工作

26、目录(网站的虚拟目录) application.getRealPath(String path) Application是在整个服务器中保持的只有一个实例的对象,在实际应用中往往使用getServletContext()方法代替application application.getRealPath(“/”); getServletContext().getRealPath(/) ; this.getServletContext().getRealPath(/) ;,75,out对象,主要用于动态的向客户端输出数据 在JSP中应尽可能少使用此对象 要用完全代替,76,config对象与安全性,W

27、EB-INF文件夹 保存在该文件夹中的jsp文件无法被访问 修改web.xml文件 wxy /WEB-INF/sdemo.jsp wxy /jlu ,77,config对象与安全性,用来获取服务器的配置参数,即在WEB-INF/web.xml中配置的参数 如果要取得这些初始化参数,必须通过映射名称进行访问JSP页面,通过config对象取得初始化参数 public String getInitParameter(String name) 获取具体名字的参数 public Enumeration getInitParameterNames() 获取全部参数名字,78,JSP几个内置对象的作用域,

28、79,JSP与数据库,JDBC原理图,80,JSP与数据库,JDBC的连接方式: JDBC-ODBC 桥连接方式:SUN公司开发出来的一套数据库访问操作,使用ODBC 提供的数据库连接技术访问数据库,性能较差,不适合在开发中使用 JDBC 驱动连接:是由各数据库生产厂家提供,按JDBC 标准提供,81,JSP与数据库,JDBC中的常用接口 DriverManager Connection Statement / PreparedStatement ResultSet,82,JSP与数据库,利用JDBC开发Web数据库应用框架 装入JDBC驱动程序 Class.forName(“”) ; 创建数

29、据库连接 Connection conn = DriverManager.getConnection(“”); 创建会话对象 Statement stmt = conn.createStatement(); PreparedStatement pstmt = conn.prepareStatement(sql) ;,83,JSP与数据库,利用会话对象执行SQL语句,得到结果 stmt.executeUpdate(sql) ; stmt.executeQuery(sql) ; pstmt.executeUpdate() ; pstmt.executeQuery() ; 处理结果 一般是对Resu

30、ltSet的操作 关闭数据库连接 关闭的顺序与打开的顺序相反,84,JSP与数据库,JDBC-ODBC桥连接 建立数据库和表(Access或SQL Server) 配置 ODBC 数据源 驱动程序 sun.jdbc.odbc.JdbcOdbcDriver 数据库连接地址 jdbc:odbc:数据源名字,85,JSP与数据库,86,JSP与数据库,try /用于执行更新语句 Class.forName(DBDRIVER) ; conn = DriverManager.getConnection(DBURL,dbu,dbp) ; sql = insert into person values (C

31、Y,yyy,38) ; sql1 = update person set age=32 ; stmt = conn.createStatement() ; pstmt = conn.preparedStatement(sql1) ; stmt.executeUpdate(sql) ; pstmt.executeUpdate() ; catch(Exception e) out.println(失败!+e) ; finally conn.close(); ,87,JSP与数据库,try /用于查询语句 Class.forName(DBDRIVER) ; conn = DriverManager.

32、getConnection(DBURL,dbu,dbp) ; sql = “select * from person ; stmt = conn.createStatement() ; rs=stmt.executeQuery(sql) ; 对结果集rs进行处理下页 catch(Exception e) out.println(失败!+e) ; finally conn.close(); ,88,JSP与数据库,处理结果集 ID 姓名 密码 年龄 ,89,JSP与数据库,try /PreparedStatement执行sql语句 Class.forName(DBDRIVER) ; conn =

33、 DriverManager.getConnection(DBURL) ; sql = “insert into person values (?,?,?) ; pstmt = conn.preparedStatement(sql1) ; pstmt.setString(1, wxy) ; pstmt.setString(2,www) ; pstmt.setInt(3,31) ; pstmt.executeUpdate() ; catch(Exception e) out.println(失败!+e) ; finally conn.close(); ,90,JSP与数据库,JDBC2.0的新特

34、性 ResultSet对象中的光标能够上下自由的移动 能直接使用Java程序语句更新数据库表格中的内容,而不需要些SQL语句 可以进行数据库的批处理操作,91,JSP与数据库,可滚动的ResultSet TYPE_FORWARD_ONLY:只能向下滚动,与JDBC1.0没差别 TYPE_SCROLL_SENSITIVE:可以上下滚动,但是不能取得结果集改变后的值 TYPE_SCROLL_INSENSITIVE:可以上下滚动,并且能够取得结果集改变后的值 上述选项,性能依次下降!,92,JSP与数据库,可滚动的ResultSet中的方法 rs.next() rs.previous() rs.fi

35、rst() rs.last() rs.absolute(int n) rs.relative(int n),93,JSP与数据库,直接使用结果集操作 只读:ResultSet.CONCUR_READ_ONLY 更新:ResultSet.CONCUR_UPDATABLE 此类操作性能很差,若数据量较少,可以采用此种方式,如果数据量较大,绝对不要使用 使用: stmt = conn.createStatement (ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE),94,JSP与数据库,可更新结果集中的方法 rs.update

36、XXX(“列名字”) ; rs.insertRow() ; rs.updateRow() ; rs.deleteRow() ; 注:在对结果集进行更新操作之前,要先进行定位操作!,95,JSP与数据库,批处理操作事务处理 JSP中默认设置Connection为自动提交;因此在进行事务处理前,需要设置为非自动提交,96,JSP与数据库,try stmt = conn.createStatement() ; conn.setAutoCommit(false) ; / 取消自动提交 / 编写批处理SQL语句 stmt.addBatch(“insert into person values (wxy1,zzz,30) ; stmt.addBatch(“insert into person values (wxy2,zzz,30) ; stmt.addBatch(“insert into person values (wxy3,zzz,30) ; /故意设置一条错误的SQL语句 stmt.addBatch(“insert into person

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论