目录
@、说出Servlet的生命周期,并说出Servlet和CGI的区别。
@、网站如果有大量的人登陆访问。那么会产生很多的session,如果你是程序员你该怎么办。
@、什么是Servlet
l Servlet是一个功能,如果你希望你的项目功能多一些,那就要多写一此Servlet;
l Servlet是JavaWeb三大组件之一,也是最重要的组件!
Ø 三大组件:Servlet、Filter、Listener
l Servlet是一个我们自定义的Java类,它必须要实现javax.servlet.Servlet接口。
l Servlet是动态资源!
l Servlet必须在web.xml中进行配置后,才能被访问。(把Servlet与一个或多个路径绑定在一起);
Servlet单例、线程不安全
l Servlet是的单例的。所以一个Servlet对象可能同时处理多个请求;
l Servlet不是线程安全的。
Ø 尽可能不创建成员变量,因为成员变量多个线程会共享!
Ø 如果非要创建,那么创建功能性的,只读!
@、Servlet
是一个小的java的程序,运行在服务器端(Tomcat服务器),是sun公司提供的一套规范,用来处理客户端请求,相应给浏览器的动态资源。Servlet可以接收和响应从客户端发送过来的请求;使用的是http的协议;实现Servlet的接口或者继承GenericServlet和HttpServlet类。
Servlet的作用 : 用来处理从客户端发送过来的请求,并对该请求作出响应
1.获取请求数据
2.处理请求
3.完成响应
配置文件详解:
<servlet>注册servlet
<servlet-name>servlet名称,当前xml中唯一
<servlet-class>servlet实现类的全限定类名
<servlet-mapping>给注册的servlet添加映射路径
<servlet-name>已经注册的servlet名称,注意,必须与注册的名字一致
<url-pattern>访问路径.要求 : 必须/开头
WEB-INF文件夹里面的文件不能被直接访问。
注意:服务器里面的项目越少运行的越快,尽量只有一个当前项目;
Servlet是JavaWeb三大组件之一(Servlet,Filter,Listener),且最重要.
Service在容器中是单例的
@、Servlet生命周期
web容器加载servlet,生命周期开始。
通过调用servlet的init()方法进行servlet的初始化。(在第一次访问servlet时创建,一生只执行一次,一般情况下init不使用;)
通过调用service()方法实现,根据请求的不同调用不同的do***()方法。(每次访问servlet都会被调用)
结束服务,web容器调用servlet的destroy()方法。(当服务器正常关闭时销毁,一生只执行一次,一般情况下不使用,用来释放服务器资源 。)
@、说出Servlet的生命周期,并说出Servlet和CGI的区别。
Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。
与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。
设置字符集
request.setCharacterEncoding("utf-8");//设置请求正文部分内容编码格式
response.setContentType("text/html;charset=utf-8");//解决响应内容中中文乱码问题
@、请求转发与重定向的区别
forward&redirect:
1、转发后,地址栏中的地址不变!重定向变
2、转发是一次请求一次响应,重定向是两次请求两次响应;
3、转发只能是本项目中的资源,而重定向可以其他项目。
4、重定向路径需要加工程名,转发的路径不需要工程名。
5、转发可以共享request域,而重定向因为是两个请求,所以不能共享request。
6、一个请求,只有一个请求方式!所以转发后还是原来的请求方式,如果一开始发出的是GET,那么整个请求都是GET!重定向不同,因为是多个请求,第一个无论是什么方式,第二个请求都是GET。
forward转发:
req.getRequestDispather("WEB路径名").forward(req,resp));
转发不产生新请求。地址栏不变
redirect:重定向
resp.sendRedirect("客户端的绝对路径");
resp.sendRedirect("http://www.baidu.com");
发送指令给客户端浏览器,让浏览发送新的请求到指定的URL,req的内部转发是不产生新请求。
注意:
l 当response为以提交状态,就不能再重定向了!
l 当使用了response的输出流响应后,再重定向。如果没有造成response提交,那么说明数据还在缓冲区中,tomcat会把缓冲区清空,然后重定向。
@、MVC
M:业务逻辑(service)&数据库操作(dao)&数据封装(domain,javaBean)
V:(View)视图层显示页面
C:控制层(控制器),调用业务逻辑,转跳页面(负责整体流程).
@、软件分层设计有何优点?
-->1、开发人员可以只关注整个结构中的其中某一层;
2、可以很容易的用新的实现来替换原有层次的实现;
3、可以降低层与层之间的依赖;
4、有利于标准化;
5、利于各层逻辑的复用。
概括来说,分层式设计可以达至如下目的:分散关注、松散耦合、逻辑复用、标准定义。
-->缺点:
“金无足赤,人无完人”,分层式结构也不可避免具有一些缺陷:
1、降低了系统的性能。这是不言而喻的。如果不采用分层式结构,很多业务可以直接造访数据库,以此获取相应的数据,如今却 必须通过中间层来完成。
2、有时会导致级联的修改。这种修改尤其体现在自上而下的方向。如果在表示层中需要增加一个功能,为保证其设计符合分层式 结构,可能需要在相应的业务逻辑层和数据访问层中都增加相应的代码。
关于第一个缺点,完全可以通过系统的缓存机制来减小对性能的影响。第二个缺点,我想只能通过采用一些设计模式来得到改善吧。
@、四种会话跟踪技术
会话作用域ServletsJSP 页面描述
page否是代表与一个页面相关的对象和属性。一个页面由一个编译好的 Java servlet 类(可以带有任何的 include 指令,但是没有 include 动作)表示。这既包括 servlet 又包括被编译成 servlet 的 JSP 页面
request是是代表与 Web 客户机发出的一个请求相关的对象和属性。一个请求可能跨越多个页面,涉及多个 Web 组件(由于 forward 指令和 include 动作的关系)
session是是代表与用于某个 Web 客户机的一个用户体验相关的对象和属性。一个 Web 会话可以也经常会跨越多个客户机请求
application是是代表与整个 Web 应用程序相关的对象和属性。这实质上是跨越整个 Web 应用程序,包括多个页面、请求和会话的一个全局作用域
@、cookie&session
@、cookie和浏览器缓存的区别?
@、什么是cookie?session?
Cookie是会话技术,将用户的信息保存到浏览器的对象,内容通过请求头和响应头由HTTP传输,
Session也是会话技术,将Session的信息保存到服务器的对象.Session是基于Cookie的,利用Cookie向浏览器回写JSessionID.
如果服务器端发送重复的Cookie那么会覆盖原有的Cookie,
Cookie是基于Http协议
session的原理:
session实现底层依赖于cookie【会话级别】,将JSESSIONID存入Cookie中。
会话关闭了,cookie被销毁,jsessionid丢失,但是session并没有销毁。jsessionid本来在session端的,是它传给session的,session还有一份的
@、session的实现原理
session底层是依赖Cookie的!我们来理解一下session的原理吧!
当我首次去银行时,因为还没有账号,所以需要开一个账号,我获得的是银行卡,而银行这边的数据库中留下了我的账号,我的钱是保存在银行的账号中,而我带走的是我的卡号。
当我再次去银行时,只需要带上我的卡,而无需再次开一个账号了。只要带上我的卡,那么我在银行操作的一定是我的账号!
当首次使用session时,服务器端要创建session,session是保存在服务器端,而给客户端的session的id(一个cookie中保存了sessionId)。客户端带走的是sessionId,而数据是保存在session中。
当客户端再次访问服务器时,在请求中会带上sessionId,而服务器会通过sessionId找到对应的session,而无需再创建新的session。
@、cookie的应用
(1)案例:显示上次访问时间
创建Cookie,名为lasttime,值为当前时间,添加到response中;
在AServlet中获取请求中名为lasttime的Cookie;
如果不存在输出“您是第一次访问本站”,如果存在输出“您上一次访问本站的时间是xxx”;
response.setContentType("text/html;charset=utf-8"); Cookie cookie = new Cookie("lasttime", new Date().toString()); cookie.setMaxAge(60 * 60); response.addCookie(cookie); Cookie[] cs = request.getCookies(); String s = "您是首次访问本站!"; if(cs != null) { for(Cookie c : cs) { if(c.getName().equals("lasttime")) { s = "您上次的访问时间是:" + c.getValue(); } } } response.getWriter().print(s); }
(2)设置Cookie的路径
设置Cookie的路径需要使用setPath()方法,例如:
cookie.setPath(“/cookietest/servlet”);
(3)显示曾经浏览过的商品
您浏览过的商品:
Cookie[] cs = request.getCookies();
if(cs != null) {
for(Cookie c : cs) {
if(c.getName().equals("goods")) {
out.print(c.getValue());
}
}
}
@、Cookie规范(了解)
l Cookie大小上限为4KB;
l 一个服务器最多在客户端浏览器上保存20个Cookie;
l 一个浏览器最多保存300个Cookie;
什么是Cookie的生命(了解)
Cookie不只是有name和value,Cookie还是生命。所谓生命就是Cookie在客户端的有效时间,可以通过setMaxAge(int)来设置Cookie的有效时间。
l cookie.setMaxAge(-1):cookie的maxAge属性的默认值就是-1,表示只在浏览器内存中存活。一旦关闭浏览器窗口,那么cookie就会消失。
l cookie.setMaxAge(60*60):表示cookie对象可存活1小时。当生命大于0时,浏览器会把Cookie保存到硬盘上,就算关闭浏览器,就算重启客户端电脑,cookie也会存活1小时;
l cookie.setMaxAge(0):cookie生命等于0是一个特殊的值,它表示cookie被作废!也就是说,如果原来浏览器已经保存了这个Cookie,那么可以通过Cookie的setMaxAge(0)来删除这个Cookie。无论是在浏览器内存中,还是在客户端硬盘上都会删除这个Cookie。
@、Session和cookie有什么区别?
1、cookie是保存在客户端浏览器缓存(磁盘),session存在于服务器内存的
2、session是本次会话有效,会话结束,session消失;cookie可以设置有效期,每次对本网站的访问会自动在请求投资中和请求一起发送到服务器。
3、session中可以放对象,cookie只可以放字符串。
4、Session其实是利用Cookie进行信息处理的,当用户首先进行了请求后,服务端就在用户浏览器上创建了一个Cookie,名称为sessionid,当这个Session结束时,其实就是意味着这个Cookie就过期了。
5、cookie和session都是用来跟踪浏览器用户身份的会话方式
@、cookie方法
添加cookie 的方式:
Cookie c = new Cookie("uname",“xiaowang”));
response.addCookie(c);
只能接受键值对:new Cookie("key","value");
取得
Cookie[] request.getCookies();得到所有Cookie(多个)
写入
resp.addCookie( cookie )写入浏览器
setMaxAge(秒数)//设置Cookie的有效期,超过了该时间后Cookie会自动销毁.
setPath("客户端WEB路径")//在指定的路径内有效
获取Cookie的name: getName()
获取cookie的value: getValue()
@、Cookie的持久化
1.持久化:就是把数据从内存中写到硬盘上
cookie默认是在浏览器缓存中【内存中】
cookie通过持久化设置,可以保存在硬盘上。
2.设置方法:
cookie.setMaxAge(int sec); 设置cookie最大生存时间,单位为秒
cookie的有效路径
概述:路径用来指定:访问哪个路径带哪些cookie
设置方法:
cookie对象 setPath(String path); 设置cookie的有效路径
@、session的生命周期
1、创建: 第一次调用request.getSession()时创建。
2、销毁:
①session.invalidate() 强制销毁session对象。【相当于主动去银行销户】
②session过期。【相当于过一段时间不操作银行账户,银行给我销户】
30分钟。在tomcat/conf/web.xml中配置的
<session-config>
<session-timeout>30</session-timeout>
</session-config>
不能太少,否则还会走默认30分钟
③服务器非正常关闭 Console--->Terminate 终结【银行突然倒闭】
注意:
(服务器正常关闭,不会销毁,序列化数据到 tomcat/work/catalina/localhost/项目名/SESSIONS.ser,在服务器重新启动时,又会重新加载序列化文件,session完全还原)
应用范围:企业开发大多用Session,登录验证、登录信息的保存、权限过滤
Cookie禁用
使用js中的navigator.cookieEnabledo判断cookie是否被禁用。
@、4个域对象?
1_application:有一些数据希望一直保存着,最好和项目的运行生命周期保持一致,此时这些数据可以存放在ServletContext内
2_session:有一些数据希望本次会话有效,session内,可以跨请求(多个请求之间可以共享,但是每个用户都有自己独立的域对话(从第一次请求开始一个会话,到最后一次为止,视为一次会话.默认是30分钟))
3_request:有一些数据希望本次请求内有效,request内
4_pageContext:很少用,因为这个对象是在service方法中创建好的,意味着在jsp范围内有效
@、网站如果有大量的人登陆访问。那么会产生很多的session,如果你是程序员你该怎么办。
session默认保存在内存中,内存资源宝贵,session数据量大导致内存利用率高,以下方案解决session内存存储问题:
1、可以设置session超时时间,达到超时时间session自动清空
<session-config>
<session-timeout>20</session-timeout>
</session-config>
2、将session中的数据序列化到硬盘中
3、不使用session,使用cookie(此方法存在安全性问题)
@、JSP
全名Java Server Pages
它是建立在Servlet规范之上的动态网页开发技术
组成 : html+java+jsp的标签
jsp的作用 : 大白话:在html代码中嵌套java代码
@、jsp和Servlet:
JSP在本质上就是SERVLET,但是两者的创建方式不一样.Servlet完全是JAVA程序代码构成擅长于流程控制和事务处理而通过Servlet来生成动态网页;
JSP由HTML代码和JSP标签构成,可以方便地编写动态网页
因此在实际应用中采用Servlet来控制业务流程,而采用JSP来生成动态网页.在struts框架中,JSP位于MVC设计模式的视图层,而Servlet位于控制层.
答案2:
JSP是Servlet技术的扩展,本质上就是Servlet的简易方式。JSP编译后是“类servlet”。Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。JSP侧重于视图,Servlet主要用于控制逻辑。
@、JSP有哪些动作?作用分别是什么?
@、JSP共有以下6种基本动作
jsp:include:在页面被请求的时候引入一个文件。
jsp:forward:把请求转到一个新的页面。
jsp:setProperty:设置JavaBean的属性。
jsp:getProperty:输出某个JavaBean的属性。
jsp:useBean:寻找或者实例化一个JavaBean。
jsp:plugin:根据浏览器类型为Java插件生成OBJECT或EMBED标记。
@、JSP四大域对象和九大内置对象
四大域对象:PageContext、request、session、servletContext
Jsp有哪些内置对象?作用分别是什么?
Page,pageContext,request,response,session,application,out,config,exception
Page指的是JSP被翻译成Servlet的对象的引用.
pageContext对象可以用来获得其他8个内置对象,还可以作为JSP的域范围对象使用.pageContext中存的值是当前的页面的作用范围;
request代表的是请求对象,可以用于获得客户机的信息,也可以作为域对象来使用,使用request保存的数据在一次请求范围内有效。
Response是响应对象,代表的是从服务器向浏览器响应数据.
Session代表的是一次会话,可以用于保存用户的私有的信息,也可以作为域对象使用,使用session保存的数据在一次会话范围有效
Application:代表整个应用范围,使用这个对象保存的数据在整个web应用中都有效。
Out:JSPWriter是用于向页面输出内容的对象
Config:指的是ServletConfig用于JSP翻译成Servlet后 获得Servlet的配置的对象.
Exception:在页面中设置isErrorPage=”true”,即可使用,是Throwable的引用.用来获得页面的错误信息。
@、JSP常用的指令有哪些
<%@ page language=” ”
import=” ”
errorPage=” ”
isErrorPage=” ”
method=””
contextPage=” ” %>
<%@? include file=” ”%><%@tiglib uri=” ”%>
@、JSP的常用指令
<%@page language=”java” contenType=”text/html;charset=gb2312” session=”true” buffer=”64kb” autoFlush=”true” isThreadSafe=”true” info=”text” errorPage=”error.jsp” isErrorPage=”true” isELIgnored=”true” pageEncoding=”gb2312” import=”java.sql.*”%>
isErrorPage(是否能使用Exception对象),
isELIgnored(是否忽略表达式)
<%@include file=”filename”%>
<%@taglib prefix=”c”uri=”http://……”%>
@、AjAX的理解?
简单来说:异步加载,局部刷新。
AJAX 是一种用于创建快速动态网页的技术。
通过在后台与服务器进行少量数据交换,在不重新加载整个网页的情况下,对网页进行部分更新。(javascript的httprequest请求,异步返回处理结果, 可以在页面不提交的情况下,获取服务器或数据库的数据,直接呈现给页面。)
传统网页不使用AJAX,如果需要刷新网页,则需要重新加载整个网页:
有很多Ajax应用场景: 异步用户名校验(用户注册用户名校验失去焦点发送请求校验用户名),Google地图,股票数据更新,....
细节:
通过Ajax和服务端传递数据:如果数据量很小,传输字符串;如果数据量比较多,传输xml。
AJAX=异步js和xml,是一种新的思想,整合之前的多种技术,用于创建快速交互式网页应用的网页开发技术。
ajax: 异步通信(实现页面无闪刷新效果) 调用浏览器发送请求的对象 发送一个请求到后台 后台servlet处理完返回给前台
前台有一个回调函数 处理后台的响应结果!
@、Ajax同步与异步区别
属性:url(发送请求地址)、type(请求方式)
同步:async值为false,发送ajax请求后,后面还有代码需要执行,将服务器响应交由另一个js函数进行处理,在服务器没有响应或者响应结果js函数还没有处理完成return时,包含请求代码的函数的剩余代码不能够执行。
提交请求->等待服务器处理->处理完毕返回 这个期间客户端浏览器不能干任何事。
异步:async值为true,…包含请求代码的函数的剩余代码将继续执行。
请求通过事件触发->服务器处理(这是浏览器仍然可以作其他事情)->处理完毕
@、ajax如何实现异步定时5秒刷新
setInterval(function() {
$("#content").load(location.href+" #content>*","");
}, 5000);
@、json
json(JavaScript Object Notation)是一种轻量级的数据交换方式。json采用完全独立于语言的文本格式,就是说不同的编程语言JSON数据是一致的。
(易于阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率))。
json对象格式:
{"key":"value","key":"calue",.......}
*键和值使用冒号分隔;
*标准规范要求key必须使用双引号,value如果没有使用双引号表示常量;
JSON数组:
[obj,obj,obj,........]
*表示一组值,多个值之间使用逗号分隔;
@、Filter与Listener的区别
Filter:是一个运行在服务器端的程序,先于与之相关的Servler或JSP页面之前运行
服务器启动时初始化init,访问资源被拦截时执行拦截方法doFiler,服务器关闭销毁destory。使用场景:统一设置编码、权限过滤、预处理和后处理。
Listener:监听器是指对整个WEB环境的监听,当被监视的对象发生改变时,立即调用相应的方法进行处理;随着web应用的启动而启动,只初始化一次,随着web应用的停止而销毁。监听对象:ServlerRequset、HttpSerssion、ServlerContext。应用:做一些初始化的内容添加工作,设置一些基本内容(如一些参数或者固定的对象等)。
区别:Filter可以实现对请求的过滤和重定向等,可以操作request、content、session等对象;Listerer只能监听到以上对象的属性修改。
java B/S 主流设计模式 mvc 能够使项目层次 简洁明确,易于维护、二次开发等优点。
其作用也是为了开发项目,所有设计模式都是为了开发。
MVC模式的目的就是实现Web系统的职能分工。 Model层实现系统中的业务逻辑,通常可以用JavaBean或EJB来实现。 View层用于与用户的交互,通常用JSP来实现。 Controller层是Model与View之间沟通的桥梁,它可以分派用户的请求并选择恰当的视图以用于显示,同时它也可以解释用户的输入并将它们映射为模型层可执行的操作。