b/s ( browser/server ,浏览器/服务器)架构
基于http传输协议(超文本传输协议,回忆html的名字:超文本标记语言)
web程序必须要运行在web容器上,如tomcat /jboss/weblogic等
二、http协议
http使用tcp作为它的支撑运输层协议,默认的端口是80(缺省端口)。
超文本传输协议(hypertext transfer protocol,简称http)是应用层协议。http 是一种请求/响应式的协议,即一个客户端与服务器建立连接后,向服务器发送一个请求;服务器接到请求后,给予相应的响应信息。 、
http 请求报文由请求行、请求头部、空行 和 请求包体 4 个部分组成下面对请求报文格式进行简单的分析:
请求行:请求行由方法字段、url 字段 和http 协议版本字段 3 个部分组成,他们之间使用空格隔开。常用的 http 请求方法有 get、post、head、put、delete、options、trace、connect;
get:当客户端要从服务器中读取某个资源时,使用get 方法。get 方法要求服务器将url 定位的资源放在响应报文的数据部分,回送给客户端,即向服务器请求某个资源。使用get 方法时,请求参数和对应的值附加在 url 后面,利用一个问号(“?”)代表url 的结尾与请求参数的开始,传递参数长度受限制。例如,/index.jsp?id=100&op=bind。
post:当客户端给服务器提供信息较多时可以使用post 方法,post 方法向服务器提交数据,比如完成表单数据的提交,将数据提交给服务器处理。get 一般用于获取/查询资源信息,post 会附带用户数据,一般用于更新资源信息。post 方法将请求参数封装在http 请求数据中,以名称/值的形式出现,可以传输大量数据;请求头部:请求头部由关键字/值对组成,每行一对,关键字和值用英文冒号“:”分隔。
请求头部通知服务器有关于客户端请求的信息,典型的请求头有:
user-agent:产生请求的浏览器类型;
accept:客户端可识别的响应内容类型列表;星号 “ * ” 用于按范围将类型分组,用 “ */* ” 指示可接受全部类型,用“ type/* ”指示可接受 type 类型的所有子类型;
accept-language:客户端可接受的自然语言;
accept-encoding:客户端可接受的编码压缩格式;
accept-charset:可接受的应答的字符集;
host:请求的主机名,允许多个域名同处一个ip 地址,即虚拟主机;
connection:连接方式(close 或 keepalive);
cookie:存储于客户端扩展字段,向同一域名的服务端发送属于该域的cookie;
空行:最后一个请求头之后是一个空行,发送回车符和换行符,通知服务器以下不再有请求头;
请求包体:请求包体不在 get 方法中使用,而是在post 方法中使用。post 方法适用于需要客户填写表单的场合。与请求包体相关的最常使用的是包体类型 content-type 和包体长度 content-length。
下面对响应报文格式进行简单的分析:
状态行:状态行由 http 协议版本字段、状态码和状态码的描述文本 3 个部分组成,他们之间使用空格隔开; 状态码由三位数字组成,第一位数字表示响应的类型,常用的状态码有五大类如下所示:
1xx:表示服务器已接收了客户端请求,客户端可继续发送请求;
2xx:表示服务器已成功接收到请求并进行处理;
3xx:表示服务器要求客户端重定向;
4xx:表示客户端的请求有非法内容;
5xx:表示服务器未能正常处理客户端的请求而出现意外错误;
状态码描述文本有如下取值:
200 ok:表示客户端请求成功;
400 bad request:表示客户端请求有语法错误,不能被服务器所理解;
401 unauthonzed:表示请求未经授权,该状态代码必须与 www-authenticate 报头域一起使用;
403 forbidden:表示服务器收到请求,但是拒绝提供服务,通常会在响应正文中给出不提供服务的原因;
404 not found:请求的资源不存在,例如,输入了错误的url;
500 internal server error:表示服务器发生不可预期的错误,导致无法完成客户端的请求;
503 service unavailable:表示服务器当前不能够处理客户端的请求,在一段时间之后,服务器可能会恢复正常;
三、servlet
servlet是javaweb的核心,简单的说就是用java编写的服务器端程序。用户进行一个动态请求(静态请求就是直接请求html )时,实际上是请求—个servlet
web容器将servlet加载到内存 通过init方法进行初始化
service()方法根据请求方法调用对应的处理方法dopost()或doget(),还有一些其他的请求方法doput() dooptions()...但这些方法不常用,并且从安全的角度都是建议屏蔽的。
当server不再需要servlet时(一般当server关闭时),server调用 servlet 的 destroy() 方法。
四、jsp
java server pages是一种静态编码町机和动态编码java混合的技术, 也有说法就是将java代码镶嵌在html上,在jsp之前,servlet作为主体,功能比较强大,设计也很先进,但瑜出 html页面却完全是java的out.print(), 一行一句的输出,对于页面编写和修改来说非常不方便,这才促使sun公司推出jsp。jsp和asp、php类似都是镶嵌型语言。另外补充一下,web容器后动的时候,会将_jsp编译成servlet,也有说法jsp是servlet的升级版。
五、tomcat
java web容器有很多,这里以tomcat为例来说。前面说到,web程序必须运行在web容器上。tomcat就是作为web容器来运行切java web程序的。tomcat是java语言写的,需要jvm作为运行环境。
tomcat的目录结构
bin………………………………可执行程序(脚本),启动停止调试tomcat的一些bat.sh
conf…………………………….配置文件 webx.ml server.xml 等
lib……………………………....tomcat运行需要的jar包
logs…………………………….曰志文件
temp…………………………….临时文件
webapps………………………web 程序(编译后的项目文件)
work…………………………….将jsp文件生成java文件在此目录进行
补充说明一下,tomcat将jsp编译成java文件并不是实时进行的,所以有时候修改了页面,并没有及时生效,这时候我们只需要删除一下work目录下对应的文件即可。
六、java web项目结构
一般来说,我们常说的java项目基本上都是web项目(b/s架构),不是说java不能做c/s程序,实际上java的swing就是画界面的,但是现在c#已经成为画界面最流行的语言,快速,简单,所以越来越少的人用java来做c/s程序开发了。我们主要来说java web项目,下面是最基本的项目结构。
src…………………………….java源码,java文件目录
webcontent/webroot……………项目发布目录
web-inf
lib………………………………….项目需要的jar包
web.xml…………………………web 程序的入口
以上是java web项目的核心结构,实际开发中,搭建项目会比这些复杂,特别是引用框架以后,配置文件的增加,会添加一些新的目录。
七、开发框架
前面提到客户端发起动态请求时,请求到servlet进行处理,然后返回,整个请求处理的工作都是在servlet中处理的,看起来比较简单,每当需要一个不同的请求就写一个servlet,但实际开发的时候如果功能模块比较多,就需要写很多个servlet,并且如果我们想修改一个请求的返回,也必须通过修改java代码 (servlet)的方式来实现。
这样对功能的扩展和维护来说,就比较麻烦了,所以也就推动了很多集成幵发框架的流行,比如webwork,struts,springmvc,jfinal等都是主流的java web开发框架。
使用框架有一个很笼统的优点概述,可以加快开发进程,在类似项目中重用代码将为开发者节省大量的时间和精力.框架为执行繁琐的代码任务提供预建模块。让使用者只关心核心业务的开发,框架帮你屏蔽原有技术跟业务开发无关的各类技术问题。但如果想要深入的了解一个框架,使用的更加熟练,还是需要了解底层的原理,找到其源头也就是servlet。
以springmvc为例简单描述一下工作原理
sprfngmvc主要也是通过dispatcherservlet (servlet调配器,在web_xml中配置)实现了servlet这个接口,又叫前端控制器,来自前端的请求会先到达这里,它负责到后台去匹配合适的handler。dispatcherservlet的主要工作流程如下:
1、 客户端发出http请求给web服务器,web服务器对http请求进行解析,如果匹配dispatcherservlet的请求映射路径(在web.xml中指定),web容器将请求转交给dispatcherservlet.
2、 dipatcherservlet接收到这个请求之后将根据请求的信息(包括url、http方法、请求报文头和请求参数cookie等)以及handlermapping的配置找到处理请求的处理器controller (handler)。
3、 dispatclierservlet 根据 handlermapping 找到对应的handler,将处理权交给handler ( handler将具体的处理进行封装),再由具体的 handleradapter对handler进行具体的调用。
5、handler对数据处理完成以后将返回一个modeandview对象给dispatcherservlet.
6、 handler返回的modelandview只是一个逻辑视图并不是一个正式的视图,di spatchersevlet通过viewresolver将邀辑视图转化为真正的视图view(这句话简单的就是返回一个要返回的页面的相对路径,通过试图解析器转换成具体那个页面)。
7、 dispatcher通过model解析出modeandview中的参数进行解析最终展现出完整的view并返回给客户端。
八、用springmvc编写功能模块
由于框架配置工作量比较大,也需要对各方面的技术有所了解,暂时不做描述。我们简单的说一下实际开发中,如何在现有的框架基础上完成一个功能模块,了解功能的基本流程,以登录为例:
1、首先要有登录入口( jsp页面),在springmvc框架中我们不建议直接 访问jsp页面,所以我们登录页面的访问也是通过后台处理的;
2、编写丨ogin.jsp页面及登录返回页面index.jsp ;
3、编写logincontroller,里面包含两个请求控制方法,一个prelogin(),一个dologin() ,其中prelogin()负责处理请求登录页面的请求(返回到 login.jsp ), dologin()处理登录请求返回到index.jsp。
4. login.jsp中需要通过表单或者ajax进行登录请求。
请求/prelogin业务逻辑处理返回到login.jsp à 输入用户名、密码…
请求/dologin业务逻辑处理,返回登录结果index.jsp。
九、其他基础知识
数据库操作,jdbc/hibernate/mybatis
jsp标签,el表达式,struts标签,c标签等
基本的前端技术css/js/jquery/ajax
以上就是javaweb必备知识点的详细内容。