学习web的总结

来源:互联网 发布:复古美颜相机软件 编辑:程序博客网 时间:2024/05/22 06:39

Html,做web开发的基础中的基础,就是用来展示页面的语言,它由服务器端生成,并传送至客户端的浏览器,由浏览器解析成我们平常看到的一张张页面。Html也是我学到的第一个标记性的语言,即网页上的每一个组件(按钮,文本框,超链接,表格)在html中就是一个标记元素。精通html还是非常有必要的,它也是css的基础。

 

Servlet,服务器的生命价值所在,没有Servlet,服务器就没有对外提供服务的基础设施。一个Servlet不能够单独运行,只有放到web容器中被容器自动装载,自动创建实例,自动调度运行。每个Servlet实例都有自己的生命周期,当该Servlet所对应的请求路径在服务器周期中第一次被访问时,服务器会执行如上的三个“自动”过程,也就是这个Servlet生命周期的开始,InitServletConfig config)方法会自动调用。每有用户请求这个路径时,都会自动调用其中的serviceHttpServletRequest request,HttpServletResponse response)方法,并根据客户端的发送请求的方法(Post/Get)进一步选择是用doPost()方法还是doGet()方法处理,达到分流的效果。Web容器也将自动创建requestresponse对象作为参数传给此方法,Servlet利用这两个对象达到与web容器通信的目的,其中request中已封装好客户端请求的各种数据,response可以说是一个空对象,等待Servlet来填充响应信息,返回给容器。当服务器的生命周期结束时,也就是Servlet生命周期结束的时候,destroy()方法会自动调用。由于大多网站是对所有用户开放的,并发是我们不得不考虑的一个因素。Web容器采用多线程来应对并发请求。具体到Servlet中,每有一个请求到达一个Servletweb容器就会自动创建该Servlet的一个实例来处理请求,能够有效避免线程安全问题。

 

如果说html是纯静态的,Servlet中用PrintWriter输出的页面是纯动态的,那么jsp就是这两者的有效结合。通过将java代码(动态)嵌入到html(静态)页面中来获得这种效果。Jsp的运行过程如下:当用户的请求路径正对应某个jsp时,jsp引擎会首先检查jsp的语法,通过后将其转化为一个Servlet文件。原来在jspjava代码中的脚本段也转化为Servlet中流程控制语句,而jsp页面中的html标签以及java的表达输出都转化为Servlet中由PrintWriter输出了。所以说一个jsp对应一个Servlet。但是jsp中还有很多的指令和动作我还没涉及过,所以感觉jsp还没有真正掌握,而且jsp究竟是如何转化为Servlet的工作机制也不清楚。再深入一点,Tomcat究竟是如何扮演Servlet容器和jsp引擎这一角色的,它在我们看到的一张张页面的背后起到了怎样的指挥棒的作用,我觉得还是有必要了解一下。

 

现在再来看看客户端浏览器接收到的html数据在服务器端的生成方式。1.已存在的html页面。2.ServletPrintWriter输出。3.jsp转化为Servlet,并由PrintWriter输出。

 

即使一个最简单的Web程序,也应该可以分为如下三个功能模块:

 

1.数据模型层,客户端的页面不能只是简单的html标签,也不能只是永远都一样的文字信息。客户会把他们更多的注意力放到动态展示的数据上面。这些数据来源于数据库,所以数据库操作,从数据库获得一列列数据并由一个个对象保存起来是必不可少的。

 

2.视图表现层,web是面向服务的,客户是web程序的直接使用者,他们看到的结果就只有一张张的页面。怎样方便用户,在视图层就要有考究。

 

3.逻辑控制层,这层也是整个web程序的核心,不仅对于客户端传来的不同请求路径采用不同的响应,还根据同一种请求中接收到的不同数据采取不同的方式处理。这层也将数据模型层和视图表现层有机地结合起来。

 

这三个功能模块要尽量相互分离,即在页面中不要写数据操作的代码和过多的业务逻辑代码。在Servlet中只处理业务逻辑,不进行页面的输出,也不操作数据库,只调用由dao提供的接口来获得相关数据。Dao就只是单纯的数据库操作了。这样做大大地降低了各层之间的耦合程度,维护和扩展都很方便。

 

以上几个方面个人觉得在java web开发中起到了特别关键的作用,所以说得多一些。

 

EL+JSTL可以说是jsp的升级,EL可以替代jsp中的表达式输出,且比后者更加简洁,清晰。还可以避免空指针的发生。原因是当在页面中用${attributeName}进行表达输出时,jsp引擎会依次在pagerequestsessionapplication范围内查找是否存在此属性,如果找到第一个,就返回;如果没有找到,就返回空。JSTL可以替代jsp中的脚本段,看起来也很简洁,将这两者完全应用到jsp页面中,使得整个页面代码风格更加统一,也更容易维护。我感觉自己对这方面应用还不熟,所以在平时写jsp时还是用传统的将java代码嵌入到html中的方法。

 

为了增加页面的动态表现力,能让客户与页面进行交互,对javaScript语言的学习就非常有必要,单纯的javaScript最简单也是最典型的应用就是客户端的表单验证。将对数据的检查的程序放到客户端执行,这样不仅使得整个页面动态感增强,还使得客户端的计算能力得到更多的利用,减少了服务器的压力,有那么一点胖客户端的意思了。然而javaScript的最大作用还不仅仅在于此。每当一个页面被加载好以后,就会形成一棵树,根结点是window

树中的每个结点都代表页面中的一个元素,包括输入框,图片,链接,还有空格。这棵树称为文档对象模型(dom)。文档对象模型是每个浏览器都内置了的。javaScript是一种可以对此进行操作的脚本语言,当然也只是一种,至少VBScript也可以操作。通过对文档对象模型的操作,不仅有效地减轻服务器端业务方面的负担,可以使页面产生非常绚丽的动态效果。

不仅仅是页面,javaScript还可以对浏览器窗口进行操作,对应dom,自然也有bom(浏览器对象模型)有时候子窗口要与父窗口通信,就要利用bom。由于我用得不多,这方面也不

熟练,就不多说了。javaScript还有一个很重要的方面就是事件,可以说javaScript既是基于对象的,也是基于事件驱动的。离开了事件机制,javaScript代码就无从执行了。一个简单的表单验证,也是由用户点提交按钮后激发的,点按钮就是一个事件(onclick或者onsubmit)。我们经常看到某些页面上有一些动起来的元素,如时间显示,这些效果都是由window.onload事件驱动某些函数执行的结果。经常出现这样的情况,看起来天衣无缝的javaScript代码一到测试时就什么都运行不出来,抛开语法错误的情况,八成是事件没处理好。javaScript提供的开发能力还远不止这些,除了基于对象的特性外,我们也能用javaScript编写自己的类和对象,很遗憾,我在这方面还未有过任何经验,也没什么可说的。总之,我感觉javaScript确实很好用,也很强大,是一种开发网页的基础语言。

 

到现在为止,利用上述技术,我们给客户看到页面实现了动态交互。页面能够部分改变,也有了一种部分刷新的样子了,但这仅仅是客户端一方在“胡乱”地玩着这一张被服务器丢弃的html而已。这种部分刷新与服务器端谈不上任何联系。要想实现异步地与服务器通信,并用服务器传来的数据部分刷新当前页面时,Ajax技术闪亮登场。单纯地利用Ajax做最原始的开发,只需记住三步就足够了。1.创建请求对象2.绑定回调函数3.发送异步请求。每一个步骤都对应一个javaScript函数。在回调函数中,就要利用css+div将服务器传来的数据合理地显示在当前页面中,达到部分刷新的效果。Ajax技术应用得非常广泛,我们看到最多的就是注册用户名时,自动提示所输用用名是否已存在。还有我们用搜索引擎时的自动提示功能。

 

Ajax表现出的功能确实精彩,但是我们在实际编写代码时却不那么轻松,每一个Ajax的应用都得重复以上三步,代码量非常大,不利于开发,既然是有规律的,可重用的,必然就存在相关的应用框架。Dwr又走向了我们。由于我刚学框架不久,面对各种各样的框架,底气也就没那么足了。就觉得使用框架这个事,既好又不好。好在它确实方便我们开发web应用程序,我们只需将精力放到业务逻辑上加上做些配置,其它的细节问题框架可以帮我们完成。但正是由于它向我们屏蔽了太多的底层细节,我们完全看不到原理性部分的东西,不利于我们的学习和发展。Dwr,根据我的理解,就是实现了将服务器端的一个类映射为一个js文件,造成使得客户端的javaScript代码能够调用服务器端某个类的一个方法的假象。

 

以前我们开发web项目使用的MVC框架都是自己一点一点搭建起来的,虽然有点辛苦,但还是蛮有成就感的,毕竟现有的web项目大都是自己的劳动成果。自己种的果子永远是最好吃的。在这时,我们又得开始MVC框架(SSH)的学习了,毕竟这是现在的主流框架,学一学还是有必要的。由于struts正在学习中,还是能简单地说出点东西来的,正好也及时巩固一下。就以实现简单的登录应用为例。1.在新建项目中导入struts的类库。2.web.xml文件中配置由struts提供的主控Servlet3.编写一个登录用的ActionForm的子类,编写一个Action并继承struts提供的Action类。重写其中的execute方法,其中execute方法中有个ActionForm类型的参数,强制转型后就可以从中取表单数据。Mapping.findForwardString)方法返回要跳转页面的路径。4.struts-config.xml文件中配置刚才写好的两个类,一个是<form-bean>,一个是<action>5.编写登陆页面和要跳转的页面。步骤大致如上所述。要想具体分析其中原委,还得花另外一番功夫。能力有限,这次就不说了。

 

以上就是我根据自己在这几个月学到的关于web方面知识的一点小结,难免会有缺陷和疏漏,请大家见谅。


 

原创粉丝点击