目录
1.页面请求和工作流程
一个Web应用程序一般由客户端程序和服务端程序组成。客户端指用户和浏览器,用户通过浏览器查找所需资源,这些资源位于服务器上。
基本的页面访问处理流程:
1.用户输入网址请求所需资源
2.浏览器把用户请求发送给服务器,客户端与服务端通过HTTP完成具体交互
3.服务器接收客户端请求,查找请求的页面
4.找到用户请求的页面,把资源返回客户端
5.发送响应消息,响应数据流包含状态编码,Content-type,响应消息内容
6.浏览器显示返回结果
2.HTTP中GET和POST方法有什么区别
GET和POST是最常用的两个HTTP请求方法。
GET主要功能是获取服务器端资源信息,并作为响应返回客户端,这些资源可以是HTML页面、图片、文档,如同数据库查询操作,不会影响资源自身状态,删除、修改、新增资源不被允许。
POST方法更强大,除了能获取资源,同时可以向服务器上传数据。
GET主要用来从服务器获取数据,也可以上传数据,但一般不建议采用GET,而是推荐POST,原因有二:
1.使用GET上传数据时,一般将数据添加到URL后面,二者使用"?"连接,变量之间使用"&"连接。而URL长度存在限制,数据量较小,通常在1024byte作用;而POST传递数据通过HTTP请求附件进行,数据量更大,默认无限制
2.GET上传的数据暴露在URL中,尤其在提交一些敏感信息时,存在安全隐患;而POST提交时没有明文显示,对用户不可见,安全性更好。
3.什么是Servlet
如何生成动态页面?一种是采用公共网关接口(Common Gateway Interface,CGI),一种用Perl脚本编写的程序;另一种就是Servlet。
Servlet是采用Java语言编写的服务器端程序,运行于Web服务器中的Servlet容器中。主要功能是提供请求/响应的Web服务模式,生成动态的Web内容,是HTML所不具备的。
Servlet的优点:
1.较好的移植性。无需修改代码可部署到多种不同类型的Web服务器上。
2.执行效率高。CGI每个请求创建一个进程来处理,Servlet每个请求创建一个线程来处理,创建线程比创建进程开销要小,因此相较CGI,Servlet响应时间更短,效率更高。
3.功能强大。Servlet可与Web服务器交互,CGI不能。
4.使用方便。Servlet提供许多有用接口读取和设置HTTP头消息、处理Cookie和跟踪会话状态等。
5.可扩展性强。Servlet具备Java语言的所有优点,健壮、面向对象、易扩展。
Servlet处理客户端请求步骤:
1.用户单击一链接向Servlet发起请求
2.Web服务器收到请求,将其交给相应容器来处理,容器会创建两个对象:HttpServletRequest和HttpServletResponse
3.容器根据请求消息的URL找到对应的Servlet,针对请求创建一个线程,把第2步中两个对象以参数形式传递到线程中
4.容器调用Servlet的service()方法完成对用户请求的响应,service()会调用doPost()和doGet()完成具体响应任务,把生成的动态页面返回给容器
5.容器把响应消息组装成HTTP格式返回给客户端,线程结束,删除第2步的两个对象
问:Servlet与CGI有什么区别
答:Servlet处于服务器进程之中,通过多线程方式运行其service()方法,一个实例可以服务多个请求,实例一般不会被销毁;而CGI对每个请求都产生新的进程,服务完后销毁,效率不如Servlet。
4.doPost()和doGet()如何选择
书上前面讲了一堆,但总结大概就是:
当HTTP请求中method属性为get时,调用doGet()方法;当method属性为post,则调用doPost()方法
5.什么是Servlet的生命周期
Servlet运行在容器中,没有main()方法,生命周期由容器控制。Servlet生命周期存在两个状态:未创建状态和初始化状态,两种状态转换由三个方法控制:
init():用于创建或打开任何与Servlet相关的资源以及执行初始化工作
service():处理客户端传过来请求的方法(GET、POST),将其分发到doGet()和doPost()
destroy():释放任何在init()方法中打开的与Servlet相关的资源。
具体而言,Servlet的生命周期可分为5个阶段:
1)加载:容器通过类加载器使用Servlet类对应文件来加载Servlet
2)创建:通过调用Servlet构造函数创建一个Servlet实例
3)初始化:通过Servlet的init()方法完成初始化工作,只会被调用一次
4)处理客户请求:Servlet创建后,有请求到来,会创建一个线程处理,调用service()方法根据请求的method属性决定调用doGet()方法还是doPost()方法完成具体响应
5)卸载:卸载Servlet之前需要调用destroy()方法,释放占用系统资源,只会被调用一次
6.JSP和Servlet有何异同
同:
JSP可看作一个特殊的Servlet,JSP可以完成的,Servlet都可以完成,如生成动态页面。由于JSP页面最终都要转换为Servlet来运行,因此处理请求的实际上是编译后的Servlet
异:
1)Servlet实现方式是Java中嵌入HTML代码,非常不方便,适合做流程控制、业务处理;而JSP实现方式为在HTML中嵌入Java代码,适合页面展示
2)Servlet没有内置对象,JSP内置对象必须通过 HttpServletRequest 和 HttpServletResponse 以及 HttpServlet对象得到
7.MVC模型
MVC是一种广泛流行的应用模型,目的是实现Web系统的职能分工。
1)模型(业务逻辑层)
表示企业数据和业务逻辑,应用程序的主体部分。业务模型的设计是MVC最主要的核心,MVC把应用的模型按一定的规则抽象出来,抽象的层次很重要,MVC没有提供模型的设计方法,只是告诉设计人员如何组织管理这些模型,便于模型重构和提高重用性。
业务模型还一个重要模型就是数据模型,主要指实体对象的数据持续化,如订单保存到数据库,从数据库获取订单,将这个模型单独列出,所有相关数据库的操作只限制在该模型中
2)视图(表示层)
视图是用户看到的并与之交互的界面,早期就是HTML元素组成的页面,在新式Web应用中,一些新技术层出不穷,包括Adobe Flash、XHTML、XML/XSL等一些标识语言和Web服务
视图功能强大主要表现在两方面:
1:根据客户类型显示信息
2:显示商业逻辑(模型)的结构,不关系信息如何获得何时获得
3)控制器
控制器接收用户的输入并调用模型和视图去完成用户的请求。
MVC的处理过程:
对每一用户的输入请求,控制器接收,决定由哪个模型处理,模型通过业务逻辑层处理处理请求并返回数据,最后控制器用相应的视图格式化模型返回的数据,并通过显示页面呈现给用户
MVC设计结构几个优点:
低耦合性、高重用性和可适用性、较低的生命周期成本、部署快速、可维护性、有利于软件工程化管理
8.Servlet中的forward和redirect有什么区别
为实现程序模块化,Servlet有两种实现跳转的方式:forward和redirect
forward是服务器内部重定向,服务器直接访问目标地址URL,客户端不知道,浏览器地址栏不会显示跳转后的地址,还是原来的地址。过程中用的同一个Request,forward会将信息带到被定向的JSP或Servlet中使用
redirect是客户端的重定向,即客户端浏览器会获取跳转后的地址重新发送请求,因此浏览器会显示跳转后的地址。同时,由于这种方式比forward多了一次网络请求,效率会低于forward方式。注意客户端的重定向可通过设置特定的HTTP头或写js脚本实现
因此当forward满足需求时,尽可能使用forward,但当需要跳转其他服务器上的资源时,必须使用redirect方式
引申:filter的作用?实现什么方法?
filter可以改变一个request并且修改一个response。filter不是一个Servlet,不能产生一个response,但能在一个request到达Servlet前预处理request,也可以离开Servlet处理response。filter其实是一个·Servlet Chaining
一个filter作用包含几个方面:
1)在Servlet被调用之前被截获
2)在Servlet被调用之前检查Servlet Request
3)根据需要修改Request头和Request数据
4)根据需要修改Response头和Response数据
5)在Servlet被调用之后截获
(其实写完还是对filter优点模糊)
9.JSP内置对象
不声明和不创建就可以被使用的一些成员变量
request(请求对象)、response(响应对象)、pageContext(页面上下文对象)、session(会话对象)、application(应用程序对象)、out(输出对象)、config(配置对象)、page(页面对象)、exception(例外对象)
具体描述可查看其他资料,不作展开
10.会话跟踪技术有哪些
开发Web应用程序,经常需要数据共享或在不同页面间传递参数,需要专用的机制来传递和保存这些参数
会话,指从客户端打开与服务器的连接并发出请求到服务器响应客户端请求的全过程。会话跟踪是同一个用户对服务器的连续请求和接受响应的监视,HTTP本身是无状态协议,最好的方法就是使用会话跟踪技术
1)page。代表与一个页面相关的对象和属性
2)request。代表与Web客户端发送的一个请求相关的对象和属性。请求可能跨越多个页面,涉及多个Web组件
3)session。代表与用于某个web客户端的一个用户体验相关的对象和属性,可跨越多个客户端请求
4)application。代表与整个Web应用程序相关的对象和属性,实质是跨越多个Web应用程序,包括多个页面、请求和会话的一个全局作用域
11.什么是Ajax
异步Javascript与XML,结合了Java技术、XML及JavaScript的编程技术。目的是在不刷新页面的情况下通过与服务器进行少量的数据交互来提高页面的交互性,减少响应时间,改善用户体验。使用Ajax后,页面不需要在每次用户提交修改时重新加载了。
12.cookie和session的区别
cookie是由Web服务器保存在用户浏览器上的小文件,可包含有关用户的信息(身份识别码、密码等)
session是指用来在客户端与服务器端之间保持状态的解决方案以及存储结构
二者都能进行信息存储,但存在几点区别:
1)cookie机制是在客户端保存状态,即数据存放在客户浏览器上;session是在服务器端保持状态,即数据放在服务器上
2)cookie安全性不够,其他人可以轻易得到本地cookie,进行cookie欺骗;session存放在服务器端,较为安全
3)cookie性能更高一些,session在一定时间保存在服务器上,当访问量增多,会降低服务器性能
4)单个cookie数据不能超过4KB,很多浏览器限制一个站点最多保存20个cookie;session不存在此问题
一般情况,用户登录信息存放至session中,其他可以放在cookie中
点赞
收藏
分享
文章举报
chs_502
发布了38 篇原创文章 · 获赞 2 · 访问量 734
私信
关注