课程设计报告基于网络应用层JSP的网站开发.docx
- 文档编号:18580969
- 上传时间:2023-08-19
- 格式:DOCX
- 页数:26
- 大小:91.63KB
课程设计报告基于网络应用层JSP的网站开发.docx
《课程设计报告基于网络应用层JSP的网站开发.docx》由会员分享,可在线阅读,更多相关《课程设计报告基于网络应用层JSP的网站开发.docx(26页珍藏版)》请在冰点文库上搜索。
课程设计报告基于网络应用层JSP的网站开发
课程设计报告
学生:
班级:
CS05网络4班
学号:
课程设计题目:
基于网络应用层JSP的网站开发
时间:
目录
一.JSP简介2
二.JSP的作用3
三.JSP服务器程序配置8
四.JSP的基本语法8
五.JSP的输出11
六.JSP的输入12
七.JSP与超文本的混合15
八.JSP与数据库的关系21
九.总结23
一.JSP简介
JSP(JavaServerPages)是由SunMicrosystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。
JSP技术有点类似ASP技术,它是在传统的网页HTML文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件(*.jsp)。
用JSP开发的Web应用是跨平台的,即能在Linux下运行,也能在其他操作系统上运行。
JSP技术使用Java编程语言编写类XML的tags和scriptlets,来封装产生动态网页的处理逻辑。
网页还能通过tags和scriptlets访问存在于服务端的资源的应用逻辑。
JSP将网页逻辑与网页设计和显示分离,支持可重用的基于组件的设计,使基于Web的应用程序的开发变得迅速和容易。
Web服务器在遇到访问JSP网页的请求时,首先执行其中的程序段,然后将执行结果连同JSP文件中的HTML代码一起返回给客户。
插入的Java程序段可以操作数据库、重新定向网页等,以实现建立动态网页所需要的功能。
JSP与JavaServlet一样,是在服务器端执行的,通常返回该客户端的就是一个HTML文本,因此客户端只要有浏览器就能浏览。
JSP的1.0规范的最后版本是1999年9月推出的,12月又推出了1.1规范。
目前较新的是JSP1.2规范,JSP2.0规范的征求意见稿也已出台。
JSP页面由HTML代码和嵌入其中的Java代码所组成。
服务器在页面被客户端请求以后对这些Java代码进行处理,然后将生成的HTML页面返回给客户端的浏览器。
JavaServlet是JSP的技术基础,而且大型的Web应用程序的开发需要JavaServlet和JSP配合才能完成。
JSP具备了Java技术的简单易用,完全的面向对象,具有平台无关性且安全可靠,主要面向因特网的所有特点。
自JSP推出后,众多大公司都支持JSP技术的服务器,如IBM、Oracle、Bea公司等,所以JSP迅速成为商业应用的服务器端语言。
二.JSP的作用
1.JSP工作原理
在一个JSP文件第一次被请求时,JSP引擎把该JSP文件转换成为一个servlet。
而这个引擎本身也是一个servlet,在JSWDK或WEBLOGIC中,它就是JspServlet。
JSP引擎先把该JSP文件转换成一个Java源文件,在转换时如果发现jsp文件有任何语法错误,转换过程将中断,并向服务端和客户端输出出错信息;如果转换成功,JSP引擎用javac把该Java源文件编译成相应的class文件。
然后创建一个该SERVLET的实例,该SERVLET的jspInit()方法被执行,jspInit()方法在servlet的生命周期中只被执行一次。
然后jspService()方法被调用来处理客户端的请求。
对每一个请求,JSP引擎创建一个新的线程来处理该请求。
如果有多个客户端同时请求该JSP文件,则JSP引擎会创建多个线程。
每个客户端请求对应一个线程。
以多线程方式执行可大大降低对系统的资源需求,提高系统的并发量及响应时间.但应该注意多线程的编程限制,由于该servlet始终驻于内存,所以响应是非常快的。
如果.jsp文件被修改了,服务器将根据设置决定是否对该文件重新编译,如果需要重新编译,则将编译结果取代内存中的servlet,并继续上述处理过程。
虽然JSP效率很高,但在第一次调用时由于需要转换和编译而有一些轻微的延迟。
此外,如果在任何时候如果由于系统资源不足的原因,JSP引擎将以某种不确定的方式将servlet从内存中移去。
当这种情况发生时jspDestroy()方法首先被调用,然后servlet实例便被标记加入"垃圾收集"处理。
jspInit()及jspDestory()格式如下:
可在jspInit()中进行一些初始化工作,如建立与数据库的连接,或建立网络连接,从配置文件中取一些参数等,在jspDestory()中释放相应的资源。
2.服务端的输出缓冲区
缺省情况下:
服务端要输出到客户端的内容,不直接写到客户端,而是先写到一个输出缓冲区中.只有
下面三中情况下,才会把该缓冲区的内容输出到客户端上:
该JSP网页已完成信息的输出
输出缓冲区已满,JSP中调用了out.flush()或response.flushbuffer()输出缓冲区的大小可以用:
或response.setBufferSize()设置,如下:
设置输出缓冲区的大小为1KB。
或response.setBufferSize
(1);设置输出缓冲区的大小为0,即不缓冲。
或response.setBufferSize(0);用response.getBufferSize()或out.getBufferSize()可取的输出缓冲区的大小,单位为字节.用response.isCommitted()可检查看服务端是否已将数据输出到客户端.如果返回值是TRUE则已将数据输出到客户端,是FALSE则还没有.
3.服务端输出重定向
有以下3种方法可以做到输出重定向:
RESPONSE.SETREDERECT("URL")该方法通过修改HTTP协议的HEADER部分,对浏览器下达重定向指令的,使浏览器显示重定向网页的内容.response.sendRedirect
下面的方法也能改变HTTPHEADER属性,它的原理和1是一样的.
<%
response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
StringnewLocn="/index.html";
response.setHeader("Location",newLocn);%>
采用 FORWORD>该方法是利用服务器端先将数据输出到缓冲区的机制,在把缓冲区的内容发送到客户端之前,原来的不发送,改为发送该页面的内容,如果在 FORWORD>之前有很多输出,前面的输出已使缓冲区满,将自动输出到客户端,那么该语句将不起作用,这一点应该特别注意.如下面的例子中 (1)会输出index.html的内容,2不会输出index.html的内容,而是输出out.println("@@@@@@@@@@@@@@@@@");中的内容,并且在服务端会抛出: java.lang.IllegalStateException: Responsealreadycommitted异常,但客户端没有任何错误输出。 (1)<%@pagebuffer="1kb"%> <% longi=0; for(i=0;i<10;i++) { out.println("@@@@@@@@@@@@@@@@@"); } %> forwardpage="./index.html"/> (2)<%@pagebuffer="1kb"%> <% longi=0; for(i=0;i<600;i++) { out.println("@@@@@@@@@@@@@@@@@"); } %> 说明: ①方法 (1), (2)可以使用变量表示重定向的地址;方法(3)不能使用变量表示重定向的地址。 Stringadd="./index.html"; forwardpage=add/> 无法重定向到index.html中去 Stringadd=http: //localhost: 7001/index.html response.sendRedirect(add); ②采用方法 (1), (2)request中的变量(通过request.setAttribute()保存到request中的值)不能在新的页面中采用,采用方法(3)能.综上,我们应该采用 (1), (2)重定向比较好. 4.JSP中正确应用类: 应该把类当成JAVABEAN来用,不要在<%%>中直接使用.如下的代码 (1)经过JSP引擎转化后会变为代码 (2): 从中可看出如果把一个类在JSP当成JAVABEAN使用,JSP会根据它的作用范围把它保存到相应的内部对象中. 如作用范围为request,则把它保存到request对象中.并且只在第一次调用(对象的值为null)它时进行实例化.而如果在<%%>中直接创建该类的一个对象,则每次调用JSP时,都要重新创建该对象,会影响性能. 代码 (1) useBeanid="test"scope="request"class=".testdemo"> useBean> <% test.print("thisisusejavabean"); testdemotd=newtestdemo(); td.print("thisisusenew"); %> 代码 (2).testdemotest=(.testdemo)request.getAttribute("test"); if(test==null) { try { test=(.testdemo)java.beans.Beans.instantiate(getClass().getClassLoader(),".testdemo"); } catch(Exception_beanException) { thrownewweblogic.utils.NestedRuntimeException("cannotinstantiate'.testdemo'",_beanException); } request.setAttribute("test",test); out.print("\r\n"); } out.print("\r\n\r\n\r\n"); test.print("thisisusejavabean"); testdemotd=newtestdemo(); td.print("thisisusenew"); 5.JSP的调试 JSP的调试比较麻烦,特别是当bean是在一个session中存在时,更加困难。 得从好几个页面开始往里面走才行。 通常是用out.println()或System.out.print()来打一大堆的信息来查问题。 如果是用jbuilder做开发,它能直接调试JSP.不过更重要的是知道错误产生的原因及解决方法。 下面对一些JSP编程常见错误进行分析。 (1).java.lang.NullPointerException异常 一般是对一个为NULL值的变量进行操作引起的.如下面的操作就会抛出 java.lang.NullPointerException Stringa=null; a.substring(0,1); 为避免这种异常最好在对变量操作之前检查看它是否为NULL值.如: <%Stringss=Session.getAttribute("NAME") ifisnull(ss) { } else { }%> (2).JSP是用JAVA写的,所以它是大小写敏感的,用过其他编程语言的人最容易犯这个错误。 另外在浏览器的地址栏中输入的访问JSP的地址也是区分大小写的. (3).在jsp中判断字符串要使用compareTo方法,不要用==,因为在java中String变量不是一个简单的变量而是一个类实例,不同的方法会得到不同的结果,如下所示: Stringstr1="ABCD"; Stringstr2="ABCD";(或Stringstr2="AB"+"CD";) if(str1==str2) out.print("yes"); else out.print("no"); 结果是"yes"。 Stringstr1,str2,str3; str1="ABCD"; str2="AB"; str3=str2+"CD"; if(str1==str3) out.print("yes"); else out.print("no"); 结果是"no"。 Stringstr1=newString("ABCD"); Stringstr2=newString("ABCD"); if(str1==str2) out.print("yes"); else out.print("no"); 结果是"no"。 Stringstr1=newString("ABCD"); Stringstr2=newString("ABCD"); if(pareTo(str2)==0) out.print("yes"); else out.print("no"); 结果是"yes"。 (4)防止JSP或SERVLET中的输出被浏览器保存在缓冲区中: 浏览器在默认情况下会把浏览过的网页保存在缓冲区中,在调试时,一般不希望这样.把下面的脚本加入程序中,就可防止JSP或SERVLET中的输出被浏览器保存在缓冲区中 <% response.setHeader("Cache-Control","no-store");//HTTP1.1 response.setHeader("Pragma","no-cache");//HTTP1.0 response.setDateHeader("Expires",0);//preventscachingattheproxyserver %> 在IE中也可通过设置实现: 把/工具/INTERNET选项/常规/设置/的检察所存页面的较新版本,设为每次访问该页时都检查. 6.COOKIE HTTPCOOKIE实质是服务端与在客户端之间传送的普通HTTP头,可保存也可不保存在客户的硬盘上.如果保存,每一个文件大小不超过4K的文本文件.多个COOKIE可保存到同一个文件中.如果从编程角度来看,在JSP中COOKIE就是JAVA提供的一个类.常用的方法如下所表示,因为客户端可能不接受COOKIE,所以建议不用它,改用SESSION等其他方式。 publicclasscookie { publicStringgetDomain()//返回该COOKIE的有效域 publicintgetMaxAge()//返回该COOKIE的有效期,单位为秒 publicStringgetName()//返回该COOKIE的名称 publicStringgetPath()//返回该COOKIE的有效路径 publicbooleangetSecure()//返回该COOKIE的安全设置 publicStringgetValue()//返回该COOKIE的值 publicvoidsetDomain(java.lang.Stringpattern)//设置该COOKIE的有效域 publicvoidsetMaxAge(intexpiry)//设置该COOKIE的有效期,单位为秒 publicvoidsetPath(java.lang.Stringuri)//设置该COOKIE的有效路径 publicvoidsetSecure(booleanflag)//设置该COOKIE的安全设置 publicvoidsetValue(java.lang.StringnewValue)//设置该COOKIE的值 } 一个COOKIE包含以下五部分: NAME/VALUE对,设置该COOKIE的名字及它保存的值 COOKIE通常和服务器相关,如果将域设为JAVA.SUN.COM,那么该COOKIE就和这个域相关,只对该网址起作用,当浏览该网址时,浏览器将把该COOKIE的内容发送给服务端,COOKIE是作为HTTPHEADER的一部分被发送的,如果没有设置域,那么COOKIE就只和创建该COOKIE的服务器相关. 路径用于指定服务器上可以使用该COOKIE的文件所在的路径,它只对该网址下的该路径下的应用起作用."/"表示服务器上所有目录都可以使用该COOKIE. COOKIE都有一个有效期,有效期默认值为-1,这表示没有保存该COOKIE,当该浏览器退出时,该COOKIE立即失效. 安全选项true/false,如果设置为true,那么在服务端与在客户端之间传送该COOKIE的内容时,采用HTTPS协议. 如何检查一个客户端是否支持COOKIE的方法: 用下面的方法写一个COOKIE到客户端,并确认成功 try { Cookiec=newCookie("mycookie","COOKIETEST"); response.addCookie(c); } catch(Exceptione) { System.out.println(e); } 然后在一个新的JSP文件中: 用下面的方法取客户端的COOKIE到cookies中,如果cookies.length==0,说明该客户端的浏览器不支持COOKIE try { Cookie[]cookies=request.getCookies(); if(cookies.length==0) { System.out.println("notsupportcookie"); } } catch(Exceptione) { System.out.println(e); } 三.JSP服务器程序配置 Tomcate是基于JAVA的一个Servlet,它的运行离不开JDK的支持,因此,在安装tomcat之前,首先安装JDK。 安装JDK之前要确认系统是否有安装其他的JDK,如果安装了多个JDK,在进行配置时会发生冲突。 安装完JDK后需要设置环境变量,分别是JAVA_HOME.PATH和CLASSPATH。 在“我的电脑”/属性/系统特性/高级里配置。 当配置完就安装tomcat。 Tomcat的配置主要是端口和根目录的设置 端口配置是在apache下conf文件里找server.xml在里面找到下面这句: --Defineanon-SSLCoyoteHTTP/1.1Connectoronport8081--> port="8080" 将port后面端口号设为自己想要的且又不冲突的端口。 根目录的修改同样是在该文件下找到: --TomcatRootContext--> 将docBce后面的目录改为自己想要设置的目录。 最后在浏览器上输入 http//127.0.0.1: 端口号 如果显示出你根目录下的文件,即表示安装成功 四.JSP的基本语法 JSP语法基本遵循JAVA的语法。 相比JAVA语法更为简单。 JSP的表达形式是以“〈%”和“%〉“结尾,整个部分就为JSP语法。 除此之外还包含了9个内置对象。 以下做详解: JSP的内建对象有以下几种: request、response、out、session、pagecontext、application、config、page。 Request[请求]对象 Request对象用于接受所有从浏览器发往你的服务器的请求内的所有信息。 与request相联系的是HttpServletRequest类。 通过getParameter方法可以得到request参数,通过GET、POST、HEAD等方法可以得到request的类型,通过cookies、Referer等可以得到引入的HTTP头。 Request对象主要方法: ☉getAttribute(Stringname) 返回name属性值。 ☉getAttributeNames() 返回request对象所有属性名字。 ☉getCookies() 返回客户端的cookies对象。 ☉getHeader(Stringname) 获得HTTP协议定义的文件头信息。 ☉getHeaders(Stringname) 返回指定名字的requestHeader的所有值。 ☉getMethod() 获得客户端向服务器端传送数据的方法。 ☉getParameter(Stringname) 获得客户端传送给服务器端的参数值。 ☉getParameterNames() 获得客户端传送给服务器端的所有参数的名字。 ☉getParameterValue(Stringname) 获得指定参数的所有值。 ☉getProtocol() 获取客户端向服务器端传送数据所依据的协议名称。 ☉getQueryString() 获得查询字符串。 ☉getRequestURI() 获取发出请求字符串的客户端地址。 ☉getRemoteAddr() 获取客户端的IP地址。 ☉getRemoteHost() 获取客户端的名字。 ☉getServerName() 获取服务器的名字。 ☉getServletPath() 获取客户端所请求的脚本文件的文件路径。 ☉getServerPort() 获取服务器的端口号。 ☉setAttribute(Stringname,java.lang.Objectobjt) 设置名字为name的request参数的值,该值是由java.lang.Object类型的objt指定。 ◆Response[响应]对象 Response对象用于向客户端浏览器发送数据,用户可以使用该对象将服务器的数据发送到用户端的浏览器。 与Response相联系的是HttpServletResponse类。 Respon
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计 报告 基于 网络 应用 JSP 网站 开发