web服务器有哪些(web服务器程序主要有哪些)

前言

Java Web是指用Java语言来解决相关Web领域的技术总和,一个Web应用程序包括Web客户端和Web服务器两个部分,即基于B/S(浏览器/服务器)架构的应用程序。

一、两端

JavaWEB基础知识大览

1.1 Web客户端

Web客户端通常是指用户机上的浏览器,如微软的IE浏览器或火狐浏览器等。客户端不需要开发任何用户界面,而统一采用浏览器即可。

1.2 Web服务器

Web服务器是一台或多台可运行Web应用程序的计算机,通常我们在浏览器中输入的网站地址,即Web服务器的地址。当用户在浏览器的地址栏中输入网站地址并按回车键后,请求即被发送到 Web服务器。服务器接收到请求后,会返回给用户带有请求资源的响应消息。Java在服务器端的应用非常丰富,如Servl百思特网et、JSP和第三方框架等。

二、两站

2.1 静态网站

早期的Web应用主要是静态页面的浏览,即静态网站。 这些网站使用HTML语言来编写,放在Web服务器上。 用户使用浏览器通过HTTP协议请求服务器上的Web页面,Web服务器处理接收到的用户请求后发送给客户端浏览器显示给用户。工作原理如图:

JavaWEB基础知识大览

2.2 动态网站

用户所访问的资源已不局限于服务器中保存的静态网页。更多的内容需要根据用户的请求动态生成页面信息,即动态网站。 这些网站通常使用HTML语言和动态脚本语言(如JSP、ASP或PHP等)编写,并将编写后的程序部署到Web服务器中。 由Web服务器处理动态脚本代码并将其转换为浏览器可以解析的HTML代码,最后返回客户端浏览器显示给用户,其工作流程如图:

JavaWEB基础知识大览

三、两结构

3.1 C/S结构

客户端则需要安装专用的客户端软件。如图所示:

JavaWEB基础知识大览

3.2 B/S结构

在B/S结构中客户端不需要开发任何用户界面,而统一采用IE或火狐等浏览器。通过Web浏览器向Web服务器发送请求,由Web服务器处理并将处理结果逐级传回客户端,如图所示。

JavaWEB基础知识大览

内置对象

1.Request对象
Request对象是javax.servlet.http.HttpServletRequest类的实例。代表请求对象,主要用于接受客户端通过HTTP协议连接传输到服务器端的数据。比如表单中的数据、网页地址后带的参数等。
2.Response对象
Response对象是javax.servlet.http.HttpServletResponse类的实例。代表响应对象,主要用于向客户端发送数据。
3.Out对象
Out对象是javax.servlet.jsp.JspWriter类的实例。主要用于向客户端浏览器输出数据。
4.session对象
Session 对象是javax.servlet.http.HttpSession类的实例。主要用来保持在服务器与一个客户端之间需要保留的数据,比如在会话期间保持用户的登录信息等,会话状态维持是Web应用开发者必须面对的问题。当客户端关闭网站的所有网页或关闭浏览器时,session对象中保存的数据会自动清除。由于Htp协议是一个无状态协议,不保留会话间的数据,因此通过session对象扩展了htp的功能。比如用户登录一个网站之后,登录信息会暂时保存在session对象中,打开不同的页面时,登录信息是可以共享的,一旦用户关闭浏览器或退出登录,就会清除session对象中保存的登录信息。
5.Application对象
Application对象是javax.servlet.ServletContext类的实例。主要用于保存用户信息,代码片段的运行环境;它是一个共享的内置对象,即一个容器中的多个用户共享一个application对象,故其保存的信息被所有用户所共享。
6.PageContext对象
PageContext对象是javax.servlet.jsp.PageContext类的实例。用来管理网页属性,为JSP页面包装页面的上下文,管理对属于JSP中特殊可见部分中已命名对象的访问,它的创建和初始化都是由JSP容器来完成的。
7.Config对象
Config对象是javax.servlet.ServletConfig类的实例。是代码片段配置对象,表示Servlet的配置。
8.Page(相当于this)对象
Page对象是javax.servlet.jsp.HttpJspPage类的实例。用来处理JSP网页,它指的是JSP页面对象本身,或者说代表编译后的servlet对象,只有在JSP页面范围之内才是合法的。
9.Exception对象
Exception对象是java.lang.Throwable类的实例。处理JSP文件执行时发生的错误和异常只有在JSP页面的page指令中指定isErrorPage=“true”后,才可以在本页面使用exception对象。
复制代码

四、JavaBean

4.1 JavaBean的产生背景

在JSP网页开发的初级阶段并没有框架与逻辑分层概念,需要将Java代码嵌入到网页中处理JSP页面中的一些业务逻辑,如字符串处理和数据库操作等,其开发流程如图所示。

JavaWEB基础知识大览

4.2 JavaBean的作用

如果使HTML与Java代码相分离,将Java代码单独封装成为一个处理某种业务逻辑的类。然后在JSP页面中调用此类,则可以降低HTML与Java代码之间的耦合度,并且简化JSP页面,提高Java程序代码的重用性及灵活性。这种与HTML代码相分离,而使用Java代码封装的类就是一个JavaBean组件。 在Java Web开发可以使用该组件来完成业务逻辑的处理,应用JavaBean与JSP组合的开发模式如图所示。

JavaWEB基础知识大览

4.3 JavaBean的应用

JavaBean是用Java语言所写成的可重用组件,其应用十分广泛,可以应用于系统的很多层中,如PO、VO、DTO和POJO等。

五、Servlet

用户通过单击某个链接或者直接在浏览器的地址栏中输入URL来访问Servlet,Web服务器接收到请求后,并不是将请求直接交给Servlet容器。Servlet容器实例化Servlet,调用Servlet的一个特定方法( service() ),并产生一个响应。这个响应由Servlet容器返回给Web服务器,Web服务器包装这个响应,以HTTP响应的形式发送给Web浏览器。整个过程如图:

JavaWEB基础知识大览

六、如何让服务器知道你来过?

6.1 Cookie技术

Cookie的作用:通俗地说就是当一个用户通过HTTP协议访问一个服务器百思特网的时候,这个服务器会将一些Key/Value键值对返回给客户端浏览器,并给这些数据加上一些限制条件,在条件符合时这个用户下次访问这个服务器的时候,数据又被完整地带回给服务器。 这个作用就像你去超市购物时,第一次给你办张购物卡,这个购物卡里存放了一些你的个人信息,下次你再来这个连锁超市时,超市会识别你的购物卡,下次直接购物就好了。当初W3C在设计Cookie时实际上考虑的是为了记录用户在一段时间内访问Web应用的行为路径。由于HTTP协议是一种无状态协议,当用户的一次访问请求结束后,后端服务器就无法知道下一次来访问的还是不是上次访问的用户,在设计应用程序时,我们很容易想到两次访问是同一人访问与不同的两个人访问对程序设计和性能来说有很大的不同。例如,在一个很短的时间内,如果与用户相关的数据被频繁访问,可以针对这个数据做缓存,这样可以大大提高数据的访问性能。Cookie的作用正是在此,由于是同一个客户端发出的请求,每次发出的请求都会带有第一次访问时服务端设置的信息,这样服务端就可以根据Cookie值来划分访问的用户了。

JavaWEB基础知识大览

@WebSe百思特网rvlet("/CookieTest")
public class CookieTest extends HttpServlet {
	private static final long serialVersionUID = 1L;
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		Cookie[] cookies = request.getCookies();
		
		PrintWriter out = response.getWriter();
		
		if(cookies!=null){
			out.println("上次访问的时间是:");
			for (Cookie cookie : cookies) {
				if("lastTime".equals(cookie.getName())){
					long lastTime = Long.parseLong(cookie.getValue());
					Date date = new Date(lastTime);
					out.println(date.toLocaleString());
				}
			}
		}else{
			out.println("你是第一来");
		}
		
		Cookie cookie = new Cookie("lastTime", String.valueOf(System.currentTimeMillis()));
		//给cookie设置一些信息
		//cookie.setMaxAge(500); //有效期
		//cookie.setPath(uri);
		//服务器端给客户端一个Cookie
		response.addCookie(cookie);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}
}
复制代码

解码与编码(与Cookie无关,只是解决乱码的一种方式)

//传中文,避免乱码。可以进行编码
Cookie cookie = new Cookie("lastTime",URLEncoder.encode("尚", "utf-8"));
//取出Cookie值,需要解码
URLDecoder.decode(cookie.getValue(),"utf-8");
复制代码

6.2 Session技术

为什么需要Session?前面已经介绍了Cookie可以让服务端程序跟踪每个客户端的访问,但是每次客户端的访问都必须传回这些Cookie,如果Cookie很多,这无形地增加了客户端与服务端的数据传输量,而Session的出现正是为了解决这个问题。 同一个客户端每次和服务端交互时,不需要每次都传回所有的Cookie值,而是只要传回一个ID,这个ID是客户端第一次访问服务器的时候生成的,而且每个客户端是唯一的。这样每个客户端就有了一个唯一的ID,客户端只要传回这个ID就行了,这个ID通常是NANE为JSESIONID的一个Cookie。

JavaWEB基础知识大览

一个浏览器去服务器租房子,服务器记录一下浏览器的行为和数据,然后给了浏览器一把房间的钥匙 然后,每次浏览器可以使用自己的钥匙去打开自己的房间,使用房间的所有东西。(当然,你不能去开别人的房间,何况也打不开)


七、上下文

7.1 SeveletContext或者ApplicationContext的由来

浏览器想锻炼身体,愉悦心情。服务器心想我不能给你们每一个人的房间增加一套体育设备吧,那我的经济压力多大。服务器想了想,决定建设一个公开场所,体育馆,所有浏览器都可以使用这些共享资源。

@WebServlet("/SessionTest1")
public class SessionTest extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		out.write("Session的ID为:");
		// 获取 Session 
		HttpSession session = request.getSession();
		out.write(session.getId());
		session.setAttribute("name", "shang");
		//设置当前会话多久结束,单位秒。如果设置的值为零或负数,则表示会话将永远不会超时。常用于设置当前会话时间。
//		session.setMaxInactiveInterval(1);
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}
}
复制代码
@WebServlet("/SessionTest2")
public class SessionTest2 extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		
		HttpSession session = request.getSession();
		//移除session的数据
		session.removeAttribute("name");
		//手动注销当前会话
		session.invalidate();
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}
}
复制代码

7.2 Servlet上下文

运行在Java虚拟机中的每一个Web应用程序都有一个与之相关的Servlet上下文。Java Servlet API提供了一个ServletContext接口用来表示上下文。在这个接口中定义了一组方法,Servlet可以使用这些方法与它的Servlet容器进行通信,例如,得到文件的MIME类型,转发请求,或者向日志文件中写入日志消息。 ServletContext对象是Web服务器中的一个已知路径的根。 比如,Servlet上下文被定位于http://localhost:8080/ch02。以/ch02请求路径(称为上下文路径)开始的所有请求被发送到与此ServletContext关联的Web应用程序。再比如,我们平常使用的http://localhost:8080/。以/请求路径(称为上下文路径)开始的所有请求被发送到与此ServletContext关联的Web应用程序。

JavaWEB基础知识大览

ServletContext: 这个是来自于servlet规范里的概念,它是servlet用来与容器间进行交互的接口的组合,也就是说,这个接口定义了一系列的方法,servlet通过这些方法可以很方便地与自己所在的容器进行一些交互。在一个应用中(一个JVM),servlet容器可以有多个,而所有的servlet容器共享一个ServletContext。

JavaWEB基础知识大览

八、两个时代

8.1 Model1时代

最初的JSP开发模式为Model 1模式:JSP JavaBean

JavaWEB基础知识大览

8.2 Model2时代

慢慢演变成了Model 2模式:JSP Servlet JavaBean

模型2符合MVC架构模式,MVC即模型-视图-控制器(Model-View-Controller)。

  • 模型代表应用程序的数据以及用于访问控制和修改这些数据的业务规则。当模型发生改变时,它会通知视图,并为视图提供查询模型相关状态的能力。同时,它也为控制器提供访问封装在模型内部的应用程序功能的能力。
  • 视图用来组织模型的内容。它从模型那里获得数据并指定这些数据如何表现。当模型变化时,视图负责维护数据表现的一致性。视图同时将用户的请求通知控制器。
  • 控制器定义了应用程序的行为。它负责对来自视图的用户请求进行解释,并把这些请求映射成相应的行为,这些行为由模型负责实现。在独立运行的GUI客户端,用户的请求可能是一些鼠标单击或是菜单选择操作。在一个Web应用程序中,它们的表现形式可能是一些来自客户端的GET或POST的HTTP请求。模型所实现的行为包括处理业务和修改模型的状态。根据用户请求和模型行为的结果,控制器选择一个视图作为对用户请求的响应。如图所示:
JavaWEB基础知识大览

JavaWEB基础知识大览

九、文件的上传下载

9.1 文件的上传

  1. 导入jar包commons-io.jar 与commons-fileupload.jar
  2. 表单一定要标记enctype="multipart/form-data"

								
							
相关推荐

服务器操作系统有哪些(域名服务器端口号)

服务器操作系统有哪些(域名服务器端口号)什么是web?web(World Wide Web)即全球广域网,也称为万维网,它是一种基于超文本和HTTP的、全球性的、动态交互的、跨平台的分布式图形信息系统。是建立在Internet上的一种网络服务,为浏览者在Internet上查找和浏

聚焦金翎盛典,为《诛神web》投票赢神秘大奖

2011年“金翎奖”评选活动,在全国5000万热情游戏玩家们关注下,目前已经火爆拉开了序幕!8月31日-10月26日,广大玩家们为当今最炙手可热的网页游戏大作《诛神web》投票,将有机会获得时尚手机、充值卡、游戏虚拟道具等超级丰厚的奖品!如果你是《诛神web》的忠实粉丝,那就快快为《诛神web》投上...

《坦克世界》推出WEB商城 坦克大促销

年度战争网游巨作《坦克世界》,在推出0.7.1新版法兰西龙骑兵以及法系坦克之后,再次为国服1000万坦克玩家带来了精彩好礼。全新的《坦克世界》WEB商城即将全面上线,玩家期盼已久的游戏道具、坦克等将在WEB商城大促销,更有各种限时限量的豪华礼包等你抢购!此外,新版中首次推出的黄金59坦克、中国62式...

《凡人修仙传web》老玩家回归享豪礼

《凡人修仙传web》的跨服战版本即将更新,斗法大会不再局限于单服,而本来服务器的王者,将要迎来其他服强者的挑战,这是一场赌上荣誉的战争。新版本除了跨服战的重头戏外,针对以往不合理的设置也做了调整,规则也会更简单理解,而在功能调整之余,也充分保留了原有的游戏玩法,相信即使您已经有好几周没上游戏,依然不...

Firefox在欧洲受宠 德国1/4网民使用火狐

  网络分析机构Web Side Story近日发布的Firefox统计情况显示,相比于北美等其他地区,欧洲的用户更青睐于Firefox。  另一家网络分析机构OneStat此前的数据显示,Firefox在德国的份额已高达39%,美国也有近16%。Web Side Story的Geoff Johns...

《CHIP新电脑》Web2.0--互联网的下一波

  今天的互联网还是昨天的互联网吗?有分析家指出,在互联网的下一波中,一个新的方向也是未来的机会,那就是Web 2.0。于是,Web 2.0这一整套代表互联网未来的全新概念逐渐浮出了水面。不过,Web 2.0在国内外已经不仅仅是停留在概念上了,有越来越多的互联网公司开始关注、采用Web 2.0的技术...

猫扑发力无端网游《猫游记》大规模公测

  Donews8月10日消息 10日国内第一人气社区猫扑正式进入休闲网游市场,由其开发的无客户端大型网游《猫游记》开始大规模公测,此前有消息称猫扑曾洽谈代理著名web网游ogame。休闲类游戏则根本无客户端可言,通常是服务器端进行简单的数值刷新完成全部游戏过程。  《猫游记》该算是在这方面迈出比较...

“双子网游”《梦幻骑士》 网页全新玩法受宠

  “双子网游”《梦幻骑士》,火爆的“留档点测”已经开放了一定时间,精彩的内容让大家意犹未尽!尤其是其最引人入胜的“双子网游”系统,更是吸引了无数玩家的关注,当“留档点测”进行到今天,已经有无数玩家在网页游戏中玩的热火朝天!  当前的“双子网游”《梦幻骑士》中,很多玩家都沉浸在了web端网页游戏的乐...

《仙境传说2》因技术问题延期首测 遭玩家炮轰图

原定于8月31日进行在韩首次内测的新版《仙境传说2》因暂时的超负荷导致Web服务器当机、官网登陆困难,最终将测试日期延期至9月1日。《仙境传说2》官方为延期事件向玩家们道歉,但是得到的却是数百条愤怒的回复。至此,多灾多难的《仙境传说2》处境异常尴尬,让人想起“三流网游”之言论。之前《仙境传说2》已进...

Web荣誉出品 《九天仙梦》2011金翎奖全民精选

Web荣誉出品,2011年全民精选仙侠巨作4399《九天仙梦》凭借唯美的背景画面,恢弘磅礴的东方仙侠斗法场景以及细腻深刻的剧情玩法深受玩家的喜爱;借助时下最高端的web数据输出技术,4399九天仙梦还将魔法技能,角色效果,动态场景渲染得异常精彩。最丰富的古装战斗玩法,最震撼的游戏视觉体验,知名团队荣...

盒子游戏,游戏玩家专属个性阅读社区


©CopyRight 2010- 2020 BOXUU.COM Inc All Rights Reserved

鄂公网安备 35020302000061号- 鄂ICP备2020015574号-1