1.什么是Servlet?
Servlet(Server Applet)是用Java编写的服务器端程序。其主要功能在于交互式地浏览和修改数据,生成动态Web内容。狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。可以从两个方面去看Servlet:
- API:有一个接口servlet,它是servlet规范中定义的用来处理客户端请求的程序需要实现的顶级接口。
- 组件:服务器端用来处理客户端请求的组件,需要在web.xml文件中进行配置。
2.Servlet的生命周期
servlet的生命周期,包括加载和实例化、初始化、处理请求以及服务结束。这个生命周期由javax.servlet.servlet接口中的init、service、destroy方法表达。web容器加载servlet,生命周期开始。通过调用servlet的init()方法进行servlet的初始化。通过调用service()方法实现根据请求的不同调用不同的do**()方法。结束服务,web容器调用servlet的destroy()方法。
Servlet接口定义了5个方法:
void init(ServletConfig config) throws ServletException
void service(ServletRequest req, ServletResponse resp) throws ServletException, java.io.IOException
void destory()
java.lang.String getServletInfo()
ServletConfig getServletConfig()
3.get和post请求的区别
- get是用来从服务器上获取数据,而post是用来向服务器传递数据;
- get将表单中数据按照variable=value的形式,添加到action所指向的URL后面,并且两者用"?"连接,变量之间用"&"连接;而post是将表单中的数据放在form的数据体中,按照变量与值对应的方式,传递到action所指定的URL。
- get是不安全的,因为在传输过程中,数据是被放在请求的URL中;而post的所有操作对用户来说都是不可见的。
- get传输的数据量小,这主要应为受url长度限制;而post可以传输大量的数据,所有上传文件只能用post提交。
- get限制form表单的数据集必须为ASCII字符;而post支持整个IS010646字符集。
- get是form表单的默认方法。
4.转发和重定向的区别
转发是服务器行为,重定向是客户端行为。
转发(Forword) 通过RequestDispatcher对象的forward(HttpServletRequest request,HttpServletResponse response)方法实现的。RequestDispatcher可以通过HttpServletRequest 的getRequestDispatcher()方法获得。例如下面的代码就是跳转到login_success.jsp页面。
request.getRequestDispatcher("login_success.jsp").forward(request, response);
重定向(Redirect) 利用服务器返回的状态码来实现的。客户端浏览器请求服务器的时候,服务器会返回一个状态码。服务器通过HttpServletRequestResponse的setStatus(int status)方法设置状态码。如果服务器返回301或者302,则浏览器会到新的网址重新请求该资源。
- 从地址栏显示来说
forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器。浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址。
redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,所以地址栏显示的是新的URL。 - 从数据共享来说
forward:转发页面和转发到的页面可以共享request里面的数据.
redirect:不能共享数据. - 从运用地方来说
forward:一般用于用户登陆的时候,根据角色转发到相应的模块.
redirect:一般用于用户注销登陆时返回主页面和跳转到其它的网站等 - 从效率来说
forward:高.
redirect:低.
5.request.getAttribute()和request.getParameter()有何区别
- request.getParameter()取得是通过容器的实现来取得通过类似post,get等方式传入的数据。
- request.setAttribute()和getAttribute()只是在web容器内部流转,仅仅是请求处理阶段。
- getAttribute是返回对象,getParameter返回字符串
- getAttribute()一向是和setAttribute()一起使用的,只有先用setAttribute()设置之后,才能够通过getAttribute()来获得值,它们传递的是Object类型的数据。而且必须在同一个request对象中使用才有效。,而getParameter()是接收表单的get或者post提交过来的参数
6.Servlet的线程安全
Servlet不是线程安全的,多线程并发的读写会导致数据不同步的问题。解决的办法是尽量不要定义name属性,而是要把name变量分别定义在doGet()和doPost()方法内。虽然使用synchronized(name){}语句块可以解决问题,但是会造成线程的等待,不是很科学的办法。
注意:多线程的并发的读写Servlet类属性会导致数据不同步。但是如果只是并发地读取属性而不写入,则不存在数据不同步的问题。因此Servlet里的只读属性最好定义为final类型的。
7.JSP和Servlet的区别
JSP是Servlet的扩展,本质上是Servlet的简易方式,更强调应用的外表表达。JSP编译后是"类Servlet"。Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是java和HTML可以组合成一个扩展名为.jsp的文件。JSP偏重于视图,Servlet偏重于业务逻辑。
8.jsp静态包含和动态包含的区别
静态包含 <%@include file="xxx.jsp"%>为jsp中的编译指令,其文件的包含是发生在jsp向servlet转换的时期
动态包含<jsp:include page="xxx.jsp">是jsp中的动作指令,其文件的包含是发生在编译时期,也就是将java文件编译为class文件的时期
- 使用静态包含只会产生一个class文件,而使用动态包含会产生多个class文件
- 用静态包含,包含页面和被包含页面的request对象为同一对象,因为静态包含只是将被包含的页面的内容复制到包含的页面中去;而动态包含包含页面和被包含页面不是同一个页面,被包含的页面的request对象可以取到的参数范围要相对大些,不仅可以取到传递到包含页面的参数,同样也能取得在包含页面向下传递的参数
静态包含和动态包含的使用
简单总结一下,就一句话:被包含的页面是静态页面就用静态包含,是动态页面就用动态包含。(当然,不是很绝对,但是这样用没有错。)
9.JSP有哪些内置对象
- request:负责得到客户端请求的信息,对应类型:javax.servlet.http.HttpServletRequest
- response:负责向客户端发出响应,对应类型:javax.servlet.http.HttpServletResponse
- session:负责保存同一客户端一次会话过程中的一些信息,对应类型:javax.servlet.http.httpsession
- out:负责管理对客户端的输出,对应类型:javax.serlvet.jsp.jspwriter
- application:表示整个应用环境的信息,对应类型:javax.servlet.servletcontext
- config:表示ServletConfig,对应类型:javax.servlet.servletconfig
- exception:表示页面中发生的异常,可以通过它获得页面异常信息,对应类型:java.lang.exception
- pagecontext:表示这个JSP页面上下文,对应类型:javax.servlet.jsp.pagecontext
- page:表示当前JSP页面本身。
10.JSP中的四种作用域
JSP中的四种作用域包括page、request、session和application:
- page是代表一个页面相关的对象和属性。一个页面由一个编译好的java servlet类(可以带有include指令,但不可以带有include动作)表示。这既包括servlet又包括编译成servlet的jsp页面。
- request是代表与web客户机发出的一个请求相关的对象和属性。一个请求可能跨越多个页面,涉及多个web组件(由于forware指令和include动作的关系)
- session是代表与用于某个web客户机的一个用户体验相关的对象和属性。一个web回话也可以经常跨域多个客户机请求。
- application是代表与整个web应用程序相关的对象和属性。这实质上是跨域整个web应用程序,包括多个页面、请求和回话的一个全局作用域。
11.Session和cookie的区别
- cookie是会话技术,将用户的信息保存到浏览器的对象。 cookie数据存放在客户的浏览器上,session数据放在服务器上;单个cookie在客户端的限制是3K,就是说一个站点在客户端存放的COOKIE不能3K。
- cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,如果主要考虑到安全应当使用session。
- session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,如果主要考虑到减轻服务器性能方面,应当使用COOKIE。
12.实现会话跟踪的技术
- 隐藏表单域:<input type="hidden">,非常适合步需要大量数据存储的会话应用。
- URL 重写:URL 可以在后面附加参数,和服务器的请求一起发送,这些参数为名字/值对。
- Cookie:一个 Cookie 是一个小的,已命名数据元素。服务器使用 SET-Cookie 头标将它作为 HTTP
响应的一部分传送到客户端,客户端被请求保存 Cookie 值,在对同一服务器的后续请求使用一个
Cookie 头标将之返回到服务器。与其它技术比较,Cookie 的一个优点是在浏览器会话结束后,甚至
在客户端计算机重启后它仍可以保留其值。 - Session:使用 setAttribute(String str,Object obj)方法将对象捆绑到一个会话
13.JQuery常见选择器
1.标签选择器:
$("a");
2.id选择器
$("#a1");
3.class选择器
$(".a2");
4.属性选择器
$("a[id='a1']");
5.组合选择器
$(".a2,#a3");
6.包含选择器
$("p.p1");
7.匹配选择器
$("li:eq(0)","ul.u1")