精华内容
下载资源
问答
  • 期末的课程设计与大家分享下! WEB编程 课程设计 旅游换居 jsp 如果有朋友想到比较好的方法可以一起研究下哦!~ 联系QQ:2066299
  • Web编程课程设计报告05计.doc
  • 网络编程课程设计Web浏览器设计

    热门讨论 2010-01-08 20:29:22
    报告,包括需求分析、概要设计、详细设计跟调试与运行 Word报告很详细,是网络编程课程设计,也包括具体制作的方法
  • 1、掌握Web服务器软件IIS的安装、配置和测试; 2、熟悉VBScript脚本语言的语法; 3、熟悉JavaScript脚本语言的语法; 4、掌握在网页中使用脚本语言编程、调试的方法。 二、实验内容 1、设置IIS的主目录,并在...
  • JSP实验报告模板
  • web课程设计报告 1 概述 1 1.1 设计目的 1 1.2 设计任务 1 1.3 可行性分析 1 2 支撑环境规划 2 3 系统目标和设计原则 2 3.1 系统目标 2 3.2 设计原则 2 4 需求分析 3 4.1 系统任务 3 4.2 系统功能 3 4.3 系统流程图 ...
  • web编程课程小结

    千次阅读 2016-12-21 21:31:24
    本学期学习了网络编程课程,但是并没有涉及到socket等内容,所以准确来说应该算是web编程课,以下是对本学期课程学习要点的一些总结: html/css (1)学习了常用的一些简单标签,然后制作了单列布局(仅使用了html...

    本学期学习了网络编程课程,但是并没有涉及到socket等内容,所以准确来说应该算是web编程课,以下是对本学期课程学习要点的一些总结:

    html/css

    (1)学习了常用的一些简单标签,然后制作了单列布局(仅使用了html)的网页。
    (2)学习CSS,引入了DOM的概念,学习设置元素的属性。
    (3)在前两步的前提下,开始学习网页布局,设计网页。
    学习要点:1.DOM 2.盒模型 3.布局模型


    js
    (4)通过ID或class获取DOM元素,并进行css属性的修改。
    (5)引入事件,通过事件触发函数,来实现动态效果。
    学习要点:1.函数 2.事件 4.修改DOM的CSS属性


    jsp
    (6)服务器的基本工作原理。
    (7)jsp获取表单内容,并存入session,来实现不同页面间数据的传递。
    (8)jsp连接数据库,并且实现执行SQL语句,完成对数据库的增删查改功能。
    学习要点:1.数据库语句 2.jsp语法 3.服务器
    展开全文
  • 网页设计项目 Web设计编程的无聊课程注册项目。
  • HTMLPClassProject:用于HTML编程课程Web设计项目
  • 用C++编写的web浏览器,编的不错哦!
  • Web编程基础》课程教学标准(HTML+CSS+JavaScript)
  • java web 编程课程总结 这次的课程和以往的课程有一些不同一是需要理解的概念专业术语很多比如Java Web里引入了Web体系结构MVC 设计模式等的概念出现了ServletJavaBean ScriptletJSTL等无法替代的术语二是这次学习的...
  • 本次课程设计使用MyEclipse编译器,使用的编程语言为HTML5、CSS、JavaScript,本次的课程设计适用于初学者,比较适合本科阶段的结课设计。本次的设计内容包括:各个网页的链接、锚点、注册表、问卷调查、有序列表和...
  • 精心制作的web课程设计,包含javascript,div+css布局。
  • 这是一门课程材料,旨在支持Web编程的学习。 涵盖的主题包括:HTML,CSS样式,使用WordPress的网站设计。 该课程材料包括在拉科德芳应用艺术学院在伊拉科姆(洛桑)开设的课程,以及(日内瓦)的培训模块。 执照 本...
  • 华东交通大学 web课程设计报告 ,简单的网页制作,适合初学者参考,包含有CSS技术 和JavaScript技术
  • 1、通过本次课程设计,熟练掌握ASP或ASP.NET开发环境---Visual Studio的使用。 2、加深对软件开发流程理解,训练编写程序的良好习惯。认真编写需求分析文档、做好系统功能设计、学会自己进行程序的算法、数据结构...
  • 开发Web服务器项目中的编程实现 1在线帮助的设计与实现 1.chm的帮助文件 在帮助菜单的事件响应中加载帮助文件 Runtime currentRunTime=Runtime.getRuntime; Process newProcess=null; try { //c:\winnt\hh.exe 为....
  • web开发课程设计

    2015-01-16 10:11:09
    web课程设计,网站设计,用户可进行登录以及注册,增删查改留言,博客留言。用jsp +servlet编程语言进行设计
  • JSP课程设计管理系统 是一套完善的WEB网页系统,对理解JSP java编程开发语言有帮助系统采用B/S模式网页浏览器,系统具有完整的源代码和数据库,系统主要采用B/S模式开发应用技术:java|jsp+SQLSERVER 开发工具:...
  • Java Web 课程设计报告 湖北第二师范学院 课程设计报告 课程名称Java Web 课程设计 设计题目 学生成绩管理系统 系 别 计算机科学系 专 业 计算机科学与技术嵌入式方向 小组成员刘 佳技术人员学号1150313042 李惠芳...
  • Web精品课程系统网站_毕业设计

    热门讨论 2010-12-23 21:32:05
    Web精品课程系统网站,这是我们大三毕业设计,希望能对你们有用 由于我不能上传过大的软件,所以我把需要的jar分离出来上传,免费下载,(*^__^*) 嘻嘻…… 资源名字为:Web精品课程系统网站_jar包
  • 学会用web数据库程序设计语言编程实现信息管理系统. 二、 实验要求: 包括系统设计要求,开发环境要求,技术文档要求三部分。 三、 系统设计要求: 1. 人事管理管理系统中不同使用单位(用户)的员工人数事先无法...
  • Java web课程设计-购物系统

    万次阅读 多人点赞 2019-08-21 22:49:26
    Java web课程设计是为了是计算机学院的学子深入学习java web应用开发设置的一门实验性的动手性的实践课程。是计算机科学与技术、 网络工程、信息安全、物联网工程、软件工程等专业集中实践的教学环节,是将关jav...

    题目:网上购物系统
    完成时间:2019年6月14日
    网上购物商店的分析与实现

    一.实验目的

    Java web课程设计是为了是计算机学院的学子深入学习java web应用开发设置的一门实验性的动手性的实践课程。是计算机科学与技术、 网络工程、信息安全、物联网工程、软件工程等专业集中实践的教学环节,是将关java web开发理论知识转化为解决实际问题能力的重要环节。Java web课程设计联系了前端的HTML、CSS、JAVASCRIPT、JSP等各项语言,同时紧密的将后台开发的java语言和数据库联系在一起,从整体上实现了java web项目的认识与实践。

    本次课程设计不仅仅是让同学们对于java web开发的前后端知识有一定的了解,同时使得学生们对于java web的服务器例如tomcat等有一定的了解和使用,在有能力和有余力的情况下,在开发中可以使用jQuery等框架在减轻开发难度的同时深入了解java web的开发。同时,本次课程设计也是对于本学期学生的java web课程的一个良好的检测,在应用本学期所学知识的同时,能够对于自己在这门课程中的疑惑与困难进行集中性的解决。学会开发java web项目的精髓,利用开发的项目解决实际问题。

    二.实验平台

    服务器:Tomcat集成开发环境:java EE版本的eclipse数据库:Mysql 使用户语言:java jsp HTML CSS jQuery框架

    三.实验内容

    利用所学java web开发有关的知识,开发一个功能较为齐全、页面较为精美、能够连接数据库的网上购物系统。本次课程设计的购物网站系统模拟实现了用户注册、用户登录、个人信息修改、商品浏览、提交订单、支付、购买历史浏览等多项功能,满足了基本的购物流程需求。网络技术提供了实现电子商务的技术平台,而电子商务是网络技术的最新应用和最终目标。本系统正是电子商务的典型例子,通过实现本系统,除了能够锻炼Web开发技术的能力、也能够更好地理解电子商务的含义,并加深对当今“互联网联通世界”现象的理解。

    四.实验要求

    电子商务网站的 功能主要包括用户的注册、登录、购物和新闻发布这几个主要方面,还包括所售商品的维护。

    1.用户登录、注册功能

    (1)、注册功能。这是用于第一次进入网站,并有兴趣在本网站购买东西的顾客而设的,具有提醒第一次进入本站的用户注册的功能。另外用户注册页面应有一个介绍和解释本站详细功能的说明,并附上同意与否的按钮和一个用于提示用户填写详细资料的表,并划分出是否为必填或其他。同时还需要有基本的判断功能,对用户填写的资料的正确与否进行判断,然后返回相应的信息,还能够把用户提供的信息返回,建立一个数据库,并把这些信息写入数据库。

    (2)、登录功能。这是为老顾客而设的,其目的是为顾客创造一个友好的环境,并且让他知道自己上次离站的时间等信息,是一个简单用于登录、判断用户填写正确与否的程序。如果登录成功,则再把这次信息写入数据库,重新更新数据库信息,并启动其他线程以便于用户购物。

    (3)、查看、修改用户信息功能。当用户对自己注册的信息不满意时,系统必须有对此项的支持。

    (4)、修改密码。这是出于对安全型的考虑,经常地更换密码可以提高安全性。

    2.购物功能

    (1)、物品浏览:当顾客进入网站,首先应当看到推荐商品或最近更新的商品,同时对商品的类型进行适当的划分。对商品还要有详细的介绍,对大类中的小类也应当把它们的属性特点向顾客介绍清楚。
    (2)、商品购买:当顾客看中某样商品时,就应当启动购买功能,在小类型下所属的商品列表中应当有购买功能,购买完所有商品后,系统应当给出购物清单,在清单中应列出所购物品及数量,没见物品的价格和购物总价格,还应当有完整的确认系统,不仅包括放入购物车的确认,而且还包括购物与否的确认。
    (3)、动态新闻发布功能:动态新闻发布功能和商品最近更新的发布是类似的,它们构建数据库的形式和程序的实现大致相同。
    (4)、商品管理:管理网站所出售的商品。
    

    五.实验内容

    1.结构设计

    2.系统整体介绍网上购物系统整体上模拟实现了一般的购物网站那的各项功能。包括购物网站的用户的注册与登录模块、首页个人信息的展示与修改、购物商品的分类浏览、商品添加到购物车、商品的购买以及历历史记录的查询、购物车信息的查询。同时也包括对于数据库中商品信息的添加修改删除。在商品的查询中使用了精确查询和模糊查询两种查询方式。在商品信息的排序方面还在做进一步的努力。到目前为止,整体已经完成了各项功能,但是在细节以及有些功能上还有一些小的错误和bug,正在做进一步的完善

    3.数据库中主要信息表(1)用户user表:用于存储用户的用户名、密码、邮箱等各项信息。字段数据类型是否为空解释uidint不为空用户IDunamevarchar不为空用户名emailvarchar不为空邮箱passwdvarchar不为空密码lastlogindatetime不为空上次登录时间 (2) 商品信息goods表:用于存储购物商品的各项信息,方便用户查询修改商品的各项功能。字段数据类型是否为空解释gidInt否商品IDgnamevarchar否商品名numberint否商品编号gphotovarchar否商品描述照片typesvarchar否商品分类producervarchar否商品制造商pricefloat否价格carriagefloat否库存pdatedate否生产日期paddressvarchar否发货地址describedvarchar否商品描述 (3)购物车显示信息shoppingcart表:用于存储用商品的ID、用户ID、商品名等信息。字段数据类型是否为空解释sidInt否商品iduidInt否用户idgidInt否商品idnumberInt否商品编号sdateDatatime否生产日期4.各个模块实现介绍(1)用户登录注册模块:用于实现用户的登录,从数据库中查询用户的信息与前端用户输入的个人信息核对,若是正确,则进行登录提交,进入购物的首页,若是与数据库中个人信息提交有误,进行重新的提交,若说是不存在此用户,则转入注册页面,用户填写个人信息进行提交,将信息存入后天数据库,在根据自己注册的信息进行登录

    购买历史浏览: (5)商品的操作模块:商品的操作包括对于数据库中商品的一般浏览、商品的分类浏览、查询和模糊查询、新商品的插入到数据库中等操作,这一部分的操作有一部分是涉及的是数据库中管理员的操作,但是没有对其单独的设计新的界面用于管理。但是基本的各项功能都已经基本实现。用户查询操作: 用户添加商品操作: 5.代码功能模块详解1、购物网站的数据采用了MySQL来存储数据,数据库连接代码如下所示:

    public class DBConnection {	
    private final String Driver = "com.mysql.jdbc.Driver";
    	private final String URL = "jdbc:mysql://localhost:3306/onlineshopping?characterEncoding=utf8&useSSL=true";	private final String USER = "root";	private final String PASSWORD = "mzc277171";	
    	private Connection conn = null;	public DBConnection() throws SQLException {		try {		
    		Class.forName(Driver);		} catch (ClassNotFoundException e) {			e.printStackTrace();		}		this.conn = DriverManager.getConnection(URL, USER, PASSWORD);	}	public Connection getConnection() {		return conn;	}	
    		public void close() {		
    		if (this.conn != null) {		
    			try {				
    			this.conn.close();		
    				} catch (SQLException e) {			
    					e.printStackTrace();			
    				}
    				 } 
    		}
    	}
    
    			当中,数据库用户名为root,密码为19950724,数据库驱动Driver需要下载到本地然后导入工程中。这样,所有的数据库操作就可以通过getConnection()函数来获得同一个链接对象了。2、为了方便传输数据以及数据存储,需要为各对象建立实体。如已购买商品AlreadyBuy,包含如下五个属性,以及相应的get和set方法。// 主键	private int aid;	// 用户id	private int uid;	// 商品id	private int gid;	// 购买的商品数量	private int number;	// 购买时间	private String buyTime;相应的还有:商品Goods,购物车Shoppingcart,已购买AlreadyBuy,拥有的属性与数据库中相应表的元素相同,可参考下边对数据库的介绍。3、每个实体都有相应的数据库操作类,用来向数据库进行增删查改操作,限于篇幅,以下只列出购物车ShoppingCart的操作类
    

    public class ShoppingCartDaoImpl implements ShoppingCartDao {
    private Connection conn = null; private PreparedStatement pstmt = null; public ShoppingCartDaoImpl(Connection conn) { this.conn = conn; } //向购物车添加商品 @Override public boolean addGoods(int uid, int gid, int number) throws Exception {//实现部分} //删除购物车中的商品 @Override public boolean deleteGoods(int uid, int gid, int number) throws Exception {if (!"".equals(message)) { int sid = Integer.valueOf(message.split("&")[0]); int goodsCount = Integer.valueOf(message.split("&")[1]); if (goodsCount < number) { return false; } else if (goodsCount == number) { String sql = “delete from shoppingcart where sid=?”; pstmt = this.conn.prepareStatement(sql); pstmt.setInt(1, sid); } else { String sql = “update shoppingcart set number=? where sid=?”; pstmt = this.conn.prepareStatement(sql); pstmt.setInt(1, goodsCount - number); pstmt.setInt(2, sid); } result = pstmt.executeUpdate(); pstmt.close(); } if (result == 1) { return true; } return false; } } //获取购物车中的所有商品 @Override public List getAllGoods(int uid) throws Exception { pstmt = null; ResultSet rs = null; List scList = null; String sql = “select * from shoppingcart where uid=?”; pstmt = this.conn.prepareStatement(sql); pstmt.setInt(1, uid); rs = pstmt.executeQuery(); ShoppingCart sc; scList = new ArrayList(); //检查指定用户购物车中是否含有指定商品,如果有则返回购物车id和商品数量,否则返回空 @Override public String getDesignateGoodsMs(int uid, int gid) throws Exception { ResultSet rs = null; String sql = “select * from shoppingcart where uid =? and gid=?”; pstmt = this.conn.prepareStatement(sql); pstmt.setInt(1, uid); pstmt.setInt(2, gid); rs = pstmt.executeQuery(); if (rs.next()) { return rs.getString(“sid”) + “&” + rs.getInt(“number”); } return “”; } 通过该类的中介操作,就可以很简单地完成数据库中购物车表的各种操作。当中,为了让编程更趋于规范化,ShoppingCartDaoImpl是继承于自定义接口ShoppingCartDao的。public interface ShoppingCartDao { // 为指定id用户添加购物车内商品 public boolean addGoods(int uid, int gid, int number) throws Exception; // 为指定id用户删除购物车内商品 public boolean deleteGoods(int uid, int gid, int number) throws Exception; // 为指定id用户查询购物车所有商品 public List getAllGoods(int uid) throws Exception; // 为指定id用户查询指定商品的数量 public String getDesignateGoodsMs(int uid, int gid) throws Exception; // 为指定id用户支付商品 public boolean payGoods(int uid, int gid, int number) throws Exception; // 位指定id用户支付所有商品 public boolean payAllGoods(int uid) throws Exception;}

    4、有了前面的基础后,首页index.jsp就可以方便地呈现商品列表了。通过向GoodsDao调用getAllGoods()函数查询所有商品,实际是向数据库中的Goods表查询数据。此外,因为在很多页面中页面头部head是不变的,所以可以将头部信息单独写成一个head.jsp文件,在需要的地方再通过<jsp:include page=“jsp/head.jsp”></jsp:include> 语句导入即可,这样可以增强系统复用性与可维护性。5、head.jsp页面的bdoy部分代码如下所示。因为当用户登录时,会向session中写入用户名与用户编号,已此来识别用户。所以head.jsp页面会去检测当前session中是否含有用户名uname与用户编号uid,如果有,头部将显示用户名,否则将显示“登录或注册”等字样。 5、商品详情页goodsDescribed.jsp的body部分代码如下所示。可以看到,当用户提交订单时,页面是将所要购买商品的gid和购买数量buyNumber传向jsp/addToCart.jsp页面处理的,这样就将数据呈现与数据处理两项操作分隔开了。而addToCart.jsp再来调用ShoppingCartDao类来进行数据处理。其他的页面,比如购物车列表,已购买商品等页面,也是通过调用相应的dao类来进行数据呈现的,限于篇幅后边就不再赘述。6、用户注册页面login.jsp的body部分如下所示。可以看到表单中每一项信息都需要通过合法性验证,比如用户名字符类型,密码位数,邮箱地址格式等。而表单信息是传向LoginServlet类的,由其再来数据处理,如果注册成功,就将页面重定向到首页,否则再返回注册页面提示注册失败。 7、通过JSP技术的Filter过滤器技术,可以对每一个ServletRequest请求进行过滤。所以,我建立了一个登陆过滤器类LoginFilter,对用户的每一个请求进行检测。这样,当用户未登录或者登陆了不过session过期两种情况下,如果用户想访问个人信息页面、购物车页面、已购买历史页面等敏感信息,都会将请求拦截,提示用户需要先登录。如果用户已登录,则不会有任何影响。@WebFilter(description = “登录过滤器”, filterName = “loginFilter”, urlPatterns = { “/" }, initParams = { @WebInitParam(name = “loginPage”, value = “login.jsp”) })public class LoginFilter implements Filter {//过滤部分}此外,我们知道,并不是每种字符编码都支持中文字符,所以有时候就会造成页面乱码现象。所以一般来说,都需要将页面格式设为支持中文字符的UTF-8格式,所以也需要建立一个字符过滤器类EncodingFilter类,将请求request与响应response设为UTF-8格式@WebFilter(description = “字符编码过滤器”, filterName = “encodingFilter”, urlPatterns = { "/” }, initParams = { @WebInitParam(name = “ENCODING”, value = “UTF-8”) })public class EncodingFilter implements Filter {//编码过滤部分}8、为了保护用户信息,需要为用户的Session设定一个过期时间。在配置页面Web.Jsp中,将Session过期时间设为了三十分钟。 30

    六.实验心得

    			本次课程设计是关于前端的java web,相比较与之前的各项课程设计的内容大有不同。Java web的课程设计更加注重对于整体项目的布局认识,前端的静态的HTML的布局到Css的修饰再到配合javascript实现诸多的校验功能,再到使用jsp连接后端,以及数据库的设计连接与使用。虽然是一次简单的课程设计,却又将java web的基本的简单框框架都予以实现,从整体上更加契合项目的开发。是一次综合性的考验
    

    从专业知识的角度:首先我学会对于整体项目的开发的完整控制。前后端的合理搭配。在开发的过程中我使用软件开发过程中的增量模型。首先以登录注册模块开始。把他当做一个基础和突破。先做登录注册的前端页面以及jsp的控制,之后写了有关登录注册的数据库部分和javabean部分。最后将前端的登录注册页面也后端的数据库部分连接起来。实现了从前端控制后端的数据库。在打通了登录注册的前后端的逻辑之后。在此之上进行了增量开发。实现了系统中的购物模块,信息的管理模块,以及购物车,购物历史等部分的内容。

    从认知方面:在开发过程中也深刻的认识到了自己的不足,看到了自己与诸多同学之间的差距。在专业知识方面,对于jsp获取前端的数据的部分知识的掌握还有欠缺。在使用java代码处理数据库的时候很多的代码是类似的,但是没有对其进行代码的抽象与多次调用。在系统代码的冗余上有较大的的进步空间。其次,在开发中由于自己的审美不是那么的好,虽然前端的页面和后端的连接已经数据的处理都已经基本完后了。但是,界面的美观度和使用舒适度还有很大的进步空间。同时,课程设计的过程不单单是一个检验学习成果的过程,更是一个利用两周的时间对于相应课程的知识查漏补缺,以及知识的深化升华的过程。课设查阅资料的时候也更加全面广泛的了解了java web的诸多的知识

    。之前的课本知识总是给人一种碎片化的感觉,诸多的知识都是学了基础,但是又没有将其升华起来。但是课程设计正好弥补了这个问题。将所有知识进行了串接。在查询资料的同时也深感计算机java web知识的更新换代速度之快。很多的知识在一出现的一段时间内可能很火,但是在经过一段不长的时间之后就立马会有更加新的,前沿的知识出现。因此,在计算机前端的学习中我们不仅仅是要学习基本知识,更要懂得时刻追溯技术的前沿,时刻学习,不能止步。在掌握java web基础的知识之后,更多的尝试学习前沿的知识。注重开发的实践。总体来说本次的java web程设计从整体上独立完成了一个系统的开发。为之后多项专业课的学习打下了坚实的基础,也是一个检验自己前端HTML、CSS、javasvript 后台的java与数据库知识掌握程度的机会,在此次课程设计中收获颇丰,希望自己能够在之后的更多的课程设计中吸取本次课设的经验和教训。珍惜每一次课设的机会。

    部分页面展示

    引导页面

    在这里插入图片描述

    首页

    在这里插入图片描述
    在这里插入图片描述

    购物

    在这里插入图片描述

    登录

    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 相信很多人在socket编程学习过程中,都会遇到类似的web服务器的设计案例,可是对于刚接触socket的新手来说,往往难以迈出第一步,于是在此分享一个多线程的web服务器代码(参考计算机网络课程的代码框架),便于各位...

    相信很多人在socket编程学习过程中,都会遇到类似的web服务器的设计案例,可是对于刚接触socket的新手来说,往往难以迈出第一步,于是在此分享一个多线程的web服务器代码(参考计算机网络课程的代码框架),便于各位网友参考学习使用!

     

    一、理解多线程

    多线程是这样一种机制,它允许在程序中并发执行多个指令流,每个指令流都称为一个线程,彼此间互相独立。

    线程又称为轻量级进程,它和进程一样拥有独立的执行控制,由操作系统负责调度,区别在于线程没有独立的存储空间,而是和所属进程中的其它线程共享一个存储空间,这使得线程间的通信远较进程简单。

    多个线程的执行是并发的,也就是在逻辑上同时,而不管是否是物理上的同时。如果系统只有一个单核CPU,那么真正的同时是不可能的。不过,由于CPU的处理速度非常快,用户感觉好像自己的程序连续运行一样。

    多线程和传统的单线程在程序设计上最大的区别在于,由于各个线程的控制流彼此独立,使得各个线程之间的代码是乱序执行的

    二、案例需求

    以JDK为开发工具,利用Socket通信机制实现一个多线程的WEB服务器,该服务器具有以下功能:

    1. 能够并行服务于多个请求。
    2. 对于每个请求,显示接收到的HTTP请求报文的内容,并产生适当的响应(若找到用户请求对象,则返回该对象。否则发送一个包含适当提示信息的响应消息,从而可以在浏览器窗口中显示差错信息。

    三、代码部分

    
    
    import java.io.*;
    import java.net.*;
    import java.util.*;
    
    public final class WebServer {
    	public static void main(String argv[]) throws Exception {
    		int port = 6666;//定义端口号
    		ServerSocket welcomeSocket = new ServerSocket(port);
    		while (true) {
    			Socket connectionSocket = welcomeSocket.accept();
    			HttpRequest request = new HttpRequest(connectionSocket);
    			Thread thread = new Thread(request);
    			thread.start();
    		}
    	}
    }
    
    final class HttpRequest implements Runnable {
    	final static String CRLF = "\r\n";
    	Socket socket;
    
    	public HttpRequest(Socket socket) throws Exception {
    		this.socket = socket;
    	}
    
    	public void run() {
    		try {
    			processRequest();
    
    		} catch (Exception e) {
    			System.out.println(e);
    		}
    	}
    
    	private void processRequest() throws Exception {
    		InputStream is = socket.getInputStream();
    		DataOutputStream os = new DataOutputStream(socket.getOutputStream());
    
    		BufferedReader br = new BufferedReader(new InputStreamReader(is));
    		String requestLine = br.readLine();
    		System.out.println();
    		System.out.println(requestLine);
    		String headerLine = null;
    		while ((headerLine = br.readLine()).length() != 0) {
    			System.out.println(headerLine);
    		}
    		
    		// 从请求行中提取出文件名
    		StringTokenizer tokens = new StringTokenizer(requestLine);
    		tokens.nextToken(); // 跳过method
    		String fileName = tokens.nextToken();
    		fileName = "." + fileName;//构造请求文件名
    		
    
    		FileInputStream fis = null;
    		boolean fileExists = true;
    		// 判断请求对象是否存在
    		try {
    			fis = new FileInputStream(fileName);
    		} catch (FileNotFoundException e) {
    			fileExists = false;
    		}
    		String statusLine = null;
    		String contentTypeLine = null;
    		String entityBody = null;
    
    		if (fileExists) {// 请求文件存在构造响应的status 和 contentType
    			statusLine = "HTTP/1.1 200 OK" + CRLF;
    			contentTypeLine = "Content-type: " + contentType(fileName) + CRLF;
    		} else {// 请求文件不存在
    			statusLine = "HTTP/1.1 404" + CRLF;
    			contentTypeLine = "Content-type: " + contentType(fileName) + CRLF;
    			entityBody = "<!DOCTYPE html><HTML>" + "<HEAD><TITLE>Not Found</TITLE></HEAD>" + "<BODY>Not Found</BODY></HTML>";
    		}
    		os.writeBytes(statusLine);
    		os.writeBytes(contentTypeLine);
    		os.writeBytes(CRLF);
    		if (fileExists) {
    			sendBytes(fis, os);
    			fis.close();
    		} else {
    			os.writeBytes(entityBody);
    		}
    		os.close();
    		br.close();
    		socket.close();
    	}
    
    	private static void sendBytes(FileInputStream fis, OutputStream os) throws Exception {
    		byte[] buffer = new byte[1024];
    		int bytes = 0;
    		while ((bytes = fis.read(buffer)) != -1) {
    			os.write(buffer, 0, bytes);
    		}
    
    	}
    
    	private static String contentType(String fileName)
    
    	{
                    //根据文件名返回相应的contentType
    		if (fileName.endsWith(".htm") || fileName.endsWith(".html")) {
    			return "text/html";
    		}
    		if (fileName.endsWith(".jpg") || fileName.endsWith(".jpeg")) {
    			return "image/jpeg";
    		}
    		if (fileName.endsWith(".png")) {
    			return "image/png";
    		}
    		if (fileName.endsWith(".css")) {
    			return "text/css";
    		}
    		if (fileName.endsWith(".gif")) {
    			return "image/gif";
    		}
    		if (fileName.endsWith(".png")) {
    			return "image/png";
    		}
    		return "application/octet-stream";
    	}
    
    }

    四、代码测试

    测试时使用浏览器访问localhost:port,本例为127.0.0.1:6666,测试用的文件放在项目根目录即可,如使用eclipse编写的项目则需要将文件放在项目名称的目录下(有bin和src的那个目录)

    测试截图如下

    请求成功时正确返回请求文件

    请求失败时给出提示

    展开全文
  • 【内容和特色】课程设计循序渐进、特色讲法、非常适合自主学习:1、ASP.NET动态网站核心技能系统讲解。2、教学过程贯穿实战案例,边学边用。3、独立项目在技能学完后专门讲解,巩固前面所学全部内容!4、所有代码和...
  • 关于asp web课程设计

    2010-01-04 18:32:07
    本论文主要介绍基于Web的《课程设计》管理系统的研究和设计,并在系统设计中所涉及的技术。进行了模块划分,而后分析了各个模块和流程的具体划分和最后的编程实现,从问题的提出到最后逐步的实现。都一步一步作了...
  • web编程课件(asp)

    2009-12-29 20:27:05
    课程Web编程的基础知识和Web程序开发环境着手,在介绍Web服务器、脚本语言和Web数据库应用的基础上,系统介绍了各种远程数据访问技术、开发方法和应用实例,包括目前流行且实用的ASP和XML等。 本课程尤其注重...
  • 网页程式设计 COSC2430-网络编程 作业1-HTML和CSS作业 第16组成员 Vo Thanh Luan-s3822042 阮敏(Nguyen The Minh)-s3878434 该网站正在使用HTML5和CSS3
  • 经过这两个星期的动态网页制作,我们学习了不少知识,包括对上学期学过的ASP.NET编程的回顾,还有就是对以前掌握很少的数据库操作方面的知识进行了学习。总的来说,我们学会了如何去用ASP.NET程序设计技术开发一个...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 56,296
精华内容 22,518
关键字:

web编程设计课程设计