JSP环境范文
JSP环境范文(精选9篇)
JSP环境 第1篇
1 传统的网页设计中对于资源的访问
首先我们来规划一下目录结构, 参见下面的图示文件结构:
绝对路径:从根开始往下所寻找文件的路径。
相对路径:从当前位置往下所寻找文件的路径。
网页设计软件Dreamweaver在插入资源js或者是图像文件时, 当保存jsp文件时一般都是采用相对路径来保存文档, 如上图中jsp下index.jsp对于js下的treeview.js的访问是这样的。
2 Servlet的认识
Servlet是运行于服务器端, 接受用户请求并响应的Java应用程序组件, 它的运行原理如下图示:
从中我们可以看到它在Java的Web服务器中充当控制器的角色, 用户发出请求交由它处理, 经处理的结果由servlet来传递给用户。其实一个简单的JSP页面需要经过转换成Servlet, 然后经编译成class文件, 交由java虚拟机来执行, 将结果提交给客户, 其实JSP就是一个servlet, 当然作为一个严格意义上的Servlet它一般包括加载、初始化、响应请求、销毁的过程。
在JSP Web开发中常用的框架如Struts中内置对Servlet调用, struts就是一个Servlet, 它充当控制器的角色。
3 Servlet下访问JSP的两种形式
3.1 页面转发
形式1:request.get Request Dispatcher ("/jsp/index.jsp") .forward (request, response) ;
形式2:request.get Request Dispatcher ("jsp/index.jsp") .forward (request, response) ;
在转发中的路径也有绝对路径和相对路径之称, 此时的绝对路径是指该应用程序, 假如你的IP地址是192.168.1.0, 应用程序是test Servlet, 那么你的转发的根位置就是http://192.168.0.1/test Servlet/
绝对路径:“/”所代表的位置。
相对路径:相对路径是相对于当前位置。
分析在前述用dreamweaver创建的index.jsp文件中涉及到的js和图像资源的访问看有什么问题?
request.get Request Dispatcher ("jsp/t1/t2/index.jsp") .forward (request, response) ;
在index.jsp中对于页面的资源js文件和images文件的访问参照页面文件如下:
经测试均不能显示, 图略。
在地址栏中输入:http://localhost:8080/test Servlet/jsp/../images/1.jpg能够显示图像。难道在传统的网页设计中以当前jsp作为基准进行资源文件位置的定位有问题?资源位置是否以Web的应用程序作为基准进行相对定位, 如果是的话那么把上述链接改为:应该能够显示图像, 经测确实如此。
为了验证上述想法是否正确, 我把把该文件原样不动复制到jsp下的t1文件夹下的t2子文件夹下去, 再浏览一下, 仍然能够显示图片。
经验证, 在用相对路径和绝对路径进行转发时其路径起点均位于应用程序, 上述文件转发时一种用“/”开头一种用非“/”开头前种表示绝对路径后者表示相对路径, 对于安装tomcat的用户就是指的是webapps/应用程序, 基于此例就是http://192.168.0.1/test⁃Servlet。
因此, 在使用资源采用相对定位时, 相对的起点是基于web的应用程序对应的Web Root的位置而不是象传统的dreamweaver下做连接时相对文档页面位置情况, 对于传统的dreamweaver进行的文件连接的做法到java的web服务器上需要重新变更连接才行。
3.2 重定向
页面转发是常用形式, 而重定向用的并不多, 早期纯jsp网站使用重定向较多。对于重定向需要需要理解重定向的位置它是相对于web站点的顶级, 也就是前文中的webapps文件夹, 假如你的应用程序是test Servlet, 那么要重定向到该应用程序下的jsp文件夹下的index该如何操作呢?可以采用:response.send Redirect ("/test Servlet/jsp/index.jsp") 和response.send Redirect (“jsp/index.jsp”) 及response.send Redirect (“/jsp/index.jsp”) 来进行测试。
经测试重定向到jsp的方式有两种, 前两种满足要求, 第一种适用于跨应用的重定向, 第二种适用于在该应用中的重定向, 最后一种对于重定向的绝对位置不清楚而有错误。
绝对路径:以/表示的路径, 对于重定向时其绝对路径是IP地址及端口号, 也就是java的Web所对应在的webapps的位置而不是前面提到的转发时所指的绝对路径指明的应用程序的Web Root位置。
相对路径:是以当前的WEB应用程序为起点的所寻找到的文件位置。
为什么没有把应用程序的根作为重定向的基点呢?因为重定向是考虑到跨应用程序的, 也就是可以从一个应用程序重定向到另一个应用程序, 因此把应用程序的根作为重定向的基点是不好的, 把java WEB中的webapps作为根就是一个最佳的考虑。
对于资源文件的定位一般也是采用相对定位, 这时的相对位置仍然是web应用程序所对应的Web Root的位置。
4 规范的提出
前面讨论的资源定位均是基于相对定位, 也就是基于web应用程序的Web Root的位置的, 不论jsp文件在哪儿, 并不采用dreamweaver中所涉及到的相对于页面文档的定位方式, 因此对于用dreamweaer做的jsp文件, 其链接可能需要进行变更。
为了在实际中不至因页面资源的连接出现错误, 可以基于以下的规范进行考虑:
4.1 资源位置设置
1) 把所有的资源放在Web Root下的某个子文件夹下。如Web Root/js, Web Root/images分别用于存放java Script脚本和图片文件。
2) 规定资源的链接方式。
4.2 采用定位文件方式
1) 相对定位
所谓相对定位, 在java Web中一律基于Web的应用程序的位置, 也即是web Root的位置来进行定位, 如前述多次涉及到都是这样的标准来进行的定位技术。
2) 绝对定位
其实My Eclipse在创建jsp文件时就考虑到了可能资源位置不好确定的问题, 因此在创建一个jsp文件时就为我们准备好了文件位置的基准路径。
请看它产生的服务端脚本:
①得到web应用程序或者说是项目的根路径, 并把它存放在base Path变量中<%
②提供资源的连接位置
此时对于上述目录中的1.jpg该如何确定呢?images/1.jpg”/>就是该图像的位置, 对于js的位置同样采用这样的方式:
5 结论
该文探讨了在Java Web页面开发中在资源页面连接时可能出现的链接错误, 通过分析和归纳提出了资源定位的两种解决办法, 一种是基于相对定位, 而这种相对并不是相对于页面文档而是相对于web应用程序的根, 在此建议把也就是通常我们说到的web工程中的Web Root;另一种是基于绝对定位, 绝对定位是基于Java Web的webapps文件夹, 也就是所有的应用程序的父级目录位置, 不论哪种方式都是我们解决问题的办法。
摘要:该文比较了转发及重定向时的绝对路径和相对路径, 通过分析页面资源定位时的错误现象, 纠正了传统的网页设计时容易出现相对路径定位资源的问题, 提出了在页面资源定位时使用的路径规范的两种标准。
JSP环境 第2篇
简单应用于登陆界面,jsp:forward的作用是,把当前的JSP页引导到另一个页面上,浏览器地址本显示的是当前网页的地址,内容则是另一个界面的。
1.User.html
?
1
用户名:密码:
2.Login.jsp
?
1
2
3
4
5
<%@ page language=java import=java.util.* pageEncoding=utf-8%>
<%
String path = request.getContextPath;
String basePath = request.getScheme()+://+request.getServerName()+:+request.getServerPort()+path+/;
%>
> <% String User=request.getParameter(User); String Password=request.getParameter(Password); if(User.equals(Admin) && Password.equals(Admin)){%>
3.errorPage.jsp; 注意isErrorPage=TRUE;
?
1
2
3
4
5
<%@ page language=java import=java.util.* pageEncoding=UTF-8 isErrorPage=true%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+://+request.getServerName()+:+request.getServerPort()+path+/;
%>
>
错误信息
<%=exception%>
4.welcome.jsp
?
1
2
3
4
5
<%@ page language=java import=java.util.* pageEncoding=UTF-8%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+://+request.getServerName()+:+request.getServerPort()+path+/;
%>
JSP环境 第3篇
关键词:JSP,网站设计,环境信息化
一、引言
随着Internet的进一步发展, 静态Web站点的维护与管理变得越来越困难。信息的不断增加和变化, 使网站维护人员不得不经常修改网页, 特别是基于数据库驱动的Web更是如此。信息交互性的加强使HTML越来越难以胜任。因此, 铁岭市环保局提出设计动态网站, 以适应环境信息化建设的需要。
二、网站设计
1. 网站定位
铁岭环境信息网站为环保专业政府网站, 以公众为主要服务对象, 以发布环保信息与用户之间互动为主要功能, 实现网上办公, 提高信息管理水平。
2. 网站风格
页面体现大方、简洁、庄重、主次分明的特点, 主色调选择蓝和绿, 以简捷、生动、通俗易懂的方式展现, 增强公众对网站的注意力, 营造参与氛围。
3. 设计内容及结构
建设内容包括:形象定位、策略定位、访客定位、功能设计、结构设计、导航体系设计、版面布局设计、栏目页面设计等。网站结构见图1。
三、核心技术
1. JSP (Java Server Pages) 技术
JSP是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。JSP技术是用JAVA语言作为脚本语言的, JSP网页为整个服务器端的JAVA库单元提供了一个接口来服务于HTTP的应用程序。在传统的网页HTML文件 (*.htm, *.html) 中加入Java程序片段 (Scriptlet) 和JSP标记 (tag) , 构成JSP网页 (*.jsp) 。JSP的功能适用于工作需求, 决定选择JSP语言开发铁岭环境信息网站。
2. 数据库技术
SQL因功能丰富, 简单易学被国际标准化组织 (ISO) 定为关系数据库管理系统的标准语言, 而迅速得到推广和应用。MS SQL Server 2000因管理清晰、方便、容量大、便于信息保存和检索等特点, 为铁岭环境信息网站所采用。
四、系统实现
1. 网站实现
首先利用Dreamweaver MX2004设计首页框架, 然后利用Photoshop CS、Fireworks等图形处理工具进行美化、修饰。最后在前台需要变化的板块中添加相应的Script语句来调用后台数据库的内容。见图2。
2. 后台管理系统
后台管理分为网站维护、文章维护、链接维护、交互栏目维护、密码维护、首页图片维护等。见图3。
3. 性能分析
该网站实现了网站规划所涉及的内容、功能和技术等方面的要求, 界面友好、美观大方、安全可靠, 具有易操作、易使用、易维护等特点。
五、结语
该网站利用动态网站开发理论, 采用JSP技术与数据库技术的有效结合, 实现了环境信息动态网站的建设目标。
参考文献
JSP实验报告 第4篇
学生实验报告
课程名称: JSP程序设计 年
级: 2010 专
业: 姓 名: 学 号: 指导教师:
实验地点: 管理学院综合实验室
学年至 学第 学期
第一章 JSP简介
实验 Tomcat服务器的安装与配置
一、实验目的
本实验的目的是让学生掌握怎样设置Web服务目录、怎样访问Web服务目录下的JSP页面、怎样修改Tomcat服务器的端口号。
二、实验要求
1、将下载的apache-tomcat-6.0.13.zip解压到硬盘某个分区,比如D。
2、在硬盘分区D下新建一个目录,名字为student,见stuent设置为Web服务目录,并为该Web服务目录指定名字为good的虚拟目录。
3、修改端口号为5678.在server.xml文件中找到修改端口号的部分,将端口号修改为5678.4、启动Tomcat服务器。
5、用文本编辑器编写一个简单的JSP页面biao.jsp,并保存到Web服务目录student中。
6、用浏览器访问Web服务目录student中的jsp页面biao.jsp。
三、实验内容
1、Tomcat安装成功并运行
2、编码实现乘法表 3.代码
四、实验结果
biao.jsp页面
五、实验结果分析
1、默认的端口号为8080,若修改,在conf目录下的server.xml文件中修改端口号。
2、设置虚拟目录。在conf目录下的server.xml中前加入:
3、Tomcat服务器必须保持启动。第二章 JSP页面与JSP标记 实验1 JSP页面的基本结构
一、实验目的
本实验的目的是让学生掌握怎样在JSP页面中使用成员变量,怎样使用Java程序片、Java表达式。
二、实验要求
本实验将用户输入的单词按字典顺序。需要编写两个JSP页面,名字分别为inputWord.jsp和showDictionary.jsp。
1、inputWord.jsp的具体要求 该页面有一个表单,用户通过将该表单输入若干个单词,并提交给showDictionary.jsp页面。
2、showDictionary.jsp的具体要求
该页面负责排序单词,并将排序的全部单词显示给用户。
(1)该JSP页面有个名字为dictionary、类型是TreeSet成员变量。
(2)该JSP页面有public void addWord(String s)方法,该方法将参数s指定的字符串添加到成员变量dictionary中。
(3)该JSP页面在程序片中操作dictionary,即显示全部的单词。
三、实验内容
1)inputWord.jsp页面有一个表单,用户通过该表单输入若干个单词,并提交给showDictionary.jsp页面。
2)showDictionary.jsp负责排序单词,并将排序的全部单词显示给用户。3)代码
四、实验结果
inputWord.jsp页面
showDictionary.jsp页面
五、实验结果分析
1、jsp页面由html标记、jsp标记、成员变了和方法的声明、java程序片和java表达式组成。
2、jsp页面中的成员变量是被所有用户共享的变量。Java程序片可以操作成员变了,任何一个用户对jsp页面成员变量操作的结果,都会影响到其他用户。
实验2 JSP指令标记
一、实验目的
本实验的目的是让学生掌握怎样在JSP页面中使用include指令标记在JSP页面中静态插入一个文件内容。
二、实验要求
该实验要求使用include指令标记使得每个页面都包含有导航条。在进行实验之前将名字是leader.txt的文件保存到本实验所使用的web服务目录中。实验要求编写3个JSP页面,具体要求如下。first.jsp的具体要求
first.jsp使用include指令静态插入leader.txt.second.jsp的具体要求
second.jsp使用include指令静态插入leader.txt.third.jsp的具体要求
third.jsp使用include指令静态插入leader.txt.三、实验内容
leader.txt编写3个JSP页面。
1)frist.jsp使用include指令静态插入leader.txt文本文件。2)second.jsp使用include指令静态插入leader.txt文件。3)third.jsp使用include指令静态插入leader.txt。3)代码 1
2.3.4.4)
四、实验结果
frist.jsp页面
second.jsp页面
third.jsp页面
五、实验结果分析
1、include指令标记是在jsp页面出现该指令的位置处,静态的插入一个文 件。被插入的文件必须是可访问和可使用的。Include指令标记是在编译 阶段就处理所需要的文件,被处理的文件在逻辑和语法上依赖与当前jsp 页面,优点是执行速度快。
实验3 JSP动作标记
一、实验目的
本实验的目的是让学生掌握怎样在JSP页面中使用include标记动态加载文件,使用forward实现页面的转向。
二、实验要求
编写3个JSP页面:giveFileName.jsp、readFile.jsp和error.jsp。
1、giveFileName.jsp的具体要求
要求giveFileName.jsp页面使用include动作标记动态加载readFile.jsp页面,并将一个文件的名字比如ok.txt传递给被加载的readFile.jsp页面。
2、readFile.jsp的具体要求
要求readFile.jsp负责根据giveFileName.jsp页面传递过来的文件名字进行文件的读取操作,如果该文件不存在就使用
Forward动作标记将用户转向error.jsp页面。
3、error.jsp的具体要求 负责显示错误信息。
三、实验内容
1)giveFileName.jsp页面使用include动作标记动态加载readFtle.jsp页面,并将一个文件的名字ok.txt传递给被加载的readFtle.jsp页面。
2)readFile.jsp页面负责根据giveFileName.jsp页面传递过来的文件名字进行文件的读取操作,如果该文件不存在就使用forward动作标记将用户转向error.jsp。
3)error.jsp负责显示错误信息。4)代码
四、实验结果
giveFileName.jsp页面
error.jsp页面
五、实验结果分析
1、include动作标记是在jsp页面运行时才处理加载的文件,被加载的文件在逻辑和语 法上独立与当前jsp页面,include指令标记可以使用param子标记向被加载的jsp 文件传递信息。第三章 Tag文件与Tag标记
实验1 JSP页面的基本结构
一、实验目的
本实验的目的是让学生灵活掌握在Tag标记中使用标记体。
二、实验要求
编写一个JSP页面giveMess.jsp和一个Tag文件handleMess.tag。JSP页面通过调用Tag文件在表格中的单元格显示文本,该JSP页面通过使用标记体将要显示的文件传递给被调用的Tag文件。
三、实验内容
1、giveMess.jsp页面使用带标记体的Tag标记来调用Tag文件,其中标记体是一行文本,如下所示:
2、handelMess.tag使用
3、分别写出giveMess.jsp和handelMess.tag的代码。4.代码
四、实验结果
giveMess.jsp页面
五、实验结果分析
1、tag文件中可以有html标记符、特殊的指令标记、成员变了和方法、java程序片和java表达式。
2、jsp页面使用tag标记动态执行一个tag文件。
3、当jsp页面调用一个tag文件时可能希望动态地向该tag文件传递信息,那么就可以使用带有标记体的tag标记来执行一个tag文件。
实验2 使用attribute指令
一、实验目的
本实验的目的是让学生灵活掌握在Tag标记中使用attribute指令。
二、实验要求
编写一个ShowCalendar.tag文件,该Tag文件负责显示日历。编写一个JSP页面giveYearMonth.jsp,该JSP页面使用Tag标记调用ShowCalendar.tag文件,并且向ShowCalendar.tag文件传递年份和月份。
三、实验内容
1、giveYearMonth.jsp通过tag标记调用ShowCalendar.tag文件,并且向ShowCalendar.tag文件传递年份和月份。
2、ShowCalendar.tag文件根据jsp页面传递过来的年份和月份显示日历。该文件能对jsp页面传递过来的数据进行判断,比如,如果jsp页面传递过来的数据不是数值型数据,tag文件负责显示错误信息。4.代码
四、实验结果
giveYearMonth.jsp页面
五、实验结果分析
1、一个tag文件中通过使用attribute指令,使得jsp页面在调用tag文件时,可以 向该tag文件中的对象传递一个引用。tag文件中使用attribute指令:
<%@ attribute name=“对象名字” required=“true”|“false” type=“对象的类型”%>
实验3 使用variable指令
一、实验目的
本实验的目的是让学生灵活掌握在Tag标记中使用variable指令。
二、实验要求
编写一个Tag文件GetWord.tag,负责分解出字符串中的全部单词,并将分解出的全部单词返还给调用该Tag文件的JSP页面。编写一个JSP页面giveSoring.jsp,该页面负责向Tag文件传递一个由英文单词构成的字符串,并负责显示Tag文件返回的全部单词。
三、实验内容
1、giveSoring.jsp通过tag标记调用GetWord.tag,并传递一个由英文单词构成的字符串,显示tag文件返回的全部单词。
2、GetWord.tag使用attibute指令得到jsp页面传递过来的字符串,并用vatiable指令返回全部的单词。
3.代码
四、实验结果 giveSoring.jsp页面
五、实验结果分析
1、Tag文件可以使用variable指令把一个对象返回给调用它的jsp页面
Tag文件使用variable指令给出返回的对象的名字、类型和有效范围:
<%@ variable name-given=“对象名字” variable-class=“对象的类型” scope=“有效范围”%>
第4章 JSP内置对象 实验1 request对象
一、实验目的
本实验的目的是让学生掌握怎样在JSP中使用内置对象request。
二、实验要求
通过JSP页面和Tag文件实现数字的四则运算,要求编写两个JSP页面inputNumber.jsp和receiveNumber.jsp及一个Tag文件Computer.tag。receiveNumber.jsp使用内置对象接受inputNumber.jsp提交的数据,然后将计数任务交给Tag文件Computer.tag去完成。
三、实验内容
1)inputNumber.jsp页面提供一个表单,用户可以通过表单输入两个数、选择四则运算符号,并将输入的两个数和所选择的运算符号提交给receiveNumber.jsp页面。
2)receiveNumber.jsp使用内置对象inputNumber.jsp页面提交的数据,然后将计算任务交给Tag文件Computer.tag去完成。
3)要求Computer.tag使用attribute指令得到receiveNumber.jsp页面传递过来的书和运算符号,使用variable指令将运算结果返回给receiveNumber.jsp页面。
4)代码
四、实验结果
inputNumber.jsp页面
receiveNumber.jsp页面
五:实验结果分析
1、内置对象request的作用就是用来接收客户端提交的请求
2、request对象用的比较多的方法是getParameter方法。
request对象的getParameter方法根据指定的参数,获取客户端提交的信息。
其语法规则如下:
<% String name=request.getParameter(“txtName”)%>
其中,name是一个字符串变量。txtName是客户端提交信息中的一个字段名。
3、下面的就是在实验里面request的使用 <% String a=request.getParameter(“numberOne”);String b=request.getParameter(“numberTwo”);String operator=request.getParameter(“operator”)
实验2 responese对象
一、实验目的
本实验的目的是掌握怎样使用response对象动态响应用户的请求。
二、实验要求
编写两个JSP页面inputRadius.jsp和drawCircle.jsp页面,drawCircle.jsp页面使用response对象做出动态响应。
三、实验内容
1)inputRadius.jsp提供表单,用户在表单中输入一个代表圆的半径的数字,提交给drawCircle.jsp页面。
2)drawCircle.jsp页面首先使用request对象获得inputRadius.jsp提交的数字,然后根据数字的大小做出不同的响应。如果数字小于等于0或者大于100,response对象调用setCountType(String s)方法将contentType属性的值设置为text/plain,同时输出“半径不合理”;如果数字大于0并且小于等于100,response对象调用setContentType(String s)方法将contentType属性的值设置为image/jpeg,并绘制一个圆;如果用户在inputRadius.jsp页面输入了非数字,response对象调用sendRedirect(URL url)方法将用户重定向到inputRadius.jsp。
3)代码
四、实验结果
1、在输入要求的范围以内:
inputRadius.jsp页面
drawCircle.jsp页面
2、当输入的数据不符合要求的结果显示:
inputRadius.jsp页面
drawCircle.jsp页面
五、实验结果分析:
1、response的作用就是把服务器端的数据以HTTP的格式发送到客户端浏览器
2、与request相比,它的功能和request对象的功能相反。request对象用于得到用户提交的信息而response对象是向用户发送信息,两者结合起来完成动态页面的交互功能。
3、response对象的主要方法:
sendRedirect():页面重定向方法 setStatus():设置状态行方法
setContentType():设置文本类型方法
实验3 session对象
一、实验目的
本实验的目的是让学生掌握怎样使用session对象存储和用户有关的数据。
二、实验要求
使用session对象模拟购物车。编写两个JSP页面choiceBook.jsp和orderForm.jsp。
三、实验内容 1)用户在choiceBook.jsp页面通过超链接将自己要购买的图书信息传递到orderForm.jsp页面。
2)orderForm页面将用户购买的图书信息存储到session对象中,然后生成一个图书订单并显示给用户。
3)代码
四、实验结果:
choiceBook.jsp页面
orderForm页面
五、实验结果分析:
1、session的作用就是记住客户的连接信息,可以使用会话对象(session)。session对象记录了每个客户与服务器的连接信息
2、判断session是否失效有三种情况1)、客户是否关闭浏览器。2)、是否到达最大的发呆时间3)、是否调用validate()函数
3、session对象常用方法:
setAttribute(String name,java.lang.Object value):设定指定名字的属性值,并且把它存储在session对象中。getAttribute(String name):获得指定名字的属性,如果该属性不存在,将会返回null
第5章 JSP中的文件操作(实验)实验1 使用文件字节流读写文件
1、相关知识点。
Fileunputstream流以字节(byte)为单位顺序地读取文件,只要不关闭流,每次调用read的方法就书讯地读取源中其余的内容,直接原到尾末或流被关闭。
Fileunputstream流以字节(byte)为单位顺序地写文件,只要不关闭流,每次调用writer方法就顺序地向输出流写入内容。2.实验目的。
本实验的目的是掌握使用文件输入,输出字节流读写文件。3.实验要求。
1)giveContent.jsp页面提供一个表单,要求该表单提供一个text文件输入框、select下拉列表和一个TextArea文本区,用户可以在text输入框中输入文件的名字、在select下拉列表选择一个目录、通过TextArea输入多行文本。
2)writeContent.jsp页面首先获得giveContent.jsp页面提交的文件所在目录、名字以及TextArea文本区中的内容传递给WriteTag.tag。
3)lookContent.jsp页面提供一个表单,该表单提供两个text文本输入框,用户可以在这两个text文本框中输入目录和文件名字。单击表单的“提交”按钮将text中输入的文件目录以及文件名字提交给readContent.jsp。
4)readContent.jsp页面首先获得lookContent.jsp页面提交的文件目录、名字,然后使用Tag标记调用Tag文件ReadTag.tag,并将文件所在目录、名字传递给ReadTag.tag。
5)writeTag.tag文件使用attribute指令获得writeCintent.jsp页面传递过来的文件目录 文件名字和文件内容,然后使用文件字节输入流将文件内容写入到文件中,给文件所在目录就是writeCintent.jsp页面传递过来的文家目录,名字就是writeCintent.jsp页面传递过来的文家名字。
6)ReadTag。Tag的具体要求
Read.Tag文件使用attribute指令获得readContent.jsp页面传递过来的文件目录 文件名字和文件内容,然后使用文件字节输入流读取文件,并负责现实所读取的内容。
7)代码
4、实验结果:
giveContent.jsp页面
writeContent.jsp页面
lookContent.jsp页面
readContent.jsp页面
5、实验结果分析
1、把输入流的指向称做源,程序从指向源的输入流中读取源中的数据。而输出流的指向是数据要去的一个目的地,程序通过向输出流中写入数据把信息传递到目的地。所有字节输入流类都是InputStream(输入流)抽象类的子类,而所有字节输出流都是OutputStream(输出流)抽象类的子类。
2、int read(): 输入流调用该方法从源中读取单个字节的数据,该方法返 回字节值,如果未读出字节就返回-1。
3、void write(int n): 输出流调用该方法向输出流写入单个字节
实验2 使用文件字节流加密文件
1、相关知识点
fileinputstream流和filereader流都是顺序的读取文件,只要不关闭,每次调用read方法就顺序的读取源中其余的内容,只到源的末尾或流被关闭;二者的区别是fileinputstream流以字节为单位读取文件,filereader流以字符为单位读取文件
Fileoutstream流和filewtiter流顺序地写文件,只要不关闭流,每次调用writer方法的就顺序的向输出流写入内容,只到流被关闭。二者额区别是fileoutstream流以字节为单位些文件,filewtiter流以字符为单位文件
2、实验目的
本实验目的是掌握使用文件字符输入输出读写文件
3、实验要求
编写3个jsp页面inputcontent,jsp write,jsp read.jsp ,两个tag文件write.Tag和read.Tag 1).inputcontent,jsp的具体要求
inputcontent,jsp页面提供一个表单,要求该表单提供textarea的输入界面 用户可以通过textarea的输入界面多行文本提供交给write。Jsp界面 2.)write,jsp 的具体要求
write,jsp页面调用一个tag文件write,jsp将inputcontent,jsp 页面提交的文本信息加密后写入文件save.txt中。
3)read.jsp 的具体要求
read.jsp 页面提供一个表单,该表单提供两个单选按钮,名字分别是读取加密的文件和读取解密的文件 该页面选中的单选按钮的值提交给本页面如果该页面提交的值是单选按钮读取加密的文件的值 该页面调用tag文件read.tag读取文件save.txt如果该页面提交的值是单选按钮读取解密文件的值,该页面负责显示read.tag文件返回的有关信息 4)write.Tag的具体要求
write.Tag文件使用attribute指令获得write.jsp页面传递过来的文本信息,并使用文本文件输出流其写入到文件save.txt 5)read.Tag的具体要求 read.Tag文件使用文件输入流读取文件save.txt,并根据read.jsp的要求决定是否进行 6)代码
四、实验结果:
7)inputContent.jsp页面
8)write.jsp页面
9)read.jsp页面
10)
五、实验结果分析:
11)
1、FileInputStream流和FileReader流都是顺序的读取文件,只要不关闭流。每次调用read方法就顺利的读取源中其余的内容,直到源的末尾或流被关闭。两者的区别是Fileinputstream流以字节为单位读取文件,FileReader流以字符为单位读取文件。
12)
2、FileOutStream流和FileReader流都是顺序的写文件,只要不关闭文件,每次调用write方法就顺序的向输出流写入内容,直到流被关闭。二者的区别是FileOutStream流以字节为单位读取文件,FileReader流以字符为单位读取文件。
实验3 使用数据流读写Java数据
1、实验目的
本实验的目的是掌握使用数据流读写Java数据。
2、实验要求
编写两个JSP页面writeData.jsp和readData.jsp。
3、实验内容
1)writeData.jsp页面使用Java程序片将一个int型数据、一个long型数据、一个char型数据、一个String型数据和一个double型数据写入到名字为javaData.data的文件中。
2)readData.jsp页面读取javaData.data文件中的数据并显示出来。3)代码
4、实验结果
writeData.jsp页面
readData.jsp页面
5、实验结果分析
1、Java使用流(stream)来执行输入输出(I/O)的功能,流是一种数据的源头和目的之 间的通信途径.用于读入数据称为输入流(input stream), 用于写出数据称为输出流(output stream).2、当使用流时需要使用java.io包,因此在涉及数据流操作的程序中都要先导入 java.io包:import java.io.*;
第六章 JSP中使用数据库
要求在webapps目录下新建一个web服务目录chapter6。除特别要求外,本章实验所涉及的jsp页面均保存在chapter6中;tag文件保存在chapter6web-inttags目录中。
实验中用到的数据库为book,其中的表为bookform表。在进行实验之前首先完成下列任务:
1、使用microsoft access 2003 创建一个数据库book(book.mdb)。
2、在数据库book中创建名名字为bookform的表,表的字段及属性如图6-1所示。
3、讲数据库book设置为名字为information的数据源。
实验1 查询记录
1、相关知识点
本实验使用jdbc-odbc桥接器方式和数据库建立连接,查询数据库中表的记录的步骤是:(1)与数据库information建立连接;
Connection con=DriverManager.get Connection(‘jdbc:odbc: information’);(2)返回Statement对象;
Statement sql=con.createStatement();(3)向数据库发送关于查询记录的sql语句。返回查询结果,即Resultset对象
2、实验目的
本实验的目的是掌握使用jdbc查询数据库中表的记录。
3、实验要求
编写一个jsp页面inputMess.jsp。编写一个tag文件FindBook.tag。1)inputMess.jsp的具体要求
inputMess.jsp页面提供表单。表单允许用户输入要查询的内容,以及选择针对该内容的查询条件,比如,输入“实用”,那么可以指定该内容是书名的一部分或作者姓名等。inputMess.jsp页面查询条件条件提交给当前页面,当前页面调用FindBook.tag文件完成查询操作。2)FindBook.tag的具体要求
FindBook.tag文件的使用attribute指令获得inputMess.jsp页面传过来的字段的查询条件,然后与数据源information建立连接、根据得到的查询条件查询bookForm表。FindBook.tag文件使用variable指令的将查询结果返回给inputMess.jsp页面。
4、jsp页面的效果示例
inputMess.jsp的效果如图6-2所示。
5、参考代码
可以按照实验要求,参考本代码编写代码。1)jsp页面参考代码、实验结果
inputMess.jsp
7、实验结果分析:
1、DriverManager类:用语跟踪可用的JDBC驱动程序并产生数据库连接。
2、Connection接口:用于取得数据库信息、生成数据库语句,并管理数据库事务。
3、Statement接口:用于在基层连接上运行SQL语句,并且生成一个结果集。
4、查询结果一般封装在ResultSet对象中。ResultSet实际上是一张数据表。ResultSet对象有多种方法用来从查询结果中读取数据
5、在tag文件通过使用 attribute指令,就可以让调用该tag文件的jsp页面向该tag文件传递在jsp页面输入的查询内容的数据。tag文件通过使用variable属性可以从tag文件向jap页面返回符合查询条件的内容的数据
实验2 更新记录
1、相关知识点
本实验使用jdbc-odbc桥接器方式和数据库建立连接,查询数据库中表的记录的步骤如下:(1)与数据库information建立连接;
Connection con=DriverManager.get Connection(‘jdbc:odbc: information’);(2)返回Statement对象;
Statement sql=con.createStatement();(3)向数据库发送关于更新记录的sql语句: int m=sql.executeUpdate(更新记录的sql语句);更新成功m的值为1,否则为0。
2、实验目的
本实验的目的是掌握使用jdbc更新数据库中表的记录。
3、实验要求
编写一个jsp页面updateRecord.jsp和两个tag文件UpdateRecord.tag、GetRecord.tag。updateRecord.jsp负责调用GetRecord.tag文件,显示GetRecord.tag返回待更新的记录的有关字段的值;updateRecord.jsp调用UpdateRecord.tag文件,并显示UpdateRecord.tag返回的有关更新记录是否成功的信息。1)updateRecord.jsp的具体要求 updateRecord.jsp页面提供一个表单,该表单允许用户输入某种图书的isbn号以及针对该isbn号的图书的更新信息;该页面负责将图书的isbn号传递给GetRecord.tag,将图书的更新信息传递给UpdateRecord.tag。2)GetRecord.tag的具体要求
GetRecord.tag文件使用attribute指令获得updateRecord.jsp页面传递过来的图书的isbn号,并显示和该图书对应的记录。3)UpdateRecord.tag的具体要求
UpdateRecord.tag文件使用attribute指令获得updateRecord.jsp页面传递过来的图书更新信息,然后更新数据库中bookForm表中的记录,并返回更新成功的消息给updateRecord.jsp页面。
4、jsp页面效果示例
updateRecord.jsp的效果如图6-3所示。
5、参考代码
6、实验结果
updateRecord.jsp
7、实验结果分析
1、在数据库的连接于实验一是一样的,只是调用的方法不一样,在查询时Statement对象调用方法public int executeUpdate(String sql)
2、在jsp页面输入图书的ISBN号,GetRecord.tag文件使用attribute指令获得updateRecord.jsp页面传递过来的图书的ISBN号,在数据库里进行查找,并显示和该图书对应的记录
3、UpdateRecord.tag文件使用attribute指令获得updateRecord.jsp页面传递过来的图书更新信息即图书价钱的变化从39到25.5,然后更新数据库中bookForm表中的记录,并返回更新是否成功的消息给updateRecord.jsp页面。这样,如果在查询该图书,那么显示的信息就是更新后的。
实验3 删除记录
1、相关知识点
本实验使用jdbc-odbc桥接器方式和数据库建立连接,那么删除数据库中表的记录的步骤如下:
(1)与数据库information建立连接;
Connection con=DriverManager.get Connection(‘jdbc:odbc: information’);(2)返回Statement对象;
Statement sql=con.createStatement();(3)向数据库发送关于删除记录的sql语句: int m=sql.executeUpdate(更新记录的sql语句);删除成功m的值为1,否则为0。
2、实验目的
本实验的目的是掌握使用jdbc删除数据库中表的记录。
3、实验要求
编写一个jsp页面inputDeletedISBN.jsp和一个tag文件DelRecord.jsp.1)inputDeletedISBN.jsp的具体要求
inputDeletedISBN.jsp页面提供一个表单,该表单允许用户图书的ISBN提交到本页面。2)DelRecord.jsp的具体要求
inputDeletedISBN.jsp页面首先获得本页面提交的图书的ISBN,然后使用tag标记调用DelRecord.jsp删除数据库中表的相应的记录。
4、jsp页面效果示例
inputDeletedISBN.jsp的效果如图6-4所示:
5、参考代码
可以按照实验要求,参考本代码编写代码。
6、实验结果
inputDeletedISBN.jsp
7、实验结果分析:
1、在连接方法和所用的方法都与更新语句相同,因为executeUpdate()方法执行SQL的INSERT,UPDATE或DELETE语句,返回int值,给出受查询影响的行数
2、将图书的ISBN输入到件jsp页面,然后由tag文件进行相应的处理
3、将满足条件的图书直接删除,并将结果显示在本页面。
第七章 jsp与javabean 要求在webapps目录下新建一个web服务目录chapter7。除特别要求外,本章实验所涉及的jsp页面均保存在chapter7中。实验涉及的Javabean的包名均为bean.date,因此,要求在chapter7下建立子目录webclassesbeandate,Javabean的字节码文件保存在该子目录中。
实验1 有效范围为request的bean 1.相关知识点
JSP页面使用useBean标记调用一个有效范围是request的bean:
本实验的目的是掌握使用有效范围是request的bean的存储信息。3.实验要求
编写一个JSP页面inputAndShow.JSP和一个名字为computer的javabean,其中computer由pc.class类负责创建。
1)inputAndShow.jsp的具体要求
inputAndShow.jsp页面提供一个表单。其中表单允许用户输入计算机的品牌 型号和生产日期,该表单将用户输入的信息提交给当前调用名字为compter的bean,并使用表单提交的数据设置computer的有关属性的值,然后显示compter的各个属性值。2)pc.java的具体要求
编写的pc.java应当有描述计算机品牌 型号 生产日期的属性,并提供相应的getXxx和setXxx方法,来获取和修复这些属性的值。Pc.java中试用package语句,起的包名是bean.data。将pc.java编译后的字节码文件pc.class保存到chapter7WEB-INFclassesbeandata的目录中、4.JSP页面效果示列
inputAndShow.jsp的效果如图:
5、参考代码
可以按照实验要求,参考本代码编写代码。1)jsp页面参考代码、实验结果
inputAndShow.jsp页面
7、实验结果分析
1、JavaBean是一种可复用,跨平台的组件。
2、如果request的bean那么request是用户请求访问的当前组件、以及和当前web组件共享同一用户请求的web组件。范围是指在一个jsp网页发出请求到另一个jsp网页之间,随后这个属性就失效,设定request的范围时可利用request对象中的setattribute()和getattribute(),简单的讲就是客户端的一次请求。
实验2 有效范围为session的bean 1.相关知识点
JSP页面使用useBean标记调用一个有效范围是session的bean:
本实验目的是让学生掌握使用有效范围是session的bean显示计算机的信息,3.实验要求
本实验2要求和实验1类似,但是和实验1不同的是,要求编写两个jsp页面input.jsp和show,jsp。编写一个名字为compter的javabean,其中compter由pc.class类负责创建。
1)input.jsp的具体要求
input.jsp页面提供一个表单。其中表单允许用户输入计算机的品牌 型号和生产日期,该表单将用户输入的信息提交给当前调用名字为compter的bean,并使用表单提交的数据设置computer的有关属性的值。要求在input.jsp提供一个超链接以便用户单机这个超链接访问show.jsp页面。13)show.jsp的具体要求
Show.jsp调用名字为computer的bean,并显示bean的各个属性的值。3)pc.java的具体要求
编写的pc.java应当有描述计算机品牌 型号 生产日期的属性,并提供相应的getXxx和setXxx方法,来获取和修复这些属性的值。Pc.java中试用package语句,起的包名是bean.data。将pc.java编译后的字节码文件pc.class保存到chapter7WEB-INFclassesbeandata的目录中。4.JSP页面效果示列 Input.jsp的效果如图
show.jsp的效果如图
6、实验结果
input.jsp页面
Show.jsp页面
7、实验结果分析
1、session就是JavaBean对象被创建后,一直存在于当前回话中,在同一会话中,共享同一JavaBean
2、session基于会话的,当用户网页关闭的话,session就清空了或是到达了session最大的发呆时间。
实验3 有效范围application的bean 1.相关知识点
JSP页面使用useBean标记调用一个有效范围是application的bean:
本实验目的是掌握使用有效范围是application的bean制作一个简单留言板。3.实验要求
要求编写两个jsp页面inputMess.jsp和show.jsp。编写一个名字为board的javabean,其中board由MessBoard.class类负责创建.。第6章 inputMess.jsp的具体要求
inputMess.jsp页面提供一个表单。其中表单允许用户输入留言者的姓名 留言标题和留言内容,该表单将用户输入的信息提交的当前页面,当前页面调用名字为board的bean,并使用表单提交的数据设置board的有关属性的值。要求在inputMess.jsp中提供一个连接,已便用户单击这个超链接是访问show.jsp页面 第7章 show.jsp的具体要求
Show.jsp调用名字为board的bean,并显示该bean的allMessage属性的值 3)MessBoard.class的具体要求
编写MessBoard.java应当有刻画留言者的姓名.留言标题 和留言内容属性,并刻画全部留言信息的属性allMessage。将MessBoard.java保存到chapter7WEB-INFclassesbeandata的目录中。4.JSP页面效果示列
inputMess.jsp的效果如图 show.jsp的效果如图
5、参考代码
6、实验结果
inputMess.jsp页面
show.jsp 页面
7、实验结果分析
1、如果在scope指定范围内,该JavaBean已存在,则
用JSP实现Cookie技术 第5篇
我在此介绍一下如何在写JSP文件的时候,用JSP实现Cookie技术。
一、写入Cookie
其实用JSP操作Cookie是非常简单的,我们来看下面一段JSP程序:
这样我们就设置了一个Cookie。
我们来仔细研究一下这段代码:
Cookie cookie=new Cookie (cookieName, "Test_Content") ;
这一行建立了一个Cookie对象,其中有两个参数,第一个参数cookieName定义了Cookie的名字,后一个参数,也是一个字符串,定义了Cookie的内容,即网页在用户的机器上标识的文件内容。
接下来一行:cookie.setMaxAge (10) ,调用了Cookie中的setMaxAge方法,设定Cookie在用户机器硬盘上的存活期为10秒。一个Cookie文件在用户的硬盘里面存在的时间并不是无限期的,在建立Cookie对象的时候,我们必须制订Cookie文件的存活期,超过了这个存活期后,Cookie文件就不再起作用,会被用户的浏览器自行删除。如果我们希望用户在下次访问这个页面的时候,Cookie文件仍然有效而且可以被网页读出来的话,我们可以将Cookie文件的存活期设得稍微长一些。比如“cookie.setMaxAge (365*24*60*60) ”这样可以让Cookie文件在一年内有效。
二、读出Cookie文件
Cookie文件创建好后,自然还需要我们把它读出来。接下来我们看看如何读出在用户硬盘上的Cookie文件。
这一小段JSP程序可以读出用户硬盘上的所有有效的Cookie文件,也就是仍然在存活期内的Cookie文件,并用表格的形式列出每个Cookie的名字和内容。
我们来逐行分析一下这段代码:“Cookie cookies=request getCookies () ”。我们用“request.getCookies () ”读出用户硬盘上的Cookie文件,并将所有的Cookie文件放到一个cookie对象数组里面。
接下来我们用一个循环语句遍历刚才建立的Cookie对象数组,我们用“sCookie=cookies[i]”取出数组中的一个Cookie对象,然后用“sCookie.getValue () ”和“sCookie.getName () ”两个方法来取得这个Cookie文件的名字和内容。
通过将取出来的Cookie文件的名字和内容放在字符串变量中,我们就能对其进行各种操作。在上面的例子里,我们可通过循环语句的遍历,将所有Cookie文件内容放在一张表格中进行显示。
三、需要注意的一些问题
通过上面两个简单的例子,我们可以看到,用JSP进行Cookie文件的操作是非常简单的。不过我们在实际操作中还要注意一些问题:
1. Cookie的兼容性问题
Cookie的格式有两个不同的版本:第一个版本,我们称为Cookie Version 0,它最初是由Netscape公司制订的,也几乎被所有的浏览器所支持;较新的版本,Cookie Version 1,则是根据RFC 2109文档制定的。为了确保兼容性,JAVA规定,前面所涉及的Cookie文件的操作都是针对旧版本的Cookie进行的,而新版本的Cookie目前还不被Javax.servlet.http.Cookie包所支持。
2. Cookie的内容
同样的Cookie文件的内容的字符限制针对不同的Cookie版本也有所不同。在Cookie Version 0中,某些特殊的字符,例如:空格、方括号、圆括号、等于号(=)、逗号、双引号、斜杠、问号、@符号、冒号、分号都不能作为Cookie文件的内容。这也就是为什么我们在例子中设定Cookie文件的内容为“Test_Content”的原因。
虽然在Cookie Version 1规定中放宽了限制,我们可以使用这些字符,但是考虑到新版本的Cookie文件规范目前仍然没有被所有的浏览器所支持,因而为保险起见,我们应该在Cookie文件的内容中尽量避免使用这些字符。
参考文献
[1]武马群.Java程序设计.北京:北京工业大学出版社, 2007.
[2]杨学全.JSP编程技术.北京:清华大学出版社, 2009.
[3]仲进平.JSP网络开发技术程序设计[M].北京:人民邮电出版社, 2007.
浅谈JSP的多线程技术 第6篇
1 多线程的优点
(1) 进程之间不能共享内存, 但线程之间共享内存非常容易。
(2) 系统创建进程需要为该进程重新分配系统资源, 但创建线程代价要小的多, 因此使用多线程来实现多个任务并发比多进程要效率高。
(3) Java语言中内置多线程功能的支持, 而不是单纯的作为底层的操作系统的调动方式, 从而简化了Java的多线程编程。
2 多线程操作实现
2.1 线程的启动和创建
创建线程有两种方式:扩展java.lang.Thread类;实现Runnable接口。Thread类 (Java.lang.Thread类) , 在Java语言中Thread类代表线程, 所有的线程对象都必须是Thread类或其子类的实例。每条线程的作用是完成一定的任务, 实际上就是执行一段程序流, 也叫一段顺序执行的代码, Java使用r u n方法来封装这样一段程序流。Thread类代表线程类, 它的两个最主要的方法是:run () 包含线程运行时所执行的代码;Start () 用于启动线程。
继承Thread类创建和启动线程:定义T hread类的子类, 并重写该类的run方法, 该run方法的方法体就是代表了线程需要完成的任务, run方法也被称为线程执行体; (2) 创建Thread类子类的实例, 即创建了线程的对象; (3) 用线程对象的start方法来启动该线程。一个线程只能被启动一次。第二次启动时将会抛出Java.lang.Illegal Thread Excetpion异常。
2.2 线程间状态的转换
当线程被创建并启动以后, 它既不是一启动就进入了执行的状态, 也不是一直处于执行状态, 在线程的生命周期里, 它要经过新建, 就绪, 运行, 阻塞, 死亡五种状态。
新建状态:用new语句创建的线程对象处于新建状态, 此时它和其它的Java对象一样, 仅仅在堆中被分配了内存。启动线程使用start方法, 而不是run方法, 永远不用调用线程对象的run方法, 调用start方法来启动线程系统会把该run方法当成线程执行体来处理。但如果直接调用线程对象的run方法, 则run方法立即会被执行, 而且在run方法返回之前其他线程无法并发执行, 也就是说系统吧线程对象当成一个普通的对象, 而run方法也是一个普通方法, 而不是线程执行体。
就绪状态:当一个线程创建了以后, 其他的线程调用了它的start () 方法, 该线程就进入了就绪状态, JVM会为创建方法调用栈和线程计数器处于这个状态中的线程, 并没有开始运行, 它只是表示该线程可以运行了, 至于该线程何时开始运行, 取决于JVM里线程调度器的调度。处于这个状态的线程位于可运行池中, 等待获得CPU的使用权。
运行状态:处于这个状态的线程占用CPU, 执行程序的代码。
阻塞状态:当线程处于阻塞状态时, java虚拟机不会给线程分配CPU, 直到线程重新进入就绪状态, 它才有机会转到运行状态。如果处于就绪状态的线程获得了CPU资源, 开始执行run方法的执行体, 则该线程处于运行状态, 当一条线程开始运行后, 它不可能一直处于运行状态, 线程在运行的过程中, 需要被中断, 目的是使其他线程获得执行的机会, 当发生以下情况下, 线程将会进入阻塞状态。线程调用sleep方法主动放弃所占有的CPU资源, 线程调用一个阻塞式IO方法, 该方法返回之前该线程被阻塞, 线程试图获得一个同步监视器, 但该同步监视器正被其他线程所占据。线程在等待某个通知 (notify, notify All方法在Object类里) , 程序调用了线程的suspend方法, 将线程挂起暂停) , 不过这个方法容易导致死锁, 所以程序尽量避免该方法。
死亡状态:当线程退出了run () 方法, 就进入了死亡状态, 该线程结束了生命周期, 或者正常退出, 或者遇到异常退出Thread类的is Alive () 方法判断一个线程是否活着, 当线程处于死亡状态或者新建状态时, 该方法返回false, 在其余的状态下, 该方法返回true。
2.3 线程调度
线程调度模型:分时调度模型和抢占式调度模型, JVM采用抢占式调度模型, 所谓的多线程的并发运行, 其实是指宏观上看, 各个线程轮流获得CPU的使用权, 分别执行各自的任务, 线程的调度不是跨平台, 它不仅取决于java虚拟机, 它还依赖于操作系统。
2.4 Java线程:新特征-线程池
Sun在Java5中, 对Java线程的类库做了大量的扩展, 其中线程池就是Java5的新特征之一, 除了线程池之外, 还有很多多线程相关的内容, 为多线程的编程带来了极大便利。为了编写高效稳定可靠的多线程程序, 线程部分的新增内容显得尤为重要。
有关Java5线程新特征的内容全部在Java.util.concurrent下面, 里面包含数目众多的接口和类, 线程池的基本思想还是一种对象池的思想, 开辟一块内存空间, 里面存放了众多 (未死亡) 的线程, 池中线程执行调度由池管理器来处理。当有线程任务时, 从池中取一个, 执行完成后线程对象归池, 这样可以避免反复创建线程对象所带来的性能开销, 节省了系统的资源。
3 结语
线程与进程有很大的区别, 每个进程都需要操作系统为其分配独立的内存地址空间, 而同一进程中的所有线程在同一块地址空间中工作, 这些线程可以共享同一块内存和系统资源, 本文分析了多线程技术特点, 并对线程调度进行了分析。
参考文献
[1]贾兰兰.剖析Java语言的多线程[J].信息系统工程, 2009 (6) .
[2]魏晓艳.关于Java的多线程技术[J].考试周刊, 2010 (38) .
基于JSP技术的论坛系统设计 第7篇
一般来说,论坛的主要功能是让访问者在论坛上提问题、讨论问题、解决问题、分享心得及资源等等。如果把每一条信息看着一个帖子,论坛的功能则是发布帖子、回复帖子、查看帖子、修改帖子、删除帖子等等。由此,论坛的设计就变成如何表示信息、管理信息。采用JSP技术,可以按如下步骤设计论坛:1)模型设计;2)数据库设计;3)业务逻辑设计;4)视图设计。
下面,按上述步骤进行阐述。
1 模型设计
在论坛系统中,涉及的数据对象是帖子、版块、用户,在使用这些对象前,必须先设计出合适的模型,也就是抽象出系统需要的类,即帖子类、版块类、用户类。考虑到帖子在发布、回复时反映的信息不同,在设计时可以抽象出帖子类、帖子主题类和帖子回复类。
1.1 帖子类Tip
帖子包括的信息主要有帖子的标题、内容、发帖时间、修改时间、发帖人等。
根据面向对象设计的方法和原则,类的设计主要是属性和方法的设计,而且对类的操作只提供方法接口,属性不允许操作,即私有的。基于此,帖子类可按如下代码设计:
帖子类的属性设计:
private String title; //帖子标题
private String content; //帖子内容
private String publishTime; //发表时间
private String modifyTime; //修改时间
private in tuid;//引用用户的id,用来表示该帖子是哪个用户发表的
1.2 帖子主题类Topic(继承Tip)
帖子主题类包括的信息主要有帖子的标题、内容、发帖时间、修改时间、发帖人、帖子所属版块等。
由于帖子主题类中许多信息和帖子类相同,因此设计时可以直接继承帖子类相同的信息,只增加不同的部分。
帖子主题类的属性设计:
private int topicId; //唯一标志主题的id
private int boardId; //引用版块的id,用来表示该帖子是哪个版块的
1.3 版块类Board
版块类包括的信息主要有版块名称、版块的编号等。
版块类的属性设计:
private int boardId;//用来唯一标识版块
private String boardName; //版块名称
private int parentId;//主版块id
1.4 回复帖类Reply(继承Tip)
回复帖类包括的信息主要有帖子的标题、内容、发帖时间、修改时间、发帖人、回复帖子所属版块等。
由于帖子回复类中许多信息和帖子类相同,因此设计时可以直接继承帖子类相同的信息,只增加不同的部分。
帖子回复类的属性设计:
private int replyId; //唯一标志回复的id
private int topicId; //引用主题的id,用来表示该回复是哪个主题的
1.5 用户类User
用户类的信息包括用户名、用户密码、性别、头像、注册时间等。
用户类的属性设计:
private int uId; //用来唯一标识用户
private String uName;//用户名
private String uPass;//用户密码
private int gender;//性别,1是女,2是男
private String head; //头像,地址形式
private String regTime;//注册时间
2 数据库设计
论坛系统需要实现信息的动态更新,因此,系统中的动态信息必须存储在数据库中。用户每次访问论坛系统时从数据库中提取信息显示,并把增加的信息插入到数据库中。数据库的设计主要考虑如何存储论坛的信息内容,用多少张数据表,每个表含哪些字段,以及字段采用哪种类型等。设计时一般原则是每类数据对象对应一个数据表,数据对象的属性对应数据表中的字段。根据这样的原则,论坛系统中需要设计的表有帖子表(tbl_topic)、回复贴表(tbl_reply)、版块表(tbl_board)、用户表(tbl_user)。数据库设计工具可以采用SQL Server,Oracle,access等。
帖子表(tbl_topic)的结构如表1所示。
其他三个表结构设计的方法类似。
3 业务逻辑设计
在面向对象程序设计思想中有个原则:业务逻辑设计尽量采用接口,通过接口定义业务逻辑,即定义需要实现的功能,然后继承接口实现对应的功能。并且在后续中可以扩展接口中的业务逻辑来实现系统功能的扩展,方便后期的维护和功能扩充。
3.1 接口的设计
接口定义实现论坛系统功能所需要的各种方法,本系统需要的接口定义为表2所示。
3.2 业务逻辑实现
在论坛系统中,涉及的业务包括数据库连接、帖子处理、版块处理、回复处理和用户管理。分别用类实现,类继承对应接口,实现接口中定义方法。
3.2.1 数据库连接BaseDao类
要实现JSP程序与实际的数据库之间交换数据,必须在JSP文件中用代码完成数据库的连接,建立程序和数据库之间的联系。而JSP程序不止一个,为了便于管理,减少代码的冗余,编写类完成数据库的连接、数据的查询、插入、修改、删除。使用JSP技术连接数据库,数据库一般采用SQL Server,使用JDBC纯Java方式连接数据库,注意SQL Server2000和SQL Server2005连接字符串是不同的。在该类中,分别设计方法实现数据库连接、数据查询、数据的增删改。需要时实例化BaseDao类,调用对应的方法即可。
3.2.2 帖子处理TopicDaoImpl类
该类继承帖子接口和数据库类,完成帖子主题的查询、增加、修改、删除等,也就是实现在论坛系统中发布帖子、修改帖子、删除帖子、查看帖子。
类定义为:
class TopicDaoImpl extends BaseDao implements TopicDao
方法为:
int addTopic(Topic topic) //增加帖子
int deleteTopic(int topicId) //删除帖子
int updateTopic(Topic topic) //更新帖子
Topic findTopic(int topicId) //查找帖子的详细信息
List findListTopic(int page,int boardId) //查找帖子列表
int findCountTopic(int boardId) //根据版块id取得该版块的主题数
3.2.3 版块处理BoardDaoImpl类
该类继承版块接口和数据库类,类定义为:
class BoardDaoImpl extends BaseDao implements BoardDao
方法为:
Map findBoard() //查找所有版块,封装了版块信息的Map
Board findBoard(int boardId) //根据版块id查找版块信息
3.2.4 回复处理ReplyDaoImpl类
该类继承回复接口和数据库处理类,实现回复帖子的添加、删除、修改等。
类定义:
class ReplyDaoImpl extends BaseDao implements ReplyDao
方法为:
int addReply(Reply reply) //添加回复
int deleteReply(int replyId) //删除回复
int updateReply(Reply reply) //修改回复
List findListReply(int page,int topicId) //查找回复列表
int findCountReply(int topicId) //查找回复条数
Reply findReply(int replyId) //查找回复信息
3.2.5 用户管理UserDaoImpl类
该类继承BaseDao类,实现UserDao接口,完成用户的注册、修改、查询。
类定义为:
class UserDaoImpl extends BaseDao implements UserDao
方法为:
int addUser(User user) //增加用户
int updateUser(User user) //更新用户
User findUser(String uName) //查找用户
User findUser(int uId) //查找用户
4 视图设计
视图指用户访问论坛系统时显示的界面,根据用户访问的不同内容,视图设计主要包括各版块的显示、发帖、回帖、显示主题和回复内容、显示某一版块的帖子列表、注册、登录等。采用JSP技术设计,每个视图对应一个JSP文件,在JSP中使用page指令导入需要的包和类,结合Java代码和HTML代码,设计每个界面。
5 结束语
综上所述,可以看出使用JSP技术设计论坛应用系统,不仅清晰地分离了系统的表示(视图)和内容(模型),明确了角色定义以及开发者与网页设计者的分工,增加了模块的可重用性,使得设计比较容易,而且有利于系统后期的维护和功能扩展。
摘要:该文通过论坛系统的设计,提出了使用JSP技术设计论坛系统的方法,得出了使用JSP技术设计论坛系统采用模型、视图和业务逻辑分离设计,不仅增加了功能模块的重用性,而且有利于系统后期的维护和功能扩展。
关键词:JSP,论坛,模型,视图
参考文献
[1]马克,邓先瑞,杜瑞庆.基于JSP的SQL Server数据库访问技术[J].电脑知识与技术,2007(2):323-324.
[2]北京阿博泰克北大青鸟信息技术公司.使用JSP开发Web应用系统[M].北京:科学技术文献出版社,2008.
[3]李平.基于JSP的动态网页开发技术[J].微计算机信息,2009,7(3):108-110.
[4]王红.Java Web应用开发技术实用教程[M].北京:中国水利水电出版社,2008.
[5]钟小妹.基于MVC模式的JSP技术开发WEB应用系统[J].科技广场,2007(3):171-172.
基于JSP的社交网站设计 第8篇
初期设计中,可以使用现在很多人使用的J2EE,可以使jsp用户界面更好看。并且用B/S(Browser/Server)结构可以让数据的计算结果在浏览器中出现,而它的处理则是在服务器中运行。开发中使用struts2+spring+hibernate(SSH)三大框架,dao层+service层+action层+jsp显示的mvc分层的模式,可以让数据逻辑运算和页面的显示单独出现,还能使界面的设计很简洁。而在数据库方面, 使用Mysql的话可以让系统更安全。
1需求分析
1.1系统需求分析
由于该网站是基于用户之间的交流而设计的。所以在设计一些单独的功能模块要想清楚单独的模块功能和整体系统中存在的兼容性和整体完整性,主要的设计宗旨是:整体的功能存在于单独的功能之中。因为这样设计有利于将来需求增多时系统整体的扩充。在具体的系统实现上,我们要基于有关用户间的交流的需求上开始,也就是所有用户之间会产生,还有可能产生的交流需求来制作单独的模块功能。从而就可以研究出本系统中所有单独模块需要做到的功能。
1.2功能需求分析
一个系统最主要的开发基础是用户对系统功能的需求,因此在本系统的所有开发设计中,我们要从满足用户需求的方面开始,要有系统所做的一切全都是为了用户这种理念,要在分析与构造本系统的初期,为了使系统的功能可以更完美的满足用户的需求,而经常出去寻找用户,多与用户交流,从而知道她们对这样的交流系统有什么样的要求,本着功能齐全,界面华丽,用户使用起来却很简单的原则而进行本系统的制作。经过长期与用户的交流,得出结论是本系统至少要做到以下:
1) 用户使用起来方便: 界面设计要华丽大气,并且重要信息的显示,以及操作时的按纽要在用户很容易就能看到的地方,并且比如说像有关文章的操作,查询好友最新的文章,查找文章中的关键词等等最好可以做到只需用户点几下鼠标就能实现的地步; 还有,网站要能显示动态信息,因为这样就可以使用户任何时候都能知道自己的帐号的情况以及所有好友的动态。并且最好能把本系统制作成让用户觉得这个网站就是他自己设计的,可以随意更改布局。
2)及时更新:假如好友发布新照片或者新文章后,系统会及时在用户的操作页面中提示。而像好友对用户空间的留言,访问, 对照片以及文章的评论则自动加载到用户的空间中。
3)最主要的就是系统运行方面,要以更快,更稳定为原则。
4) 系统要有可扩展性,便于将来需求增加时对该系统功能的扩展以及日后的维护工作。
5)本系统,用户要有登陆,注册和查看其他用户资料的权限。
各部分功能图如图1所示。
1.3数据库方面
数据库的制作要遵循一些原则,因为一个好的数据库要做到一些约束和要求。尽量不要将个体的表格之间产生数据变动的关联,最好是实体与表格一一对应,明白实体所具有的性质,以及实体所对应的字段是什么,最重要的就是各个实体之间的关系要明确。实体、性质与互相之间的关系是在初步系统制作时要首先想到的问题,就像本系统的各个功能模块的划分一样,功能表与实体类一定要做到一一对应。通过长期的分析而得到用户实体属性图如图2所示。
2结束语
JSP中URL重写的实现 第9篇
随着互联网的飞速发展, 越来越多的企业选择建立网站进行企业宣传和网络办公。JSP (Java Server Pages) 技术作为当前较为热门的Web开发技术, 具有安全性高和可移植性等特点, 很多企业选择用此技术来开发网站。网站建成后最重要的是进行推广, 大多数企业选择利用搜索引擎进行网站推广。要增强网站中地址的可读性和让搜索引擎快速收录网站, 就需要优化网页的URL地址, 也就是使用URL重写技术。
1 URL重写的优劣
URL重写实质上是截取传入的Web请求并自动将请求重定向到其它URL的过程, 用户通过相应的虚拟URL (Virtual URL) 访问网页资源。使用Url重写有以下优点:
(1) 易于被搜索引擎收录。大部分搜索引擎抓取动态网页的优先度远远低于静态网页。而URL重写很大程度上可将动态链接转换成静态链接, 这将使得搜索引擎尽可能深地抓取网站子栏目的内容, 使网页在搜索结果中排名靠前。
(2) 增加用户访问时的友好和方便。很少有用户去关心网站的页面和地址, 但对一般的大中型网站增强可读性还是必须的。比如原来可以把http://xxx/show.jsp?year=2004重写成http://xxx/2004, 使用户可以方便地访问网站。
(3) 方便网站重组, 提高网站的移植性。在进行网站重组而将/product/目录下的所有网页移动到/catalog/category/目录中时, 可以使用URL重写来检查Web请求是否指向了/ roduct/目录中的文件。如果请求是指向/product/目录中的文件时, 则自动将请求重定向到/catalog/category/目录中的同一文件。
URL重写虽然优点很多, 但是也有缺点, 因为它是通过过滤器原理来实现的, 所以多了一道访问, 会对访问速度有一定的影响。综合来说, 使用URL重写, 还是利大于弊。
2 JSP实现URL重写的工作原理
JSP实现URL重写的工作原理, 简单来说就是一个过滤器 (Filter) 的实现, 这个过滤器的作用就是将用户请求的url 转换成实际的url, 再对它进行请求的过程。过滤器工作原理如图1所示。
当客户端发出Web资源 (如重写后的URL) 的请求时, Web服务器根据应用程序配置文件设置的过滤规则进行检查, 客户请求满足过滤规则, 则对客户请求/响应进行拦截, 对请求头和请求数据进行检查或改动, 并依次通过过滤器链, 最后把请求/响应交给请求的Web资源处理。请求信息在过滤器链中根据事先定义好的规则将重写的URL转换成实际的URL, 并直接向客户发回一个响应。在资源处理器完成对资源的处理后, 响应信息将逐级逆向返回。
3 JSP实现URL重写的方法
JSP实现URL重写的方法有多种, 一种就是Apache, Jboss这些Web容器自带的一些URL重写, 但是这些方法的配置比较麻烦, 性能也不是很好。还有一种就是使用系统的404错误进行URL重写, 此种方法只适合一些简单的应用。本文介绍一种利用开源框架UrlRewriteFilter来实现URL重写。此种方法配置简单, 使用方便, 并且支持多种Web容器。下面以Tomcat容器为例, 讲解此种方法的实现过程。
3.1 开源框架的安装
获取最新的UrlRewriteFilter开源框架 (http://www.tuckey.org/urlrewrite) , 以下简称URF , 将urlrewrite.jar文件拷贝至Tomcat容器安装目录的lib目录下。此文件是URF的发布类库集合, 其典型应用就是把动态URL重写, 实现静态化, 便于搜索引擎收录。
3.2 URL重写的过滤器配置
URL重写过程简单来说就是一个过滤过程, 使用URF实现URL重写, 必须将过滤器与特定的servlet关联, 因此需配置/conf/web.xml, 从而让URF正常工作, 配置信息如下:
上述配置应该注意每一项声明的顺序, 不能背离这些元素的顺序。
3.3 编写URL重写规则
为了正确重写URL, 需要在WEB-INF目录下建一个urlrewrite.xml文件, 并在此文件中编写URL重写规则, 以便确定需要重写的URL地址和URL转发的地址。一般使用可以序列化 (Serializable) 的结构:
示例1如将 http://yousite.com/entity.jsp category=user&page=1表现为:http://yousite. com/entity/uesr/page_1.html配置如下:
在示例1的from节点中, 使用了正则表达式描述重写后的URL规则。正则表达式由一些普通字符和一些元字符 (metacharacters) 组成, 普通字符包括大小写的字母和数字, 而元字符则具有特殊的含义。一个正则表达式, 就是用某种模式去匹配一类字符串的一个公式。常用的正规表达式元字符含义如表1所示。
实例1中的$1, $2代表与配置正规表达式^/ (w+) / (w+) /相对应的参数。
rule结点中from规则默认使用正则表达式来匹配, 当用户访问服务器的URL会与该配置相比较, 如果符合规则就会按照下面to结点中的配置对其进行跳转, 其默认是forward跳转, forward方式只能跳转到同一个Web应用中的页面上, 如果想连接外部的网站, 则使用redirect跳转, 格式为:
4 结束语
本文详细阐述了URL重写的优劣, 以及在JSP中通过过滤器实现URL重写的原理和方法。利用开源框架UrlRewriteFilter实现URL重写不需要复杂的Web容器配置, 只需将过滤器与特定的servlet关联, 关键是通过正则表达式描述重写后的URL规则, 这个规则可自定义, 从而使得URL地址规范化和可阅读化, 达到便于搜索引擎收录的目的。
摘要:针对搜索引擎对动态网页抓取率不高的问题, 提出使用URL重写技术优化网页URL地址解决方法。分析了JSP实现URL重写的机制, 并重点论述了用JSP进行URL重写的技术实现。
关键词:JSP,URL重写,过滤器,正则表达式
参考文献
[1]URL rewrites and 301redirects-how does it all work[EB/OL].ht-tp://www.seomoz.org/blog/url-rewrites-and-301-redirects-how-does-it-all-work.
[2]URl rewrite filter[EB/OL].http://www.tuckey.org/.
JSP环境范文
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。


