面试——JavaWeb基础

Servlet总结

在Java Web程序中,Servlet主要负责接收用户请求HttpServletRequest,在doGet(),doPost()中做出相应的处理,并将回应HttpServleResponse反馈给用户.Servlet可以设置初始化参数,供servlet内部使用.一个Servlet类只会有一个实例,在它初始化时调用init()方法,销毁时调用destroy()方法.
Servlet需要在web.xml中配置(MyEclipse中创建servlet会自动配置),一个Servlet可以设置多个URL访问.
Servlet不是线程安全,因此要谨慎使用类变量.

转发(Forward)和重定向(Redirect)的区别

转发是服务器行为,重定向是客户端行为.

转发(Forward) 
通过RequestDispatcher对象的forward(HttpServletRequest request,HttpServleResponse response)方法实现的.RequestDispatcher可以通过HttpServletRequest的getRequestDispatcher()方法获得.

例如下面的代码就是跳转到login_success.jsp页面	request.getRequestDispatcher("login_success.jsp").forward(request,response);

重定向(Redirect)
是利用服务器返回的状态码来实现的.客户端浏览器请求服务器的时候,服务器会返回一个状态码.服务器通过HttpServleResponse的setStatus(int status)方法设置状态码,如果服务器返回301或者302,则浏览器会到新的网址重新请求该资源.

从地址栏显示来说
forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址.
redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.

从数据共享来说
forward:转发页面和转发到的页面可以共享request里面的数据
redirect:不能共享数据

从运用地方来说
forward:一般用于用户登录的时候,根据角色转发到相应的模块
redirect:一般用于用户注销登录时返回主页面和跳转到其他的网站等

从效率来说
forward:高
redirect:低

JSP和Servlet是什么关系

Servlet是一个特殊的Java程序,它运行于服务器的JVM中,能够依靠服务器的支持向浏览器提供显示内容.
JSP本质上是Servlet的一种简易形式,JSP会被服务器处理成一个类似于Servlet的Java程序,可以简化页面内容的生成.
Servlet和Jsp最主要的不同点在与,Servlet的应用逻辑实在Java文件中,并且完全从表示层的HTML分离开来.而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件.有人说,Servlet就是在Java中写HTML,而JSP就是在HTML中写Java代码,当然这个说法是很片面不够准确的.
JSP偏重于视图,Servlet更侧重于逻辑控制,在MVC架构模式中,JSP适合充当视图(view)而Servlet适合充当控制器(controller)

JSP的内置对象及方法?

它包含了有关浏览器请求的信息,并且提供了几个用于获取cookie, header, 和session数据的有用的方法。

response表示HttpServletResponse对象,并提供了几个用于设置送回 浏览器的响应的方法(如cookies,头信息等)

out对象是javax.jsp.JspWriter的一个实例,并提供了几个方法使你能用于向浏览器回送输出结果。
pageContext表示一个javax.servlet.jsp.PageContext对象。它是用于方便存取各种范围的名字空间、servlet相关的对象的API,并且包装了通用的servlet相关功能的方法。
session表示一个请求的javax.servlet.http.HttpSession对象。 Session可以存贮用户的状态信息
applicaton 表示一个javax.servle.ServletContext对象。这有助于查找有关servlet引擎和servlet环境的信息
config表示一个javax.servlet.ServletConfig对象。该对象用于存取servlet实例的初始化参数。
page表示从该页面产生的一个servlet实例
exception 表示异常对象

session和cookie的区别 【必会】

所以安全来讲session的安全性要比cookie高,然后我们获取session里的信息是通过存放在会话cookie里的sessionid获取的。又由于session是存放在服务器的内存中,
所以session里的东西不断增加会造成服务器的负担,所以会把很重要的信息存储在session中,而把一些次要东西存储在客户端的cookie里,然后cookie确切的说分为两大类分为会话cookie和持久化cookie,会话cookie确切的说是存放在客户端浏览器的内存中,所以说他的生命周期和浏览器是一致的,浏览器关了会话cookie也就消失了,然而持久化cookie是存放在客户端硬盘中, 而持久化cookie的生命周期就是我们在设置cookie时候设置的那个保存时间,然后我们考虑一问题当浏览器关闭时session会不会丢失,从上面叙述分析session的信息是通过sessionid获取的,而sessionid是存放在会话cookie当中的,当浏览器关闭的时候会话cookie消失所以我们的sessionid也就消失了,但是session的信息还存在服务器端,这时我们只是查不到所谓的session但它并不是不存在。
 那么,session在什么情况下丢失,就是在服务器关闭的时候,或者是sessio过期,再或者调用了invalidate()的或者是我们想要session中的某一条数据消失调用session.removeAttribute()方法,然后session在什么时候被创建呢,确切的说是通过调用session.getsession来创建,这就是session与cookie的区别Cookie禁用的情况下,使用所有的访问路径url后面,带一个sessionid的参数

说一说Servlet的生命周期?

这个生存期由 javax.servlet.Servlet接口的init(), service ()和destroy方法表达。
Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法 自动派 遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destr oy方 web容器加载servlet,生命周期开始。通过调用servlet的init()方法进行servlet的初始化。
通过 调用 service()方法实现,根据请求的不同调用不同的do*()方法。结束服务,web容器调用servlet的 destroy ()方法。

HTTPS和HTTP的区别【必会】

https协议需要到ca申请证书,一般免费证书很少,需要交费。
http和https使用的是完全不同的连接方式用的端口也不一样,前者是80,后者是443。
http的连接很简单,是无状态的
HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议 要比http协议安全

Get和Post的区别【必会】

post是向服务器传送数据(Http与服务器交互的改),
get传送的数据量较小,不能大于2KB。
post传送的数据量较大,一般被默认为不受限制。
【Http Get方法提交的数据大小长度并没有限制,HTTP协议规范没有对URL长度进行限制。这个限制是特定的浏览器及服务器对它的限制。】
之前我们有一个项目开发,遇到了在其他人的电脑上访问是正常的,但是到了他的电脑上就返回400的错误,这个就很奇怪了,之后我们采用了用 fiddler 抓包,发现url超长,他用的是IE浏览器,会对超长的url进行截取,所以会返回400的错误,所以我们表单提交的时候必须用post请求。
get安全性非常低,post安全性较高。但是执行效率却比Post方法好。
在进行文件上传时只能使用post而不能是get。
.表单提交默认是用get.

JSP9大隐视对象中四个作用域的大小与作用范围

appliaction>session>request>page application:全局作用范围,整个应用程序共享.
生命周期为:应用程序启动到停止。
session:会话作用域,当用户首次访问时,产生一个新的会话,以后服务器就可以记 住这个会话状态。
request:请求作用域,就是客户端的一次请求。
page:一个JSP页面。 以上作用范围使越来越小,
request和page的生命周期都是短暂的,他们之间的区别就是:
一个request可以包含多个page页(include,forward)。 Jsp的

sevlet过滤器

实例化--->初始化(init)-->进行过滤(doFilter)--->销毁(destroy)-->释放资源
一个Filter必须实现javax.servlet.Filter接口 在项目中我们通常通过filter进行编码转换, 进行安全验证,
进行重复提交的判断。

web.xml 中的listener、filter、servlet 加载顺序

真正的加载顺序为:context-param -> listener -> filter -> servlet

JSP 标准标签库(JSTL)

1. 1. <c:set>    用于保存数据
2. 1. <c:remove>    用于删除数据
3. 1. <c:catch>    用来处理产生错误的异常状况,并且将错误信息储存起来
4. 1. <c:if>    与我们在一般程序中用的if一样
5. 1. <c:choose>    本身只当做<c:when>和<c:otherwise>的父标签
6. 1. <c:when>    <c:choose>的子标签,用来判断条件是否成立
7. 1. <c:otherwise>    <c:choose>的子标签,接在<c:when>标签后,当<c:when>标签判断为false时被执行
8. 1. <c:import>    检索一个绝对或相对 URL,然后将其内容暴露给页面
9. 1. <c:forEach>    基础迭代标签,接受多种集合类型
10. 1. <c:forTokens>    根据指定的分隔符来分隔内容并迭代输出
11. 1. <c:param>    用来给包含或重定向的页面传递参数
12. 1. <c:redirect>    重定向至一个新的URL.
13. 1. <c:url>    使用可选的查询参数来创造一个URL

Request对象的主要方法有哪些

getAttribute(String name):返回由name指定的属性值
getAttributeNames():返回request 对象所有属性的名字集合,结果是一个枚举的实例
getCookies():返回客户端的所有 Cookie 对象,结果是一个Cookie 数组
getCharacterEncoding() :返回请求中的字符编码方式 = getContentLength() :返回请求的 Body的长度
getHeader(String name) :获得HTTP协议定义的文件头信息
getHeaders(String name) :返回指定名字的request Header 的所有值,结果是一个枚举的实例
getHeaderNames() :返回所以request Header 的名字,结果是一个枚举的实例
getInputStream() :返回请求的输入流,用于获得请求中的数据
getMethod() :获得客户端向服务器端传送数据的方法
getParameter(String name) :获得客户端传送给服务器端的有 name指定的参数值
getParameterNames() :获得客户端传送给服务器端的所有参数的名字,结果是一个枚举的实例
getParameterValues(String name):获得有name指定的参数的所有值
getProtocol():获取客户端向服务器端传送数据所依据的协议名称
getQueryString() :获得查询字符串
getRequestURI() :获取发出请求字符串的客户端地址
getRemoteAddr():获取客户端的 IP 地址
getRemoteHost() :获取客户端的名字
getSession([Boolean create]) :返回和请求相关 Session
getServerName() :获取服务器的名字
getServletPath():获取客户端所请求的脚本文件的路径
getServerPort():获取服务器的端口号
removeAttribute(String name):删除请求中的一个属性

request.getAttribute()和 request.getParameter()有何区别

getParameter()是获取 POST/GET 传递的参数值;
getAttribute()是获取对象容器中的数据值;
从用途来看:
getParameter用于客户端重定向时,即点击了链接或提交按扭时传值用,即用于在用表单或url重定向传值时接收数据用。
getAttribute用于服务器端重定向时,即在 sevlet 中使用了 forward 函数,或 struts 中使用了
mapping.findForward。 getAttribute 只能收到程序用 setAttribute 传过来的值。
另外,可以用 setAttribute,getAttribute 发送接收对象.而 getParameter 显然只能传字符串。
setAttribute 是应用服务器把这个对象放在该页面所对应的一块内存中去,当你的页面服务器重定向到另一个页面时,应用服务器会把这块内存拷贝另一个页面所对应的内存中。这样getAttribute就能取得你所设下的值,当然这种方法可以传对象。session也一样,只是对象在内存中的生命周期不一样而已。getParameter只是应用服务器在分析你送上来的 request页面的文本时,取得你设在表单或 url 重定向时的值。
总结:
getParameter 返回的是String,用于读取提交的表单中的值;(获取之后会根据实际需要转换为自己需要的相应类型,比如整型,日期类型啊等等)
getAttribute 返回的是Object,需进行转换,可用setAttribute 设置成任意对象,使用很灵活,可随时用
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值