设计一个web服务器
课程设计目的
《Java&.net》是一门实践性较强的软件基础课程,为了学好这门课程,必须在掌握理论知识的同时,加强上机实践。本课程设计的目的就是要达到理论与实际应用相结合,使同学们能够根据数据对象的特性,学会数据组织的方法,能把现实世界中的实际问题在计算机内部表示出来,并培养基本的、良好的软件设计与开发技能。
具体包括:
1)演示一个全面的设计和开发过程,包括面向对象的分析、面向对象的设计和实现。
2)演示如何使用设计目标来影响您的设计选择、仔细地分配职责、在适当的地方使用设计模式、讨论可选设计之间的权衡以及选择适当的解决方案。 解决方案的核心逻辑必须是可测试的,并且完全独立于解决方案的最终功能。
3)清晰地传达设计思想,包括能够熟练使用 UML类图和交互图的基本符号的设计文档,设计词汇的正确使用,以及系统行为规范中适当级别的正式性。
4)采用 GUI实现的基本功能,增加对事件处理和观察者模式的理解。
课程设计要求
通过这次设计,要求在软件开发过程,系统架构,系统的设计及其实现等方面中加深对课程基本内容的理解。同时,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。
课程设计题目(Java Web 服务器开发)
实现一个支持静态页面、Servlet、简单 JSP 的 Web 服务器。
静态任务:
-
能响应请求的 html页面;
-
还能够响应请求的 gif , jpg的等图片文件;
-
能响应请求的目录的信息,并以列表显示;
实现图形化界面:
-
界面上包含 Web主目录编辑框(可通过点击选择目录)和 Web服务端口编辑框。
-
界面包含启动按钮。点击启动按钮,启动服务,并打开浏览器,直接访问 web服务器。
-
界面包含文本区域,滚动现实服务器端日志。
提供 Servlet支持:
支持从 Web.xml 中读取 Servlet 配置信息;
动态构建 Servlet 对象,响应用户的 doGet 和 doPost请求,返回响应结果到客户端;
标准的 Servlet 代码,无需修改在开发的系统中能够运行。
实现 JSP 支持
部分支持 JSP 中的<%= 表达式 %>语法,包含基本的 request,response 等
提高要求)支持部分自定义标签
提高要求)支持其它 JSP语法
扩展功能(提高要求)
支持从 Web.xml 中读取 Filter配置信息,实现标准的 filter 行为
提高对 Listener 的实现
支持用户多次访问间 Session、Application 信息的共享
限制与约束
本课程设计的可使用的库仅限于 Jave SE基本库。除基本的 XML操作库外,不允许使用 J2SE中HttpServer 类,也不允许使用其它非 Jave SE 库(如各种来源的 servlet-api.jar、jsp-api.jar、jasper.jar、其它相关功能的实现)。
服务器需要支持并发请求。
示例网站的代码可以在开发的系统上正常运行。
考虑到 Oracle JDK 的商业许可约束,可采用 Open JDK 代替 Oracle JDK 进行开发。
注意事项
课程设计报告要求
按格式要求完成实习报告,每人用 A4 纸打印课程设计报告(源代码不用打印),此外,请学习委员将所有同学的源代码收齐后刻在一张光盘上,光盘上分别为每个小组的资料建一个文件夹,其中存入该同学课程设计的源程序及课程设计报告的电子文档。
离校之前提交实习报告。
请各位同学把实习题目当作产品来完成。
追求完善,不要仅仅应付老师检查,程序要求有良好的结构及编码风格,有必要的注释。4、 必须在机房完成实习,签到计入最后成绩。
系统概述
系统背景
在 java课程学习完成之后,我们已经学习了 web开发的相关知识,java大实习针对于 web 开发和网络编程相关方面进行研究,让学生开发出类似 tomcat的web服务器。对于 web服务器,我们首先要明确我们是完成服务器的编写,需要它能够遵循 http 协议且响应客户端(浏览器)的请求。Web 服务器请求包括静态文件 HTML请求,以及动态请求 servlet、jsp等。
开发环境与工具
序号 | 类别 | 具体需求 | 备注 | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
1 | 1 | 1 | 硬件 | 硬件 | 硬件 | LenovoR20 | LenovoR20 | LenovoR20 | |||
2 | 2 | 2 | 软件 | 软件 | 软件 | Jdk1.8 | Jdk1.8 | Jdk1.8 | |||
eclipse | eclipse | eclipse | |||||||||
Google Chrome | Google Chrome | Google Chrome |
需求分析
系统需求概述
[对待实现系统做一个概要的高层描述]
用例名称 | 用例描述 | 主要流程 | 业务规则 | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
静态文件请求 | 静态文件请求 | 静态文件请求 | 浏览器请求一个静态文;件,然后客户端进行应答 | 浏览器请求一个静态文;件,然后客户端进行应答 | 浏览器请求一个静态文;件,然后客户端进行应答 | 用户在浏览器上键入url,;然后 web服务器进行响;应,回复响应的包 | 用户在浏览器上键入url,;然后 web服务器进行响;应,回复响应的包 | 用户在浏览器上键入url,;然后 web服务器进行响;应,回复响应的包 | Requst请求最终必需是文;件 | Requst请求最终必需是文;件 | Requst请求最终必需是文;件 |
Servlet请求 | Servlet请求 | Servlet请求 | 浏览器发送 Servlet请求;(或者由其他请求转向;servlet请求),然后客户;端进行应答 | 浏览器发送 Servlet请求;(或者由其他请求转向;servlet请求),然后客户;端进行应答 | 浏览器发送 Servlet请求;(或者由其他请求转向;servlet请求),然后客户;端进行应答 | 用户在浏览器上键入;servlet请求,然后服务;器进行响应,回复包 | 用户在浏览器上键入;servlet请求,然后服务;器进行响应,回复包 | 用户在浏览器上键入;servlet请求,然后服务;器进行响应,回复包 | Requst请求最终必须是;servlet,且 servlet需要;有配置好 | Requst请求最终必须是;servlet,且 servlet需要;有配置好 | Requst请求最终必须是;servlet,且 servlet需要;有配置好 |
Jsp文件请求 | Jsp文件请求 | Jsp文件请求 | 浏览器请求一个 jsp文;件,然后客户端进行应答 | 浏览器请求一个 jsp文;件,然后客户端进行应答 | 浏览器请求一个 jsp文;件,然后客户端进行应答 | 用户在浏览器上键入 jsp;文件,然后 web服务器进;行响应,回复响应的包 | 用户在浏览器上键入 jsp;文件,然后 web服务器进;行响应,回复响应的包 | 用户在浏览器上键入 jsp;文件,然后 web服务器进;行响应,回复响应的包 | Requst请求最终必须是;jsp,并且 jsp文件必须符;合相应文件 | Requst请求最终必须是;jsp,并且 jsp文件必须符;合相应文件 | Requst请求最终必须是;jsp,并且 jsp文件必须符;合相应文件 |
功能性需求
[列出待实现系统的功能性需求]
数据图:
功能名字 | 输入 | 输出 | ||||||
---|---|---|---|---|---|---|---|---|
静态文件请求 | 静态文件请求 | 静态文件请求 | 静态文件的 url | 静态文件的 url | 静态文件的 url | 相应文件的应答 | 相应文件的应答 | 相应文件的应答 |
提供 Servlet支持 | 提供 Servlet支持 | 提供 Servlet支持 | Web.xml 上配置好的,相;应 servlet映射的 url | Web.xml 上配置好的,相;应 servlet映射的 url | Web.xml 上配置好的,相;应 servlet映射的 url | 由 servlet进行相应的操;作后输出相应的应答 | 由 servlet进行相应的操;作后输出相应的应答 | 由 servlet进行相应的操;作后输出相应的应答 |
实现 JSP 支持 | 实现 JSP 支持 | 实现 JSP 支持 | Jsp文件的请求的 url | Jsp文件的请求的 url | Jsp文件的请求的 url | 对相应的 jsp文件进行操;作后,输出相应的应答 | 对相应的 jsp文件进行操;作后,输出相应的应答 | 对相应的 jsp文件进行操;作后,输出相应的应答 |
标准的 filter拦截 | 标准的 filter拦截 | 标准的 filter拦截 | 请求的 url | 请求的 url | 请求的 url | 未匹配的 url | 未匹配的 url | 未匹配的 url |
支持多用户的 Session会;话 | 支持多用户的 Session会;话 | 支持多用户的 Session会;话 | 浏览器发送的 cookier | 浏览器发送的 cookier | 浏览器发送的 cookier | 返回用户对应的 session;绘画 | 返回用户对应的 session;绘画 | 返回用户对应的 session;绘画 |
图形化界面 | 图形化界面 | 图形化界面 | 点击、键盘输入 | 点击、键盘输入 | 点击、键盘输入 | 显示的日志 | 显示的日志 | 显示的日志 |
非功能性需求
[此处可根据待实现系统的自身特点,对下列条目进行裁剪或补充]
正确:能够正确的通过老师的测试,并且在功能尽量接近正真的 web服务器。
安全性:有错误要及时抛出到日志上,不能运行程序不能出现崩溃。
可扩展性:用户或者别人可以对 web服务器的功能实现扩展,所以注意接口的设计
文档完善:注释和文档要写的详细
概要设计
系统总体设计
[说明待实现系统的总体框架、系统逻辑结构和软件结构架构等。]
图像界面:用来给 web服务器显示日志,同时接收 web服务器用户的一些操作对web服务器进行配置等。
web服务器:真正的操作的子系统,提供接口接收用户输入的 url
oneconnection:处在 web服务器中,是一个线程
rquest、respone:用于输入 url的解析处理和输出静态文件
servlet容器:用于 servlet的相关操作
servletContent:一个web服务器全局的存在的变量,用于记录日志和 Servlet间的通讯
系统功能设计
[说明系统按照功能划分的总体结构。可用结构图来描述系统的子系统划分情况;如果待实现系统比较简单,则可以直接描述系统中模块间关系的层次。结构图的基本组成部分是模块,模块用来标识一个功能,在结构图中表示了系统的层次关系和调用关系]
结构图:
说明:
当 web 服务器接收请求时,它会生成一个 oneconnection 的连接(线程),调用 oneconnection进行操作。
oneconnection 创建后会调用 request 进行分析,response 进行回复在发现是 servlet 类的请求后然后会生成 httpservletrequest 和 httpservletresponse servlet 会调用 httpservletrequest 和 httpservletresponse,进行操作和通讯,同时有时会调用ServletContent进行一些变量的获得之类。
jsp 的响应也是生成 servlet 后调用 servlet 完成的。
详细设计
模块接口设计
[对照概要设计中的系统功能设计,依次给出各个子系统中各个模块的接口设计详细说明。可以按照如下章节进行组织,也可以采用 UML类图加上程序逻辑描述的形式给出。]
[若待实现系统功能较为简单,那么只需给出其中若干关键模块的详细设计说明即可。]
类的讲解:
类名:WebServer
类的简述:服务器和用户交互的地方
接口:
-
startWeb():开启 web服务器
-
类名:oneConnection
-
类的简述:线程类,每当有一个连接,就会创建一个连接
接口:
-
service():开始进行服务
-
After_Filter(String uri):通过 Filter过滤后,进行的操作
-
类名:Request
-
类的简述:对于套接字发过的流进行处理的类,可以得到相应的信息
接口:
getRequest():处理套接字 InputStreamReader()输入流,得到相应的信息类名:Response
类的简述:对套接字发送的流进行处理类,回复浏览器
接口:
-
sendFile(String path):发送文件
-
sendDir(String path):发送目录文件
-
类名:ServletContext
-
类的简述:全域下的记录,用于传递消息以及记录消息
接口:
-
String getContextPath():获得工作环境的路径
-
getServletConfig(String url):得到 servlet对应的配置
-
log(String msg):记录日志
-
getFilterConfig(String url) :得到 Filter对应的配置
-
类名:ServletConfig
-
类的简述:记录 Servlet的配置
接口:
c++
getServletName();得到名字
getParameter(String name);得到参数对应的值
getServletUrl();得到 Servlet的 url
类名:HttpServlet
类的简述:对于发送过来的请求进行操作
接口:
-
doGet(HttpServletRequest req, HttpServletResponse resp):进行 Get请求的应答
-
doPost:(HttpServletRequest req, HttpServletResponse resp):进行 post请求的应答
-
类名:HttpServletRequest
类的简述:
对于发过来的 request请求进行处理
接口:
getSession():获得会话
getHeaderNames();获得头的名字
类名:HttpServletResponse
类的简述:进行应答回复
接口:
setStatus(int sc);设置状态 getHeader(String name);回复头
sendRedirect(String location)进行转发
类名:JspServletProduce
类的简述:用来处理 jsp文件的请求
接口:
ReadJsp(File f):读 jsp文件
ReadJsp(File f):写 java文件
系统成果展示
[对照概要设计中的系统功能设计,依次给出各个子系统中各个模块的运行结果和解释说明]
模块 1
静态文件请求:
解释:
当客户端发来一个静态文件请求时,服务器会生成 request和 response, request会进行处理得到想要的文件,在 response 中进行处理进行发送.
模块 2
列表请求
解释:
返回目录下的列表可以进行点击,选择下一个
模块 3
Serverlt 测试:
解释:
当进行 petServlet 请求时,会运行反射生成相应的 servlet 类进行处理,然后运行 servlet 进行相应的处理,最好进行应答.
模块 4
Jsp 测试
解释:
当请求 jsp文件时,会先生成相应的 servlet对应的 java文件,然后对其进行编译生成 class文件,最后类似上面的 Servlet 用法,用反射进行生成 Servlet 进行处理
模块 5
MVC 测试:
解释:
会利用 Servlet 进行处理数据处理,利用 jsp 进行显示.
模块 6
扩展要求:
解释:
请求 jsp 文件后进行操作,生成 servlet 的 java 文件,然后对其进行编译生成 class 文件,找到相应的 class文件后,进行反射操作,进行回复.
模块 7
过滤器:
解释:
在得到url时就进行,相应的filter匹配,如果匹配上后,就利用反射生成相应的servletfilter,然后进行对应 doFilter()处理.
模块 8
Session 会话:
解释:
进行连接时浏览器会发送一个 cookier,然后服务器记录下这个 cookier,在相同的浏览器时,会查找 cookier,进行相同的会话.
模块 9
界面:
解释:可以选择目录、端口,然后显示日志
实习体会
[给出综合实习过程中实习体会的汇总]
主要讲遇到的困难,如何解决的,收获、建议等
困难 1: 响应请求的目录的信息
解决方式:听老师讲解后,明白生成一个 html文件,进行回复
困难 2:对于 Servlet和 jsp不理解
解决方式:看网上对于javaweb讲解的视频,慢慢的明白了Servlet和jsp的原理,学会了简单的 web应用.
困难 3:对于反射的不理解运用
解决方式:查找 java反射资料,学习并运用反射生成 Servlet
困难 4:对于 java动态编译的不理解
解决方式:网上查找资料学习动态编译,并且学习用 javac的各种参数对 java文件进行编译.
困难 5:对于 servlet的理解
解决方式:查看 tomcat的源码,然后进行理解他的框架,尝试自己写出来
收获:
在本次实习中,我学会了 javaWeb 的基本原理和运用,现在我基本上可以对java中 web项目进行编写.学会了 java的反射机制,会运用了 Java进行相应的处理更加的理解 Java动态编译,并且会使用 javac的简单命令进行编译4.学会了相应的框架编写,会使用装饰器和适配器模式简单使用.
建议:
实习时间可以安排合理一点,实习难度可以提高一些.
参考文献
- 基于PHP和MySQL的网上购物系统设计与实现(电子科技大学·李华明)
- 基于.NET的Web Service技术在数据交换系统中的研究和应用(武汉理工大学·周鹏)
- 基于Web服务的企业信息化集成应用(云南财经大学·韩雪)
- 基于SSH框架的Web网站设计与实现(长春理工大学·冯学军)
- 黑龙江高等职业教育状态数据采集平台网站内容生成系统的设计与实现(吉林大学·刘莹)
- 基于JSP的雄霸天下游戏网的后台操作系统的开发设计(电子科技大学·张璇)
- 基于WebService的教育资源管理系统的设计(电子科技大学·李昕)
- 基于SSH架构的个人空间交友网站的设计与实现(北京邮电大学·隋昕航)
- 基于SSH架构的个人空间交友网站的设计与实现(北京邮电大学·隋昕航)
- 基于J2EE的Web应用程序在仪表在线网站中的应用(浙江大学·周明)
- 基于SSH架构的个人空间交友网站的设计与实现(北京邮电大学·隋昕航)
- 基于.NET的在线购物平台研究与实现(东北师范大学·刘雪娇)
- 基于J2EE技术中国残疾人远程教育系统(吉林大学·卜祥川)
- 基于.NET的网络辅助教学系统的设计与实现(北京邮电大学·董宇峰)
- 基于REST架构的Web Services的研究与设计(武汉理工大学·程小飞)
本文内容包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主题。发布者:毕设客栈 ,原文地址:https://m.bishedaima.com/yuanma/36184.html