1、JSP:Java server pages,是一种动态网页技术;“动态”指的是交互性,而不是动画或者 js特效的动态。同类产品:ASP,PHP,JSP 的服务器:Tomcat,Weblogic,webSphere,JBoss,JRun,Resin.Tomcat 目录:bin:Tomcat 的启动和关闭程序Common:一些库文件Conf:配置信息。WebApps:站点放在此Work:jsp 会被译成 servlet,放在此目录下站点的创建:1。在 WebApps 目录下创建一个目录 ,比如:JspStudy。2。编写 first.jsp,内容就是以前的 HTML 代码。3。在 JspStudy
2、 下创建一个文件夹:WEB-INF4。在 WEB-INF 下创建一个文件:web.xml5。编写 web.xml 的内容为:first.jsp6。可以省略,它指的是访问站点时的默认首页;可以有多个,会依次寻找。7。访问:http:/localhost:8080/JspStudy8080 为端口号;JspStudy 是你的站点目录名;localhost 可以换成 IP 地址;更改端口号:1。打开 confserver.xml 文件。2。找到 port=“8080“3。更改。注意:不要与系统中其它软件的端号冲突。将服务目录创建在任意的目录下,而不是 webapps 目录下:1。打开 confser
3、ver.xml 文件。2。在前加:注意:大小写;XML 是区分大小写;3。访问:http:/localhost:端口号/ 站名比如:DW 中的站点配置:1。菜单:stie(站点)/manage site(管理站点)2。对话框上:单击“new”/“site“3。advance 选项卡,local root folder:本地文夹,找到 webapps 下的你的站点目录;4。左侧 remote info(远程信息 ):Access(访问)设置为 local/network(本地/网络):指定站点根目录,同上。5。左侧 Testing Server(测试服务器 ),server modal(服务器模
4、型 ):设置为 jsp,Access(访问):local/network,URL prefix(URL 前缀):设置你的站点访问的URL,比如:http:/localhost:6688/JspStudy/即:http:/localhost:端口号/ 站点名 /JSP 嵌入在 HTML 中,就是使用: 以及其它特定的指令或者动作:注意:只能是一条语句;:注意:可以有 N 个 out.println();区别 java 没有 System练习:写一段代码,求出 1-100 和,并输出JSP 输出语句中可以使用 HTML2)out.println(“32“);elseout.println(“3以上
5、代码可以写成:2)%323请理解!JSP 文件的构成元素:1.HTML 2.注释 3.脚本(scriptLet) 4.指令 5.动作注释元素:其实是 HTML 注释 其实还是 HTML 注释,只不过是注释的内容是由 jsp 决定的此种注释不同于上两种,不会显示在客户端的源码中此种注释是脚本种的注释,即 java 的注释脚本元素:包括三个方面:声明(Declaration);表达式(Expression);小脚本(scriptlets)声明: 1.可以声明变量,也可声明方法;这种变量和方法会成为成员变量和成员方法;否则,为局部变量和局部方法2.声明的办法 3.此种声明可以在变量使用前,也可以在变
6、量使用后;4。而局部变量则必须在使用前声明;方法同理。如:“再如:“请查看 work 目录下的 java 文件,进行理解。表达式;用法:注意:无分号;=是输出的作用;小脚本:指令元素:三种:页面指令(page);include 指令;taglib 指令;指令的特点是动作元素:作用:可以理解为 sun 为我们定义的一些标签,有相应的功能;特点:;有时可以写成page 指令:格式;注意:除 import 之外,其它指令只能出现一次。说明:属性 描述 默认值 比如langage 定义使用的语言,只有“java“ java language=“java“import 导入包,多包之间用逗号import
7、=“java.io.*,java.util.*“session 此页面是否在 session 中有效 true session=“false“buffer 缓冲大小 buffer=“64K“autoFlush 自冲刷新缓冲 true autoFlush=“true“info 可以使用 servlet.getServletInfo()获取信息 info=“一个测试“errorPage 出现异常是,自动跳转的页 errorPage=“*.jsp|*.html“isErrorPage 指定当前页为错误页 isErrorPage=“true“contentType 指页面的 MIME 类型conten
8、tType=“text/html;charset=gb2312“pageEncoding 页面的编码 pageEncoding=“iso-8859-1“info 属性实例:谁呀?“+s);%错误页实例:注意是两个文件文件一:此文件会产生错误,使用指令:errorPage=“文件二:此文件是显示错误信息的页,使用指令:isErrorPage=“true“出错了!出错了!发生了以下的错误:1.除数不能为零。2.3.include 指令:作用:静态的包含一个文件;可是是 txt,jsp 以及其它浏览器所能识别的文件;被包含文件将成为当前文件的一部分;注意: 1.若被包含文件修改了,则必须重新编译 j
9、sp,否则不能更新.2.若当前 jsp 文件已经有某个 page 指令,则被包含的文件一定不能有相同指令.3.常应用于多页有重复的内容;比如:导航栏或者版权说明;格式:比如:jsp 的动作标签:理解:自定义的标签;所以,要有结束标记;include 动作:或者与 include 指令的区别:第一:动作标签是在执行时才对包含的文件进行处理;而指令是在编译处理;第二:动作标签不将被包含的文件实际的合并成当前页面的一部而,而只是告知java 解释器去执行被包含的文件;第三:被包含的文件在语法和逻辑上是独立的;第四:被包含文件内容的修改会更新在包含文件上.forward 动作:作用:停止当前页面的执行
10、,跳转到另一个页面;格式:实例:产生一个随机数,当随机数大于 0.5 时自动跳转到 1.jsp;否则,跳转到 2.jsp作业:根据不同的星期几跳转到对应的页面;plugin 动作:作用:用业产生 object 或者 embed 标签,使用它可以插入 Applet 或者 JavaBean格式:“ /多参,同上out 对象及方法jsp 内置对象谈讨之二:request 对象作用:封装了用户提交的信息;所以,可以由对象来获取用户请求的信息。说明: 第一:它被包装成 HttpServletRequest 接口。第二:常用来在单击表单中的提交按钮后,获取信息。第三:表单的格式:在单击提交按钮后,会自动执
11、行 action 所对应的 jsp 页面;action 对应的页面可以获取表单中的信息;这些信息就封装在 request 对象中;request 对象的方法:getAttribute(String name):返回由 name 指定的属性值;如果属性值不存在,则返回null;getAttributeNames():返回 request 对象中的所有属性的名字集合,结果的类型是枚举型;getCookies():返回客户端所有 Cookie 对象,结果是一个 Cookie 数组;getCharacterEncoding():返回请求的编码方式;getContentLength():返回请求的 bo
12、dy 长度;如果不确定长度,则返回-1;getHeader(String name): 返回 Http 协议定义的文件头信息;getHeaders(String name):返回指定名字的头信息的所有值,结果是一个枚举型;getHeaderNames():返回所有文件头信息的名字,结果是一个枚举型;getMethod():返回客户端提交数据的方法;getParameter(String name):重要方法,返回指定表单中提交参数的值;getParameterNames():返回客户端提交的所有参数的名字,结果是一个枚举型;getParameterValues(String name):获得指
13、定参数的所有值,结果是一个字符数组;getProtocal():返回客户端提交数据时,所使用的协议;getQueryString():返回客户端以 get 方法传递参数的值;getRequestURI():返回发出请求的页面的地址;getRemoteAddr():返回客户端的 IP;getRemoteHost():返回客户端的主机名;getSession(Boolean create):返回与请求相关的 session;若 create 参数为 true,表示如果客户端没有创建 session,则创建;getServletPath():返回请求的脚本文件的文件路径;getServerPort(
14、):返回服务器的端口号;removeAttribute(String name):删除请求中的一个属性;setAttribute(String name,java.lang.Object obj):设置名字为 name 的 request 参数的值;类型由 obj 决定;getLocale():返回本土信息;在此返回 zh_ch;举例:Request Object Info:getMethod:“);out.println(request.getMethod(); out.println(“getParameter:“);out.println(request.getParameter(“na
15、me“);out.println(“getAttributeNames:“);java.util.Enumeration e=request.getAttributeNames();while(e.hasMoreElements()out.println(e.nextElement();out.println(“getCharacterEncoding:“);out.println(request.getCharacterEncoding();out.println(“getContentLength: “);out.println(request.getContentLength();out
16、.println(“getContentType:“);out.println(request.getContentType();out.println(“getLocale:“);out.println(request.getLocale();out.println(“getProtocol:“);out.println(request.getProtocol();out.println(“getRemoteAddr:“);out.println(request.getRemoteAddr();out.println(“getRemoteHost:“);out.println(request
17、.getRemoteHost();out.println(“getRemoteUser:“);out.println(request.getRemoteUser();out.println(“getServerName:“);out.println(request.getServerName();out.println(“getServerPort:“);out.println(request.getServerPort();out.println(“getSession:“);out.println(request.getSession(true);out.println(“getHeade
18、r(User-Agent)“);out.println( request.getHeader(“User-Agent“);%例子:返回所有的文件头信息名称及值“);%通过这个例子,我们知道 request.getHeader(String name)方法的参数可以有:accept,referer,accept-language,acceptEncoding,user-agent,host,connection,cookie 等例子:返回所有指定头名字 cookie 的值“);%表单信息的获取,由 request.getParameter(“表单元素名“)实现:举例:在一文本框中输入信息,提交后
19、在另一页面中显示第一个文件:第二个文件:获取文本框提交的信息:获取按钮的名字:注意:第一:如果直接由地址栏请求处理页,则 request.getParameter(“表单元素“),返回值为 null;第二:可以在直址中直接传递参数;以地址?参数=值第四:表单的 post 方法与 get 方法的区别:1.get 方法会将参数及值显示在地址栏中;所以,有安全需要的信息不能这种方式;2.post 方法不会,可以提交大数据;而 get 方法提交时对提交的信息量有限制;所以,留言之类的信息不可用 get3.post 方法是默认方法;通常使用此方法;4.get 方法,执行效率高;第五:可以用超链接传递参数
20、,相当于 get 方法;如:go to tree.jsp再做一例子:在文本框中输入一个数,在另一个页面显示这个数的平方根(自做,提示:需转换数据类型)request 对象中的中文乱码问题解决:实例:文件一:文件二:获取文本框提交的信息:小结:1。page 指令中的 contentType=“text/html;charset=GB2312“ 只能用来控制页面上静态内容的中文问题;2。String 对象的 getBytes(“ISO-8859-1“)用来解决 request 对象中包含中文信息的乱码问题;3。从数据库中提取出来的值也会有乱码问题,但是 Tomcat4 有,Tomcat5 没有。4
21、。使用 String 对象的 getBytes(“ISO-8859-1“)方法需要对每个表单元素的值都进行转换,较麻烦;替代方法是request.setCharacterEncoding(“GBK“),将它写在所有的request.getParameter(“*“)之前,可以使所有的表单元素提交的信息编码为中文。5。也可以定义一个方法,这个方法功能为:将参数转换成中文编码,即getBytes(“ISO-8859-1“),然后这个方法返回值为一个字符串,即 new String(b);在 jsp 页中将每个request.getParameter(“*“)做为这个方法的参数;6。若没有 page
22、 指令,且 IE 编码为“简体中文” ,在 Tomcat5.0 下,则不需要任何转换;实例:获取用户提交数据中的所有参数名称及值,并解决中文问题文件一:Test HTML请输入学员 ID:请输入学员 name:请选择学员性别:男女文件二:/params.jsp“);out.println(“Values: “ + request.getParameter(current_param) + “);%实例:单选按钮的提交例子文件一:诗人李白是中国历史上哪个朝代的人:宋朝 唐朝 明朝 元朝 小说红楼梦的作者是:曹雪芹 罗贯中李白 司马迁 文件二:/answer.jsp您得了分下拉菜单实例:文件一:选
23、择计算和的方式计算 1 到 n 的连续和计算 1 到 n 的平方和计算 1 到 n 的立方和选择 n 的值:n=10n=20n=30n=40n=50n=100文件二:/sum.jsp您的求和结果是复选框同名,下拉菜单可以多选,返回的值都是多值,获取办法:request.getParameterValues(“elementName“)比如:文件一:允许多重选择的下拉菜单允许多重选择的下拉菜单北京市上海市天津市重庆市文件二:/echo3b.jsp允许多重选择的下拉菜单允许多重选择的下拉菜单您选择的城市是: “ + Citysi);%实例:复选框同名,获取多值文件一:复选框演示程序复选框演示程序您
24、有兴趣的书籍是:VB 5.0 与数据库程序设计VB 5.0 实战讲座VB5 与 ActiveX 程序设计文件二:/echo4b.jsp复选框演示程序复选框演示程序您有兴趣的书籍是:“);%多行文本框的换行问题:如果直接输出不能实现换行,需将n 转换成文件一:文字输入框(TextArea)演示程序滚动文本框(TextArea)演示程序留言:文件二:/echo2.jspTextarea DemoTextarea Demo - Your Input isStringBuffer myTranslate(StringBuffer sour) for(int i=0; i“);return sour;%
25、课后作业:1。用一个页面处理自己的表单;提交前看到表单,提交后看到 request 的值.(判断提交按钮的值;判断某隐藏域的值)2。提交时的表单验证问题。 (服务端验证:jsp;客户端验证:JavaScript).(要求:返回时已填值存在;自动让未真项获得焦点)3。注册用户;成功后显示成功信息;可以检查一个用户是否已经注册过,若注册过,则不能同名注册;(请研究 Hashtable 类)response 内置对象:含义与作用:它封装了 HttpServletResponse 接口,对客户端进行响应;与 request相对应,request 表示请求,response 表示响应。常见方法:addC
26、ookie(Cookie cookie):添加一个 Cookie 对象,用来保存客户端的信息。addHeader(String name,String value):添加 Http 文件头信息,并传递到客户端;若已经存在此 Header,则覆盖;containsHeader(String name):判断是否包含指定的 Header,返回布尔值;encodeURL():使用 sessionID 来封闭一个 URL,如果没有必要封装,则返回原值;flushBuffer():强制当前缓冲区中的内容发送到客户端;getBufferSize():返回缓冲区的大小;sendError(int):向客户端
27、发错误信息;比如:404 指网页不存在;sendRedirect(String location):跳转到另一个页;setContentType(String contentType):设置响应的 MIME 类型;参数:text/html;text/plain;application/msword;application/x-msexcel 等setHeader(String name,String value):设置 header,若存在则覆盖;setStatus(int):同 sendError(int);encodeRedirectURL():同 encodeURL();实例:设置文档类
28、型为 word 格式我正在学习 response 对象的setContentType 方法将当前页面保存为 word 文档吗?实例:设置头每隔五秒刷新一次现在的时间是:实例:文本框是必填项,若未填则总停留在表单页;若填,则显示成功页;填写姓名:文件二:/tree4.jsp实例二:关于多送错误报告的几个例子提示:可以更改参数,看不同错误报告。session 对象:含义与作用:会话,指的是从一个客户打开浏览器并链接到服务器,到客户端关闭所有的浏览器页面并离开这个服务器,这一个期间就叫做一个会话;包括页面间的反复跳转,反复刷新一个页面,或不断提交信息等;session对象用来表示某一个会话期间的某一
29、个特定的客户;比如:在一个网站的不同页面购买商品,通过 session可以用来表示是你的行为而不是其它网页的行为。原理:当一个客户首次进行某个网站,就开始接受服务器的服务,JSP 引擎将自动为每一个客户产生一个互相不同的 ID;在整个会话周期中,此 ID 就标识着你的身份;若你关闭浏览器,则自动收回你的ID;若你重新登录到服务器的服务之中,则重新分配一个 ID;它与 Cookie 有关,若浏览器屏蔽了 Cookie 功能,则session 失效;常见方法:public void setAttribute(String key,Object obj):类似于 Hashtable,通过 key 对
30、应存储一个值,此值类型为 Object;public Object getAttribute(String key):通过 key 获取已经存储在 session 中的Object;注意:因是 Object,需转换类型;public Enumeration getAttributeNames():返回 session 中的全有对象,其值为枚举类型;public long getCreationTime():L 返回 session 对象创建的时间,即离 1970 年 7 月1 日所过去的毫秒数;public long getLastAccessedTime():返回最后一次访问的时间,离 19
31、70 年 7 月 1 日所过去的毫秒数;public int getMaxInactiveInterval():获取 session 对象的生存时间;public void setMaxInactiveInterval():设置 session 对象的生存时间;public void removeAttribute(String key):删除当前 session 对象中关键字是 key的对象;public String getId():获取 session 对象分配的 ID 号;public ovid invalidate():使 session 无效;public boolean isNe
32、w():是否为新客户;/session.getId()示例,多页面,对同一客户而言在同一次会话中是相同的 ID/文件一:您的 session 对象的 ID 是:输入你的姓名连接到 tom.jsp/文件二:tom.jsp我是 Tom 页面您的在 Tom 页面中的 session 对象的 ID 是: 点击超链接,连接到 Jerry 的页面。欢迎到 Jerry 屋来!/文件三:jerry.jsp我是 Jerry 页面您在 Jerry 页面中的 session 对象的 ID 是: 点击超链接,连接到 session 的页面。欢迎到 session 屋来!/session.setAttribute(),
33、session.getAttribute()示例文件一:输入你的姓名连接到第一百货:first.jsp文件二:/first.jsp这里是第一百货输入你想购买的商品连接到结帐:account.jsp文件三:/account.jsp这里是结帐处的姓名是:您选择购买的商品是:实例:session.setAttribute()与 session.getAttribute()的再举例:/猜数游戏:系统自动产生一个随机数,能判断你猜大了或者猜小了;猜对了可以告知你用的时间,猜的次数,以及所猜的数;/要点:通过 session 保存随机数以及猜的次数文件一:随机分给了你一个 1 到 100 之间的数,请猜!
34、输入你的所猜的数文件二:/result.jsprealnumber) int n=(Integer)session.getAttribute(“count“).intValue();n=n+1;session.setAttribute(“count“,new Integer(n);response.sendRedirect(“large.jsp“);else if(guessNumber文件三:/large.jsp所猜的数比实际的数大,请再猜:文件四:/small.jsp所猜的数比实际的数小,请再猜:文件五:/success.jsp恭喜你,猜对了您共猜了次用时秒。这个随机数字就是您必须关掉浏览
35、器才能获得新的数。作业: /输入帐号并选择用户类型,若用户不是 jacky,则停留在登录页面;否则的话,根据用户的不同类型显示不同的链接/要求是三个页面:login.htm,check.jsp,success.jsp;success.jsp 中显示欢迎jacky(来自 session)。application 内置对象:含义与作用:它代表着整个服务器中的所有用户;生命周期为服务器开启后到服务器关闭;常用方法:getAttribute(String name):返回由 name 指定的 application 属性值;getAttriubteNames():返回所有 application 对象
36、的属性名字;结果是一个枚举类型;getInitParameter(String name):返回由 name 指定的 application 某个属性的初始值;getServletInfo():返回当前版本的信息;setAttribute(String name,Object object):设置 name 名字的 application 属性值为object;实例:计算某用户是第多少个访问者您是第个访问本站的客户。JDBC:java DataBase Connectivity,利用它可以对数据库中的数据进行操作,比如:select,update,delete,insert 等;JDBC 主要
37、完成的三件事:1。与数据库进行链接;2。向数据库发送 SQL 语句;3。处理数据库返回的结果;数据库的驱动程序类型:1。jdbc-odbc 桥2。部分 java,部分本机驱动程序;3。中间数据访问服务器;4。纯 java 驱动程序四者的区别,自行网上查找两个相关的包:1。java.sql:提供对数据访问的基本服务,如:链接,执行更新,事务处理等;2。javax.sql:提供了数据访问的高级功能;比如:分布式事务等;JDBC-ODBC 数据处理的主要流程:1。建立数据源;包括数据库的建立,以及 ODBC 的设置;2。建立一个 JDBC-ODBC 桥接器,即加载桥接器驱动程序:Class.forN
38、ame(“sun.jdbc.odbc.JdbcOdbcDriver“);说明:Class 是 java.lang 中的一个类,它的静态方法 forName()可以建立一个桥接器;建立桥接器有可能产生异常,所以,标准写法为:tryClass.forName(“sun.jdbc.odbc.JdbcOdbcDriver“);catch(ClassNotFoundException e)3。连接到数据库:Connection con=DriverManager.getConnection(“jdbc:odbc:数据源名字“,“用户名“,“密码“);说明: 第一:要访问数据库,必须建立连接;第二:Con
39、nection 类是 java.sql 中的,用它建立一个连接对象;使用DriverManager 的 getConnection()静态方法来实例化对象;第三:若无用户名和密码,则相应处设为“,“;通常 Access 没有帐号,其它数据库则有帐号;第四:数据源名字来自于步骤 1。中的设置;如:连接到 SQL server 中的 pubs 数据库,假设步骤 1.中设置了数据源名叫myPubstryConnection con=DriverManager.getConnection(“jdbc:odbc:myPubs“,“sa“,“);catch(SQLException e)4。建立 SQL 语句对象:tryStatement sql=con.createStatement();说明:前面语句是创建了一个 SQL 语句对象;5。返回查询结果集对象:ResultSet rs=sql.executeQuery(“select * from 表名“);说明:executeQuery 有可能换成其它的方法;结果保存在一个 ResultSet(结果集)对象中;6。获取 ResultSet 中的数据: