志在指尖
用双手敲打未来

Java Web

1、Servlet总结
JavaWeb程序中,Servlet首要负责接收用户恳求HttpServletRequest,在doGet(),doPost()中做相应的处理,并将回应HttpServletResponse反馈给用户。Servlet能够设置初始化参数,供Servlet内部运用。一个Servlet类只会有一个实例,在它初始化时调用init()办法,毁掉时调用destroy()办法。Servlet需求在web.xml中装备,一个Servlet能够设置多个URL拜访。Servlet不是线程安全的,因而要慎重运用成员变量。
2、Servlet的生命周期办法
Servlet接口界说了5个办法,其间前三个办法与Servlet生命周期相关:
voidinit(ServletConfigconfig)throwsServletException
voidservice(ServletRequestreq,ServletResponseresp)throwsServletException,java.io.IOException
voiddestroy()
生命周期:Web容器加载Servlet并将其实例化后,Servlet生命周期开端,容器运转其init()办法进行Servlet的初始化;恳求抵达时调用Servlet的service()办法,service()办法会依据需求调用与恳求对应的doGet或doPost等办法;当服务器封闭或项目被卸载时服务器会将Servlet实例毁掉,此时会调用Servlet的destroy()办法。init办法和destroy办法只会履行一次,service办法客户端每次恳求Servlet都会履行。Servlet中有时会用到一些需求初始化与毁掉的资源,因而能够把初始化资源的代码放入init办法中,毁掉资源的代码放入destroy办法中,这样就不需求每次处理客户端的恳求都要初始化与毁掉资源。
3、get、post恳求的差异
get和post底层都是http,运用的都是tcp协议。
GET在浏览器回退时是无害的,而POST会再次提交恳求。
GET产生的URL地址能够被Bookmark,而POST不能够。
GET恳求会被浏览器主动cache,而POST不会,除非手动设置。
GET恳求只能进行url编码,而POST支撑多种编码办法。
GET恳求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
GET恳求在URL中传送的参数是有长度约束的,而POST没有。
对参数的数据类型,GET只接受ASCII字符,而POST没有约束。
GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递灵敏信息。
GET参数经过URL传递,POST放在Requestbody中。
GET和POST还有一个重大差异:GET产生一个TCP数据包;POST产生两个TCP数据包。
关于GET办法的恳求,浏览器会把httpheader和data一起发送出去,服务器呼应200(回来数据);
关于POST,浏览器先发送header,服务器呼应100continue,浏览器再发送data,服务器呼应200ok(回来数据)。
在网络环境好的情况下,发一次包的时刻和发两次包的时刻差别根本能够无视。而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点。
并不是一切浏览器都会在POST中发送两次包,Firefox就只发送一次。
4、什么情况下调用doGet()和doPost()
Form标签里的method的特色为get时调用doGet(),为post时调用doPost()。
处理get恳求时调用doGet,处理post恳求时调用doPost()
5、转发(Forward)和重定向(Redirect)的差异
转发是服务器内部转发,重定向是服务器告诉客户端恳求一个新的地址
转发(Forward)经过RequestDispatcher目标的forward(HttpServletRequestrequest,HttpServletResponseresponse)办法完成的。RequestDispatcher目标能够经过HttpServletRequest的getRequestDispatcher()办法取得。
eg.登录成功,转发到login_success.jsp页面:
request.getRequestDispatcher(“login_success.jsp”).forward(request,response);
重定向(Redirect)是运用服务器回来的状况码来完成的。客户端浏览器恳求服务器的时分,服务器会回来一个状况码。服务器经过HttpServletResponse的setStatus(intstatus)办法设置状况码。假如服务器回来301或许302,则浏览器会到新的网址从头恳求该资源。
从地址栏显示来看
forward:地址栏的url仍是本来的那个,不变;redirect:地址栏的url会变为重定向的url
从数据同享来看
forward:转发到的页面能够同享request里面的数据.redirect:不能同享数据.
从运用场景来看
forward:一般用于用户登陆的时分,登录成功时依据人物转发到相应的模块.redirect:一般用于用户注销登陆时回来主页面和跳转到其它的网站等
从功率来说
forward:高,因为是1次http恳求,服务器本地转发到本地,速度快;redirect:低,因为是2次http恳求,在客户端、服务器之间来回跑花时刻。
6、主动改写(Refresh)
主动改写不仅能够完成一段时刻后主动跳转到另一个页面,还能够完成一段时刻后主动改写本页面。Servlet中经过HttpServletResponse目标设置Header特色完成主动改写例如:
Response.setHeader(“Refresh”,”5;URL=http://localhost:8080/servlet/example.html”);
其间5为时刻,单位为秒。URL指定就是要跳转的页面,假如设置为本页面,每隔5s就会主动改写本页面。因为5秒之后再次恳求本页面,本页面的呼应头依然是5秒后改写,一向循环往复。
7、Servlet与线程安全
Servlet不是线程安全的,因为运转时一个servlet只有一个实例,多个客户端一起拜访这个servelt的映射地址,tomcat会为每一个恳求都创立一个线程来处理,这些线程一起调用同一个servlet实例来处理恳求(拜访同一个servlet的成员变量),多线程并发的读写会导致数据不同步的问题,假如并发拜访都是只读servlet中的变量、不写入(修改),那倒是没有问题。尽量把只读的变量设置为final。
能够给成员变量加同步锁,但履行功率很低,会有大批恳求等待。
解决的办法是servlet中尽量不要界说成员变量,运用的变量尽量放到成员办法doGet、doPost中作为局部变量。
8、JSP和Servlet是什么关系
Servlet是一个特别的Java程序,它运转于服务器的JVM中,能够依靠服务器的支撑向浏览器供给显示内容。
JSP实质上是Servlet,运转时JSP会先被服务器转换为Servlet。
Servlet和JSP最首要的不同点在于,Servlet的运用逻辑是在.java文件中,完全同表现层的html分隔;而JSP是Java和HTML杂糅在一起组合.jsp文件。
JSP侧重于视图,Servlet更侧重于逻辑控制,在MVC架构形式中,JSP合适充当视图(view)而Servlet合适充当控制器(controller)。
9、JSP作业原理
JSP是一种Servlet,可是与Servlet的作业办法不太一样。Servlet是先由源代码编译为class文件后布置到服务器下,先编译后布置。而JSP则是先布置后编译。tomcat会在客户端第一次恳求JSP文件时把.jsp转换为.java文件(servlet),运用的是HttpJspPage类(Servlet接口的一个子类),再编译为.class文件。.java、.class这2个文件会被临时存放在服务器作业目录里。编译结束后再运转class文件来呼应客户端恳求。今后客户端拜访login.jsp的时分,Tomcat将不再从头编译JSP文件,而是直接调用class文件来呼应客户端恳求。第一次拜访jsp要转换、编译,速度慢,后续拜访此jsp就快了。
10、JSP有哪些内置目标、效果别离是什么
JSP有9个内置目标:
request:封装客户端的恳求,其间包括来自GET或POST恳求的参数;
response:封装服务器对客户端的呼应;
pageContext:经过该目标能够获取其他目标;
session:封装用户会话;
application:封装服务器运转环境;
out:服务器呼应的输出流目标;
config:Web运用的装备目标;
page:JSP页面本身(相当于Java程序中的this);
exception:封装页面抛出异常。
11、JSP的三大指令
1、page指令设置jsp页面的相关信息
实例:<%@pagelanguage=”java”import=”java.util.*”pageEncoding=”UTF-8”%>
import:同等与import句子,导入多个类
在一个JSP页面中能够给出多个page指令,并且import是能够重复呈现的
pageEncoding:指定当时页面的编码
假如pageEncoding没有指定,那么默以为contentType的值;
假如pageEncoding和contentType都没有指定,那么默认值为iso-8859-1
contentType:同等与调用response.setContentType(“text/html;charset=xxx”);
假如没有指定contentType特色,那么默以为pageEncoding的值;
假如contentType和pageEncoding都没有指定,那么默认值为iso-8859-1
errorPage:假如当时页面呈现异常,那么跳转到errorPage指定的过错页面。
例如:<%@pageerrorPage=”b.jsp”%>
isErrorPage:上面示例中指定b.jsp为过错页面,需求在b.jsp中运用<%@pageisErrorPage=”true”%>指定本页面为过错页面,指定后才能在b.jsp中运用内置目标exception。
其它特色
buffer:指定out流的缓冲区巨细,默以为8KB
autoFlush:当autoFlush为true时,表明out流缓冲区满时会主动改写。默以为true
language:当时JSP运用的语言,默以为java,也只能选择java
info:当时JSP的阐明信息
isThreadSafe:当时JSP是否是线程安全的(是否只支撑单线程拜访),默以为false,表明支撑并发拜访
2、include指令包括其他文件
被包括的文件能够是JSP文件、HTML文件或文本文件。包括的文件就好像是该JSP文件的一部分,会被一起编译履行。
实例:<%@includefile=”文件相对url地址”%>
3、taglib指令在当时jsp页面中导入第三方的标签库
实例:<%@tagliburi=”http://java.sun.com/jsp/jstl/core”%prefix=”c”>
需求先增加第三方标签库所需的jar包。
12、JSP的七大动作元素
jsp:include:引入一个文件。
jsp:useBean:寻找或许实例化一个JavaBean。
jsp:setProperty:设置JavaBean的特色。
jsp:getProperty:输出某个JavaBean的特色。
jsp:forward:把恳求转到一个新的页面。
jsp:plugin:依据浏览器类型为Java插件生成OBJECT或EMBED符号
13、JSP中的四种效果域
page当时页面
request一个http恳求,一个恳求可能跨越多个页面(转发)
session某个用户与服务器建立的一次会话
application包括整个Web运用程序相关的目标和特色,整个webapp中都可用
14、Request目标的首要办法有哪些
setAttribute(Stringname,Object):设置姓名为name的request的参数值
getAttribute(Stringname):回来由name指定的特色值
getAttributeNames():回来request目标一切特色的姓名调集,结果是一个枚举的实例
removeAttribute(Stringname):删去恳求中的一个特色
getCookies():回来客户端的一切Cookie目标,结果是一个Cookie数组
getCharacterEncoding():回来恳求中的字符编码办法=getContentLength():回来恳求的Body的长度
getHeader(Stringname):取得HTTP协议界说的文件头信息
getHeaders(Stringname):回来指定姓名的requestHeader的一切值,结果是一个枚举的实例
getHeaderNames():回来所以requestHeader的姓名,结果是一个枚举的实例
getInputStream():回来恳求的输入流,用于取得恳求中的数据
getMethod():取得客户端向服务器端传送数据的办法
getParameter(Stringname):取得客户端传送给服务器端的有name指定的参数值
getParameterNames():取得客户端传送给服务器端的一切参数的姓名,结果是一个枚举的实例
getParameterValues(Stringname):取得有name指定的参数的一切值
getProtocol():获取客户端向服务器端传送数据所依据的协议名称
getQueryString():取得查询字符串
getRequestURI():获取发出恳求字符串的客户端地址
getRemoteAddr():获取客户端的IP地址
getRemoteHost():获取客户端的主机名
getSession([Booleancreate]):回来和恳求相关Session
getServerName():获取服务器的姓名
getServletPath():获取客户端所恳求的脚本文件的路径
getServerPort():获取服务器的端口号
15、request.getAttribute()和request.getParameter()有何差异
1、获取的数据:getParameter()是获取POST/GET传递的参数值(比方表单提交的数据);getAttribute()是获取setAttribute()放到域中的数据。
2、回来值:getParameter()回来的是String,需求转换为自己需求的相应类型;getAttribute()回来的是Object,也需求转换为自己需求的相应类型
3、运用场景:request.getParameter()常用于直接获取http恳求中带着的恳求参数,比方获取表单表单提交的数据,request.getAttribute()常用于转发时获取前一个页面setAttribute传递的数据。
16、include指令、include动作元素的差异
include指令:JSP能够经过include指令来包括其他文件。被包括的文件能够是JSP文件、HTML文件或文本文件。包括的文件就好像是该JSP文件的一部分,会被一起编译履行。语法格局如下:<%@includefile=”文件相对url地址”%>
include动作元素:动作元素用来包括静态和动态的文件。该动作把指定文件插入正在生成的页面。语法格局如下:
17、怎么完成JSP、Servlet的单线程形式
servlet默认是单实例、支撑多线程拜访的(并发拜访),jsp实质是servlet,也一样。
设置为单线程拜访:JSP能够经过page指令进行设置,<%@pageisThreadSafe=”false”%>;Servlet能够让Servlet完成SingleThreadModel标识接口。
阐明:假如将JSP或Servlet设置成单线程作业形式,会导致每个恳求创立一个Servlet实例,这种实践将导致严峻的性能问题(服务器的内存压力很大,还会导致频繁的废物回收),所以通常情况下并不会这么做。
18、完成会话盯梢的技能有哪些
1、运用Cookie
优点:数据能够耐久保存,不占用服务器存储,根据文本的Key-Value,运用简单
缺点:巨细受到约束(每次恳求该网站时都会将该网站的cookie放在恳求头中),用户能够禁用Cookie功用,因为保存在客户端,有必定的安全风险。
2、session
在一切会话盯梢技能中,session目标是最强大也是功用最多的。当一个用户第一次拜访某个网站时会主动创立HttpSession,每个用户能够拜访他自己的HttpSession。能够经过HttpServletRequest目标的getSession方法取得HttpSession,经过HttpSession的setAttribute办法能够将一个值放在HttpSession中,经过调用HttpSession目标的getAttribute办法,一起传入特色名就能够获取保存在HttpSession中的目标。与上面三种办法不同的是,HttpSession放在服务器的内存中,因而不要将过大的目标放在里面,即便目前的Servlet容器能够在内存将满时将HttpSession中的目标移到其他存储设备中,可是这样势必影响性能。增加到HttpSession中的值能够是任意Java目标,这个目标最好完成了Serializable接口,这样Servlet容器在必要的时分能够将其序列化到文件中,否则在序列化时就会呈现异常。
3、URL重写
在URL中增加用户会话的信息作为恳求的参数,或许将仅有的会话ID增加到URL结尾以标识一个会话。
优点:在Cookie被禁用的时分依然能够运用
缺点:必须对网站的URL进行编码,一切页面必须动态生成,不能用预置的URL进行拜访。
4、躲藏的表单域
type=”hidden”name=”session”value=”…”/>
优点:Cookie被禁时能够运用
缺点:需求提交表单才能向服务器传递数据,且只能是单向传递(客户端=>服务器)
19、Cookie和Session的差异
Cookie和Session都是用来盯梢用户会话的,差异:
1、存储方位:Cookie数据保存在客户端(浏览器端),Session数据保存在服务器端。
2、安全性:session存储在服务器上,相对来说安全性更高。尽量不要把灵敏信息存储在Cookie中,就算要在cookie中存储灵敏信息,也应该存储加密后的信息。服务器拿到加密后的信息后先解密再运用。
3、盯梢用户会话的完成办法
cookie:服务器把cookie(会话信息)存储在客户端(浏览器),每次向该网站发送http恳求时,都会在恳求头中顺便该网站的cookie,恳求头的巨细有限,所以cookie能存储信息巨细是有限的。
session:session(会话信息)存储在服务器上,运用一个仅有的sessionid来仅有标识此session目标,sessionid以cookie的办法保存在客户端,客户端发起http恳求时,服务器会主动从cookie中获取sessionid,找到对应的session目标。
4、用户信息的保存时刻
cookie:在cookie有用期内,cookie中的用户信息都有用,能够长期保存用户信息。
session:只是在本次会话期间保存会话信息,session超时时会主动删去服务器上的对应的session目标,默认超时时刻是30min,即用户30min内没有再次拜访服务器,session目标就会被删去。
有时分需求在删去session目标时做一些处理,比方把session中的一些数据今后还要用,需求保存至数据库。那就需求我们写一个监听器来监听session,session毁掉时做一些处理:
@WebListener()publicclassMyListenerimplementsHttpSessionListener{publicvoidsessionCreated(HttpSessionEventse){
}publicvoidsessionDestroyed(HttpSessionEventse){
HttpSessionsession=se.getSession();//从session中获取数据,存储到数据库中//……}
}
5、运用场景
Cookie一般用来保存用户信息,比方:
(1)在Cookie中保存已经登录过的用户信息,下次拜访网站的时分主动登录或主动填写一些字段;
(2)一般的网站都会保持登录,就是说下次你再拜访网站的时分不需求从头登录,这是因为用户登录时存放了一个Token在Cookie中,下次登录的时分只需求依据Token值来查找用户即可(为了安全考虑,从头登录一般要将Token重写);
session存储的信息巨细没有约束,可存储本次会话期间的信息,根据这2个特色,常见的运用有
(1)session常用来存储一次性验证码,将用户提交的验证码与session中正确的验证码比较,验证码30分钟内有用是设置sessionid这个cookie的有用期是30min。
(2)购物车

未经允许不得转载:IT技术网站 » Java Web
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

志在指尖 用双手敲打未来

登录/注册IT技术大全

热门IT技术

C#基础入门   SQL server数据库   系统SEO学习教程   WordPress小技巧   WordPress插件   脚本与源码下载