1. Servlet的生命周期?
- 装载Servlet类并创建实例阶段,该阶段在默认情况下发生在客户端第一次向服务器端发送请求
- 初始化阶段,servlet实例创建完成后,调用init(ServletConfig config)方法对该实例完成初始化工作
- 服务阶段,根据Http请求方式,调用service()方法中对应的doGet()或doPost()方法,并将响应结果返回
- 销毁阶段,当服务器关闭或Servlet容器重新装载Servlet类等情况时,调用destroy()方法释放Servlet所占用的资源
2. JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?
- JSP是Servlet技术的扩展,本质上是Servlet的简易方式,更强调应用的外表表达。
- JSP编译后是"类servlet"。
- Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。
- JSP侧重于视图,Servlet主要用于控制逻辑。
3.forward() 与redirect()的区别?
- forward():转发;redirect():重定向
- 从地址栏显示来说 :
- forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址
- redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,所以地址栏显示的是新的URL.
- 从数据共享来说
- forward:转发页面和转发到的页面可以共享request里面的数据.
- redirect:不能共享数据.
- 从运用地方来说
- forward:一般用于用户登陆的时候,根据角色转发到相应的模块.
- redirect:一般用于用户注销登陆时返回主页面和跳转到其它的网站等.
- 从效率来说
- forward:高.
- redirect:低.
4. get提交和post提交有何区别?
-
get一般用于从服务器上获取数据,post一般用于向服务器传送数据
-
请求的时候参数的位置有区别:
- get的参数是拼接在url后面,用户在浏览器地址栏可以看到
- post是放在http包的包体中,比如说用户注册,你不能把用户提交的注册信息用get的方式吧,那不是说把用户的注册信息都显示在Url上了吗,是不安全的
-
能提交的数据有区别:
- get方式能提交的数据只能是文本,且大小不超过1024个字节
- post不仅可以提交文本还有二进制文件,所以说想上传文件的话,那我们就需要使用post请求方式
-
servlet在处理请求的时候分别对应使用doGet和doPost方式进行处理请求
-
如果不指定名method,则默认为get请求
5. JSP有哪些内置对象,作用是什么?
6.servlet和javaScript的区别,他们分别是什么作用
- 一个是服务端,一个是客户端
- Servlet是独立于平台和协议的服务器端的java应用程序,可以动态生成web页面,并采用响应–请求的模式提供web服务
- javaScript是一种解释性语言,用于向html页面提供交互行为,通常被直接嵌入在html页面中
- servlet是java语言编写的web应用
- js是基于html上的一种解释语言
7. Applet和Servlet有什么区别?
- Applet是运行在客户端主机的浏览器上的客户端Java程序
- Servlet是运行在web服务器上的服务端的组件
- Applet可以使用用户界面类,而Servlet没有用户界面,相反,Servlet是等待客户端的HTTP请求,然后为请求产生响应
8. JSP的九大内置对象,三大指令,七大动作的具体功能?
1. 九大内置对象
- request:对当前请求进行封装
- response:返回服务器端信息给用户
- session:浏览器会话对象,浏览器范围内有效
- application:应用程序对象,对整个web工程都有效
- page:当前页面对象,也就是this
- pageContext:只对当前jsp页面有效,里面封装了基本的request和session的对象
- out:页面打印对象,在jsp页面打印字符串
- config:单个servlet的配置对象,相当于servletConfig对象
- exception:错误页面的exception对象,如果指定的是错误页面,这个就是异常对象
2. 三大指令
- Page:指令是针对当前页面的指令
- Include:用于指定如何包含另一个页面
- Taglib:用于定义和指定自定义标签
3. 七大动作
- Forward:执行页面跳转,将请求的处理转发到另一个页面
- Param:用于传递参数
- Include:用于动态引入一个jsp页面
- Plugin:用于下载javaBean或applet到客户端执行
- useBean:使用javaBean
- setProperty:修改javaBean实例的属性值
- getProperty:获取javaBean实例的属性值
9. Servlet执行时一般实现哪几个方法?
- public void init(ServletConfig config)
- public ServletConfig getServletConfig()
- public String getServletInfo()
- public void service(ServletRequest request,ServletResponse response)
- public void destroy()
10. Servlet和CGI的区别?
- Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法
- 与cgi的区别在于servlet处理服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet
11. 如何现实Servlet的单线程模式?
- 在doGet及doPost方法前加入synchoronized
- JSP:<%@ page isThreadSafe=“true”%>
12. Request对象的主要方法?
- setAttribute(String name,Object):设置名字为name的request的参数值
- getAttribute(String name):返回由name指定的属性值
getAttributeNames():返回request对象所有属性的名字集合,结果是一个枚举的实例 - getCookies():返回客户端的所有Cookie对象,结果是一个Cookie数组
- getCharacterEncoding():返回请求中的字符编码方式
- getContentLength():返回请求的Body的长度
- 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):删除请求中的一个属性
13. JSP四种会话跟踪技术是什么?
会话跟踪技术是用于维持客户端和服务器端通信的技术
- cookie
- url重写
- session
- 隐藏表单域
14. JSP四个作用域是什么?
- page域 数据在一个页面范围内有效,通过pageContext对象访问
- request域 数据在一个服务器请求范围内有效,通过request对象访问
- session域 数据在一次会话范围内容有效,通过session对象访问
- application域 数据在一个应用服务器范围内有效,通过application对象访问
15. 说说Cookie和Session的区别?
- Cookie和Session都是会话技术,Cookie是运行在客户端,Session是运行在服务器端。
- Cookie有大小限制以及浏览器在存cookie的个数也有限制,Session是没有大小限制和服务器的内存大小有关。
- Cookie有安全隐患,通过拦截或本地文件找得到你的cookie后可以进行攻击。
- Session是保存在服务器端上会存在一段时间才会消失,如果session过多会增加服务器的压力。