β

Java Web开发教程——基本思路

从一事无成到仅成一事 94 阅读

思路:

将需求拆解为基本技术的简单组合,再分别实现。

一、基本技能

基础知识

B/S(Browser/Server),就是以浏览器作为用户界面与用户进行交互,逻辑在服务器中进行处理的项目架构

所以B/S项目的基本形式就是:

Http基本流程

与C/S开发不同,B/S项目开发严格遵守“请求-》响应”的循环,任何一个需求的实现,都要拆分成若干个“请求-》响应”的流程组合。

每次“请求-》响应”的基本流程如下:

前端请求怎样发送

Http的请求,在简单项目应用中,可视作包含以下几部分:

先将需求的请求提交部分抽象为以上几部分,即url是什么、用什么方法提交、包括什么参数。再用浏览器标准支持的形式实现。

浏览器提交请求的方式可包括以下几种:

GET请求的参数将包含在url中,格式为

xxx.xx?param1=value1&param1=value2&param3=value3

表示将请求提交到xxx.xx,包含名称为param1的两个参数值和名称为param3的一个参数值。

Http传输

Http传输是通常俗称的前端和后端的分界线。

浏览器负责提交Http请求,通过网络设备,将该请求提交给服务器。此步骤一般不需要自行写程序实现。

可通过浏览器调试工具,查看Http传输的内容。如Chrome点击F12打开的开发工具,或Firefox下的firebugs。

对Http程序的调试,应优先关注传输部分。如果程序运行有误,先通过浏览器调试工具确定提交的请求是否与你预期的相符。如果相符,则基本确定问题出现在后端,如果不相符,则基本确定问题出现在前端。

后端路由

在项目采用的技术范畴下,可将服务器接收到Http请求开始,直到将此请求传递给为了完成该请求而写的逻辑处理单元(如Servlet、Struts的Action、SpringMvc的Controller等)为止,这其中的部分视作“路由”部分。

这部分主要解决的问题是,怎样根据Http请求的内容,将该请求传递给正确的逻辑处理单元。

以Java Web项目为例:

请求发送到服务器后,根据请求url的端口决定交由哪个程序处理,一般会由tomcat或者netty等Java Web服务器监听该端口。根据请求内容,Java Web服务器会根据web.xml的配置,决定由哪些Servlet、Filter等参与处理,一般会将请求配置分发给Struts、Springmvc等框架。

框架会根据请求url中的内容,以及符合该框架要求的配置信息,将请求分发给某个具体实现的Java类。此类为项目开发人员编写的,一般从这个步骤开始,程序的控制权开始由项目开发人员的代码控制。配置方式要解决的问题,就是http请求与Java类的映射逻辑,比如“以.action结尾的并且.前面的部分是login的请求,与LoginAction匹配”。

后端处理——数据绑定部分

在控制权转移到项目开发人员自行编写的特定代码后,仍需要解决如何将http请求中的数据包装为这些代码可以利用的形式的问题。

例如通过Java Web进行开发,必须解决前端传入的param1=value1这些参数,如何在Java程序中使用的问题。

不同的框架有不同的绑定方式,如Struts2的方式是在Action类中找到与参数名称对应的get函数,如请求中有param1=value1,则框架会在该Action程序执行之前,执行setParam1(value1),那么我们可以在这个函数中将value1赋值给某个我们之后可以利用的变量,就可以在我们自己的代码中使用了。

后端处理——逻辑部分

将前端的参数接收到之后,就可以使用当前语言提供的方式,去做特定的逻辑处理。只要参数接收正确,那么这部分的处理与一般的简单Java程序没有区别。

存取数据库

业务类系统的重要部分就是对数据的持久化操作,大部分情况下都利用数据库实现这一需求。

一般存取数据库的基本方法都会在框架层面解决,在开发之前需要了解这些基本方法,需要时直接调用即可。

Java开发一般采用比较严格的Object-Relation-Mapping模式,即每张数据库表都会有一个Java类对应。大部分情况下,此Java类就是标准的Java Bean。因此,这个步骤需要具备的技术基础,就是要解决“给定一个Java Bean,怎样保存到数据库中,怎样更新到数据库中……”这一类的问题

后端处理——视图部分

后端的逻辑处理完成后,大部分情况会生成一个用户界面,反馈给用户。具体到B/S项目开发,就是要生成Html页面以及配套的js、css等内容。

js用于控制前端的逻辑,css用于控制前端样式,这两者一般都是静态的内容,大部分情况下也不会包含在需要逻辑处理的请求中,而是通过html中的script、link等标签,让浏览器另外发送一个资源请求去获取这些文件。

页面显示的内容,通过html表示。而在逻辑处理完成后,通常情况下都会根据逻辑处理的结果,去动态生成html内容。用Java代码生成html内容的方式,将类似于:



print("<html>");<br data-mce-bogus="1">

print("<body>");<br data-mce-bogus="1">

print("<h1>" + title + "</h1>");<br data-mce-bogus="1">

非常繁琐。

因此,采用jsp的形式完成以上内容。

jsp是一种语法类似于html,但支持动态内容生成语法的语言。servlet容器将会把jsp处理成html响应给前端。

在这部分我们需要解决的问题包括:

  1. 上一步的逻辑处理单元处理完成后,将控制流程转移给哪个jsp。例如struts2中,将会通过配置view的方式,将Action函数的返回值与某个jsp文件对应。在springmvc中,可以直接返回jsp路径,也可以通过其它方式配置更复杂的对应关系。
  2. 怎样控制jsp生成html。jsp中类似于html的部分,将会直接生成同样的html。包含动态语法的部分,将会根据规则,计算出应该生成的html。这个计算过程,一般会用到上一步逻辑处理单元的逻辑处理结果。例如

    逻辑处理单元中,根据前台传入的参数,去数据库中读取了一个表示人员信息的对象,在jsp中就有对应的方法去获取这个对象的各项值,并使用。使用的方式最常见的是el表达式,另外也包含jsp标签等内容。

生成html后,容器将负责将此内容响应给客户端浏览器。

另外,也会有一些不生成html内容的流程,如最近比较流行的restful api方案,就会返回一些特定格式的json。但其原理和基本流程是不变的,都是后端通过各种方式,生成各种格式的“字符串”。这些字符串都符合前端使用者(如浏览器)的某些规范,因此可以控制前端使用者的行为。

响应

容器负责将处理结果以http相应的方式发送给前端。此相应一定是和之前的请求对应的。此部分一般也不需要自己写代码负责。

前端显示

如果是浏览器负责前端的显示和交互,则一般会运行html、js、css等几类的文件。而这些文件,是后端生成后响应给前端的。因此,后端通过上面提到的各种方式,控制这几类文件生成后的内容,再将这些内容交给前端,从而控制前端的行为。

前面提到过,在实际开发中,js、css一般都是静态文件,动态生成的部分是html。动态生成的技术主要是jsp。在编写jsp的过程中,要能分析出各种情况下生成的html是什么样子的,从而指导jsp文件的编写。

在了解以上流程后,此部分需要解决的问题就是,什么样的html、js、css,会在浏览器上显示出什么样的内容。

Html为“标记性语言”,基本语法为“标签+属性”。因此,编写html的基本思路为:什么样的需求对应什么样的标签,然后用什么样的属性去控制细节。一定不要背诵所有标签的含义,而是要理解这个思路,并且在用的时候查询即可。

js是一门程序设计语言,与java类似,初期可以互相参考理解。但js的程序设计范式与java不同,因此在后期深入时,要注意与类java语言的区别。另外,js初期的主要应用目的是改变html的内容,这部分主要对应的知识是“js的dom操作”,即“通过什么样的js可以改变某个标签的某项内容”。

前端开发的复杂之处在于,任何一项需求都有很多方式与之对应。而选择的方案如果不当,会在很久以后才会显出弊端,增加了调整的成本。我认为比较重点的原则之一是“语义化前端开发”,即语言要与含义对应,例如想显示一个表格,用table标签也可,用若干个div控制样式也可,但从语义角度讲,我们要一个表格,就一定要用table标签。

案例分析:完成登录功能(待补充)

一、了解需求

能做到完全表述需求的所有流程。是否做到“完全表述”,取决于表述内的所有词汇,是否都属于某个在工程范畴内已经被良好定义的“技能表”或者“词汇表”。如果不能做到,则要不断精化。

例,第一版需求:

输入用户名和密码登录

需要考虑,输入、用户名、密码、登录,这几个词汇,是否都是已经被良好定义的。之所以要强调在“工程”范畴内,是因为我们并不是在做汉语研究,没有必要追溯每个词语的最终源头,而只是在当前的工程知识范围内解释解释即可。如果是良好合作的团队,则以上几个词在要求不太严谨的情况下都不用解释。但如果是新人新团队,则需要在初期建立一定的共识。

输入:这是一个用户的动作。由于做的是web项目,所有的用户界面都由浏览器端完成,其主要实现方式是html+js+css。由于html是标准化很完善的技术,”输入“对应的是哪个标签,应该是技术上的共识,因此不必过多解释。既然是用户界面,那么一定涉及到用户体验设计。由于项目类型是”后台系统“,这一项要求也不是十分严格,采用项目成型的样式库即可。

用户名、密码:具体含义用常识理解即可。这两项

二、形成设计方案

附录:参考知识

作者:从一事无成到仅成一事
做一个高尚的人,一个纯粹的人,一个有道德的人,一个脱离了低级趣味的人,一个有益于人民的人
原文地址:Java Web开发教程——基本思路, 感谢原作者分享。

发表评论