1、jsp 和 servlet 有什么区别?

jsp 更擅长表现于页面显示,servlet 更擅长于逻辑控制。

Servlet 中没有内置对象,Jsp 中的内置对象都是必须通过 HttpServletRequest 对象,HttpServletResponse 对象以及 HttpServlet 对象得到。

Jsp 是 Servlet 的一种简化,使用 Jsp 只需要完成程序员需要输出到客户端的内容,Jsp 中的 Java 脚本如何镶嵌到一个类中,由 Jsp 容器完成。而 Servlet 则是个完整的 Java 类,这个类的 Service 方法用于生成对客户端的响应。

2、jsp 有哪些内置对象?作用分别是什么?

JSP 有 9 个内置对象:

JSP 一共有 9 个内置对象:

  • 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 页面本身。

3、说一下 jsp 的 4 种作用域?

JSP 中的四种作用域包括 page、request、session 和 application

  • page:代表与一个页面相关的对象和属性。

  • request:代表与 Web 客户机发出的一个请求相关的对象和属性。一个请求可能跨越多个页面,涉及多个 Web 组件;需要在页面显示的临时数据可以置于此作用域。

  • session:代表与某个用户与服务器建立的一次会话相关的对象和属性。跟某个用户相关的数据应该放在用户自己的 session 中。

  • application:代表与整个 Web 应用程序相关的对象和属性,它实质上是跨越整个 Web 应用程序,包括多个页面、请求和会话的一个全局作用域。

4、session 和 cookie 有什么区别?

Cookie:主要用在保存客户端,其值在客户端与服务端之间传送,不安全,存储的数据量有限。

Session:保存在服务端,每一个 session 在服务端有一个 sessionID 作一个标识。存储的数据量大,安全性高。占用服务端的内存资源

cookie 不是很安全,别人可以分析存放在本地的 cookie 并进行 cookie 欺骗,相当重要的数据,应该使用 session 保存到服务端。

session 会在一定时间内保持在服务器上,但是会占用内存资源,当访问的用户过多,会加重服务器的负载,考虑到减轻服务器的压力,可以将不重要的数据放在 cookie 中持久的保存。

单个 cookie 保存的数据不能超过 4k,很多浏览器都限制站点最多保存 20 个 cookie。

由于 HTTP 协议是无状态的协议,所以服务端需要记录用户的状态时,就需要用某种机制来识具体的用户,这个机制就是 Session.典型的场景比如购物车,当你点击下单按钮时,由于 HTTP 协议无状态,所以并不知道是哪个用户操作的,所以服务端要为特定的用户创建了特定的 Session,用用于标识这个用户,并且跟踪用户,这样才知道购物车里面有几本书。

这个 Session 是保存在服务端的,有一个唯一标识。在服务端保存 Session 的方法很多,内存、数据库、文件都有。

集群的时候也要考虑 Session 的转移,在大型的网站,一般会有专门的 Session 服务器集群,用来保存用户会话,这个时候 Session 信息都是放在内存的,使用一些缓存服务比如 Memcached 之类的来放 Session。

这个时候 Cookie 就登场了。每次 HTTP 请求的时候,客户端都会发送相应的 Cookie 信息到服务端。实际上大多数的应用都是用 Cookie 来实现 Session 跟踪的,第一次创建 Session 的时候,服务端会在 HTTP 协议中告诉客户端,需要在 Cookie 里面记录一个 Session ID,以后每次请求把这个会话 ID 发送到服务器,我就知道你是谁了。

5、如果客户端的浏览器禁用了 Cookie 怎么办?

Cookie 其实还可以用在一些方便用户的场景下,设想你某次登陆过一个网站,下次登录的时候不想再次输入账号了,怎么办?

这个信息可以写到 Cookie 里面,访问网站的时候,网站页面的脚本可以读取这个信息,就自动帮你把用户名给填了,能够方便一下用户。这也是 Cookie 名称的由来,给用户的一点甜头。

所以,总结一下:

Session 是在服务端保存的一个数据结构,用来跟踪用户的状态,这个数据可以保存在集群、数据库、文件中;

Cookie 是客户端保存用户信息的一种机制,用来记录用户的一些信息,也是实现 Session 的一种方式。

6、说一下 session 的工作原理?

其实 session 是一个存在服务器上的类似于一个散列表格的文件。里面存有我们需要的信息,在我们需要用的时候可以从里面取出来。

类似于一个大号的 map 吧,里面的键存储的是用户的 sessionid,用户向服务器发送请求的时候会带上这个 sessionid。这时就可以从中取出对应的值了。

Cookie 与 Session,一般认为是两个独立的东西,Session 采用的是在服务器端保持状态的方案,而 Cookie 采用的是在客户端保持状态的方案。

因为 Session 是用 Session ID 来确定当前对话所对应的服务器 Session,而 Session ID 是通过 Cookie 来传递的,禁用 Cookie 相当于失去了 Session ID,也就得不到 Session 了。

手动通过 URL 传值、隐藏表单传递 Session ID。

用文件、数据库等形式保存 Session ID,在跨页过程中手动调用。

7、如何避免 sql 注入?

  • 使用 PreparedStatement 进行参数传递

  • 使用正则表达式过滤传入的参数

  • 字符串过滤

  • JSP 中调用该函数检查是否包函非法字符

  • JSP 页面判断代码

8、什么是 XSS 攻击,如何避免?

XSS 攻击又称 CSS,全称 Cross Site (跨站脚本攻击),其原理是攻击者向有 XSS 漏洞的网站中输入恶意的 HTML 代码,当用户浏览该网站时,这段 HTML 代码会自动执行,从而达到攻击的目的。

XSS 攻击类似于 SQL 注入攻击,SQL 注入攻击中以 SQL 语句作为用户输入,从而达到查询/修改/删除数据的目的,而在 xss 攻击中,通过插入恶意脚本,实现对用户游览器的控制,获取用户的一些信息。 XSS 是 Web 程序中常见的漏洞,XSS 属于被动式且用于客户端的攻击方式。

XSS 防范的总体思路是:对输入(和 URL 参数)进行过滤,对输出进行编码。

9、什么是 CSRF 攻击,如何避免?

CSRF(Cross-site request forgery)也被称为 one-click attack 或者 session riding,中文全称是叫跨站请求伪造。一般来说,攻击者通过伪造用户的浏览器的请求,向访问一个用户自己曾经认证访问过的网站发送出去,使目标网站接收并误以为是用户的真实操作而去执行命令。

常用于盗取账号、转账、发送虚假消息等。攻击者利用网站对请求的验证漏洞而实现这样的攻击行为,网站能够确认请求来源于用户的浏览器,却不能验证请求是否源于用户的真实意愿下的操作行为。

如何避免:

1、验证 HTTP Referer 字段

HTTP 头中的 Referer 字段记录了该 HTTP 请求的来源地址。在通常情况下,访问一个安全受限页面的请求来自于同一个网站,而如果黑客要对其实施 CSRF 攻击,他一般只能在他自己的网站构造请求。因此,可以通过验证 Referer 值来防御 CSRF 攻击。

2、使用验证码

关键操作页面加上验证码,后台收到请求后通过判断验证码可以防御 CSRF。但这种方法对用户不太友好。

3、在请求地址中添加 token 并验证

CSRF 攻击之所以能够成功,是因为黑客可以完全伪造用户的请求,该请求中所有的用户验证信息都是存在于 cookie 中,因此黑客可以在不知道这些验证信息的情况下直接利用用户自己的 cookie 来通过安全验证。要抵御 CSRF,关键在于在请求中放入黑客所不能伪造的信息,并且该信息不存在于 cookie 之中。

可以在 HTTP 请求中以参数的形式加入一个随机产生的 token,并在服务器端建立一个拦截器来验证这个 token,如果请求中没有 token 或者 token 内容不正确,则认为可能是 CSRF 攻击而拒绝该请求。

这种方法要比检查 Referer 要安全一些,token 可以在用户登陆后产生并放于 session 之中,然后在每次请求时把 token 从 session 中拿出,与请求中的 token 进行比对,但这种方法的难点在于如何把 token 以参数的形式加入请求。

对于 GET 请求,token 将附在请求地址之后,这样 URL 就变成 http://url?csrftoken=tokenvalue

而对于 POST 请求来说,要在 form 的最后加上 <input type=”hidden” name=”csrftoken” value=”tokenvalue”/>,这样就把 token 以参数的形式加入请求了。

4、在 HTTP 头中自定义属性并验证

这种方法也是使用 token 并进行验证,和上一种方法不同的是,这里并不是把 token 以参数的形式置于 HTTP 请求之中,而是把它放到 HTTP 头中自定义的属性里。

通过这个类,可以一次性给所有该类请求加上 csrftoken 这个 HTTP 头属性,并把 token 值放入其中。这样解决了上种方法在请求中加入 token 的不便,同时,通过 请求的地址不会被记录到浏览器的地址栏,也不用担心 token 会透过 Referer 泄露到其他网站中去。

10、什么是 Servlet?

可以从两个方面去看 Servlet:

  • API:有一个接口 servlet,它是 servlet 规范中定义的用来处理客户端请求的程序需要实现的顶级接口。

  • 组件:服务器端用来处理客户端请求的组件,需要在 web.xml 文件中进行配置。

11、Servlet 的生命周期,并说出 Servlet 和 CGI 的区别?

servlet 有良好的生存期的定义,包括加载和实例化、初始化、处理请求以及服务结束。

这个生存期由 javax.servlet.servlet 接口中的 init、service、destroy 方法表达。

web 容器加载 servlet,生命周期开始。通过调用 servlet 的 init()方法进行 servlet 的初始化。通过调用 service()方法实现。

根据请求的不同调用不同的 do()方法。结束服务,web 容器调用 servlet 的 destroy()方法。

区别:

Servlet 处于服务器进程中,它通过多线程运行 service()方法,一个实例可以服务于多个请求,并且实例一般不会被销毁;而

CGI 对每个请求都产生一个新的进程,服务完成后就销毁,所有效率低于 Servlet。

12、Servlet API 中 forware()和 redirect()的区别?

1、浏览器显示

重定向会改变 URL 地址,请求转发不会改变 URL 地址。

2、资源共享

重定向不可以资源共享,请求转发可以。

3、功能

重定向可以用 URL 绝对路径访问其他 Web 服务器的资源,而请求转发只能在一个 Web 应用程序内进行资源转发,即服务器内部的一种操作。

4、效率

重定向效率低,相当于再一次请求;请求转发效率相对较高,跳转仅发生在服务器端。

13、什么情况下调用 doGet()和 doPost()?

默认情况是调用 doGet()方法,JSP 页面中的 Form 表单的 method 属性设置为 post 的时候,调用的为 doPost()方法;为 get 的时候,调用 deGet()方法。

14、request.getParameter()和 request.getAttribute()的区别?

1、request.getParameter()获取的类型是 String;

request.getAttribute()获取的类型是 Object

2、request.getPrameter()获取的是 POST/GET 传递的参数值和 URL 中的参数;

request.getAttribute()获取的是对象容器中的数据值/对象

3、request.setAttribute()和 request.getAttribute()可以发送、接收对象;

request.getParamter()只能接收字符串,官方不开放 request.setParamter()(也就是没有这个方法)

setAttribute()和 getAttribute()的传参原理:

setAttribute()是应用服务器把这个对象放在该页面所对应的一块内存中去,当你的页面服务器重定向到另外一个页面时,

应用服务器会把这块内存拷贝到另一个页面所对应的那块内存中。这个就可以通过 getAttribute()获取到相应的参数值或者对象。

15、JSP 有哪些动作?作用分别是什么?

JSP 一共有以下 6 种基本动作

  • JSP:include (当页面被请求的时候引入一个文件)

  • JSP:forward (将请求转到另一个页面)

  • JSP:useBean (获得 JavaBean 的一个实例)

  • JSP:setProperty (设置 JavaBean 的属性)

  • JSP:getProperty (获得 JavaBean 的属性)

  • JSP:plugin (根据浏览器类型为 Java 插件生成 object 或者 embed 两种标记)

16、JSP 常用指令有哪些?

1、page 指令:定义页面的一些属性,常用属性:

contentType=”text/html;charset=utf-8”; 向浏览器端输出数据的编码

pageEncoding=”utf-8”; JSP 编译成 java 文件时所用的编码

session=”true” 是否自动创建 session

2、include 指令:引入一个静态的 JSP 页面

3、taglib 指令:引入一个标签库

17、JSP 中动态 include 和静态 include 的区别?

  • 静态 include:语法:<%@ include file=”文件名” %>,相当于复制,编辑时将对应的文件包含进来,当内容变化时,不会再一次对其编译,不易维护。
  • 动态 include:语法:<jsp:include page=”文件名”>,能够自动检查被包含文件,当客户端对 JSP 文件进行请求时,会重新将对应的文件包含进来,进行实时的更新。

18、页面间对象传递的方法?

request、session、application、cookie 等

19、get 和 post 的区别?

  • get 是用来从服务器上获取数据,而 post 是用来向服务器传递数据;

  • get 将表单中数据按照 variable=value 的形式,添加到 action 所指向的 URL 后面,并且两者用”?”连接,变量之间用”&”连接;而 post 是将表单中的数据放在 form 的数据体中,按照变量与值对应的方式,传递到 action 所指定的 URL。

  • get 是不安全的,因为在传输过程中,数据是被放在请求的 URL 中;而 post 的所有操作对用户来说都是不可见的。

  • get 传输的数据量小,这主要应为受 url 长度限制;而 post 可以传输大量的数据,所有上传文件只能用 post 提交。

  • get 限制 form 表单的数据集必须为 ASCII 字符;而 post 支持整个 IS01 0646 字符集。

  • get 是 form 表单的默认方法。

20、应用服务器有哪些?

BEA Weblogic Server、IBM WebSphere Application Server、Oracle9i Application Server、JBoss、Tomcat。

21、JSP 页面是如何被执行的?JSP 执行效率比 Servlet 低吗?

当客户端向一个 JSP 页面发出请求时,Web Container 转换器将 JSP 转换成 Servlet 的源代码(只是第一次请求时),然后编译转化后的 Servlet 并加载到内存中执行,执行的结果 Response 到客户端。

JSP 只在第一次执行的时候会转化为 Servlet,以后的每次执行 Web 容器都是直接执行编译后的 Servlet,所有 JSP 和 Servlet 只有第一次执行的时候不一样,JSP 慢一点,以后的执行都是相同的。

22、JSP 如何处理运行时异常(run-time)exception?

可是使用页面的 errorPaga 属性捕捉没有处理的运行时异常,然后自动转向到一个错误处理页面,代码如下:

1
<%@page errorPage="错误页面URL"%>

如果在页面请求时出现运行时异常时,以上代码会将代码转向到错误页面,在错误页面里面,可以通过以下代码定义这个页面是错误处理页面:

1
<%@page isErrorPage="true"%>

这样描述错误信息的 Throwable 对象就可以在错误页面里面访问到。

23、如果 JSP 表单元素的值为空,如何避免 null 出现在页面上?

可以写一个简单的函数对空值进行处理,判断值是否为空,如果为空就返回空字符串。实例代码如下:

1
2
<%! String blanknull(String e) { return (e==null)?"":s; } %> <%
<input type="text" name="username" value="<%=blanknull(username)%>" % />

24、如何避免 JSP 页面自动生成 session 对象?为什么要这么做?

在默认情况下,在对一个 JSP 页面发出请求时,如果 session 还没有建立,那么 JSP 页面会自动为请求创建一个 session 对象,但是 session 是比较消耗资源的,如果没有必要保持和使用 session,就不应该创建 session,例如一些只用来宣传产品的网页,往往没必要使用 session 来保存信息,可以在 JSP 中使用 page 指令进行设置,避免 JSP 页面为每个请求都自动创建 session。实例代码如下:

1
<%@page session="false"%>

25、在 servlet 和 JSP 之间能共享 session 对象吗?

1
2
HttpSession session=request.getsession(false);
session.getAttribute"变量名"); //获取保存在session容器中的变量

26、使用 JSP 连接数据库连接缓冲池的最好的方法是什么?

  • 使用 JDBC2.0 中带有此服务的 Driver

  • 使用提供此服务的 application server

27、如何实现 servlet 的单线程模式?

在 JSP 中使用 page 指令进行设置,具体代码如下:

1
<%@page isThreadSafe="false"%>

28、XML 文档定义有几种形式?他们之间有何本质区别?解析 XML 文档有哪几种方式?

两种形式:DTD、schema

本质区别:schema 本身是 xml 的,可以被 XML 解析器解析(这也是从 dtd 上发展 schema 的根本目的。)

解析 XML 文档的方式有 DOM、SAX、STAX 等

  • DOM:处理大型文件时性能下降的非常厉害。这个问题是由 DOM 的树结构所造成的,这种结构占用的内存较多,而且 DOM 必须在解析文件之前就把整个文档装入内存,适合对 XML 的随机访问;

  • SAX:是事件驱动型的 XML 解析方式。它顺序读取 XML 文件,不需要一次全部装载这个 XML 文件。当遇到向文件开头、文件结束或者标签开头、标签结束时,它会触发一个事件,用户通过在其回调事件中写入处理代码来处理 XML 文件,适合对 XML 的顺序访问。

  • STAX:Streaming API for XML

29、你在项目中用到了 XML 技术的哪些方面?如何实现的?

用到了数据存储、信息配置两方面。

在做数据交换平台时,将不能数据源的数据组装成 XML 文件,然后将 XML 文件压缩打包加密后通过网络传送给接受者,接收解密与解压缩后再同 XML 文件中还原相关信息进行处理。

在做软件配置时,利用 XML 可以和方便的进行,软件的各种配置参数都存储在 XML 文件中。

30、EL 表达式的功能,为什么要用 EL 表达式?(Expression Language)

功能

  • 从四个域对象中取出数据数据显示。

  • 取出请求参数数据显示。

原因

在页面中用 jsp 脚本和 jsp 表达式来获取数据显示比较麻烦

  • 需要判断

  • 可能需要强转

31、JSTL 的功能,为什么要用 JSTL?(JavaServer Pages Standard Tag Library)

功能:主要用于基本输入输出、流程控制、循环、XML 文件剖析、数据库查询及国际化和文字格式标准化的应用等。

原因:在 jsp 页面做条件判断或者循环操作并输出时,比较费力。

33、为什么要使用自定义标签?MyTag 如何实现?

原因:

  • 不想在 jsp 中编写 java 代码

  • JSTL 标签库不能满足实际项目的需求

实现的流程:

1、编写标签处理器类(SimpleTagSupport 的实现类)

重写 doTag()

2、编写标签库文件(WEB-INF/xxx.tld)

整个文件的定义:<short-name> uri

标签的定义:<tag>

3、在 jsp 页面中使用标签:

导入标签库(xxx.tld)

使用标签

34、说说自动登录功能的编码实现?

  1. 登录功能是用 session 实现的,就是向 session 对象中保存当前用户的对象。

  2. 自动功能是用 cookie 实现的,就是登录时将用户的信息保存为持久 cookie。

  3. 下次访问时,读取请求中如果有用户信息的 cookie 就可以自动登录。

35、如何防止表单重复提交?

使用 session 技术:

在 regist.jsp 页面中生成一个为一个随机值,将其保存到 session 中,同时将其保存为表单的隐藏域的值。

在处理注册的请求时,获取 session 中的值,获取请求参数的值,比较两者是否相同,如果相同说明不是重复提交,请求通过同时删除 session 中保存的的值,如果不相同则是重复提交,不能通过。

36、什么是 Tomcat,怎样启动停止,配置文件,日志文件的存储?

Tomcat 是一种 web 服务器,java 编写的 web 项目可以部署在上面,用户在客户端请求时,都是将请求发到 Tomcat 上,Tomcat 在将请求发到对应的项目上。

启动 Tomcat:

在 windows 下:进入 bin 目录,双击 startup.bat

在 Linux 下:cd 进入 bin 目录,sh startup.sh

在开发工具 Eclipse 下:右键选择 debug server 或者 run server

停止 Tomcat:

在 windows 下:进入 bin 目录,双击 shutdown.bat

在 Linux 下:cd 进入 bin 目录,sh shutdown.sh

配置文件,日志文件的存储

配置文件在 Tomcat 的 config 目录下

日志文件在 Tomcat 的 logs 目录下

37、实例化 servlet 有几种方式?

有两种方式

  • 第一次请求时,实例化 servlet 对象

  • 在 web.xml 文件中,在 servlet 标签中添加 loadon-startup 标签,tomcat 启动时就会实例化 servlet 对象。

38、JSP 乱码如何解决?

1、JSP 页面乱码

1
<%@page contentType="text/html;charset=utf-8" %>

2、表单提交时出现乱码

1
request.setCharacterEncoding("utf-8");

3、数据库出现乱码

1
jdbc:mysql://localhost:3306:/user?useSSL=false&useUnicode=true&characterEncoding=utf-8;

其实我一般的处理的方法就是配置一个过滤器对每个 JSP 页面进行字符集处理。

39、session 和 application 的区别?

1、两者的作用范围不同

session 是用户级别的,application 是 web 应用程序级别的,是一个全局作用域。

一个用户一个 session,每个用户的 session 不同,用户所访问的网站多个页面共享同一个 session。

一个 web 应用程序一个 application 对象,每个 web 应用程序的 application 对象不同,但是一个 web 应用程序的多个用户之间共享一个 application。

2、生命周期不同

session:用户首次在网站中发出请求创建 session,用户注销、离开网站或者关闭浏览器消亡。

application:启动 web 服务器创建,关闭 web 服务器销毁。

40、如何从 form 表单中获取 checkbox 的值?

可以在页面将 checkbox 的 name 属性设置相同,value 属性取每个条目的 id,在后台使用 request.getParametervalues(”name”);获取一组值。

41、过滤器有哪些作用?

  • 可以验证客户是否来自可信的网络

  • 可以对客户提交的数据进行重写编码

  • 可以从系统里获得配置的信息

  • 可以过滤掉客户某些不应该出现的词汇

  • 验证客户是否登录

  • 验证客户的浏览器是否支持当前的应用

  • 可以记录系统的日志

42、过滤器的用法?(对客户端的请求统一编码和对客户端进行验证)

实现 Filter 接口,同时重写 Filter 接口的三个方法:

  • init(FilterConfig config) 用于获取 FilterConfig 对象

  • doFilter(ServletRequest request,ServeltResponse response,FilterChain chain) 进行过滤处理一些业务

  • destroy() 销毁 Filter

43、什么是事务?

事务时作为一个逻辑单元执行的一系列操作,一个逻辑工作单元必须有四个属性,称为 ACID(原子性、一致性、隔离性和持久性)属性,只有这样才能成为一个事务:

  • 原子性:事务必须是原子工作单元,对于其数据修改,要么全都执行,要么全都不执行。

  • 一致性:事务在完成时,必须使所有的数据保持一致的状态。在相关数据库中,所有规则都必须应用于事务的修改,以保持所有数据的完整性。事务结束时,所有的内部数据结构(如 B 树索引或双向链表)都必须是正确的。

  • 隔离性:由并发事务所做的修改必须与任何其他并发事务所做的修改隔离。事务查看数据时数据所处的状态,要么是另一并发事务修改它之前的状态,要么是另一并发事务修改它之后的状态,事务不会查看中间状态的数据。这称为可串行性,因为它能够重新装载起始数据,并且重播一系列事务,以使数据结束时的状态与原始事务执行的状态相同。

  • 持久性:事务完成后,它对于系统的影响是永久性的。该修改即使出现系统故障也将一直保持。

44、存储过程和函数的区别

存储过程是用户定义的一系列 sql 语句的集合,涉及特定表或者其他对象的任务,用户可以调用存储过程,而函数通常是数据库

已定义的方法,它接受参数并返回某种类型的值并且不涉及特定用户表。

45、什么是 web 容器?

给处于其中的应用程序组件(JSP、Servlet)提供一个环境,是 JSP、Servlet 直接跟容器中的变量交互,不必关注其他系统问题。

主要有 web 服务器来实现。例如:tomcat、weblogic、sphere、JBoss 等。该容器提供的接口严格遵守 J2EE 规范中的 web application 标准。我们把遵守以上标准的 web 服务器叫做 J2EE 的 web 容器。

46、Request 对象的主要方法有哪些?

  • setAttribute(String name,Object):设置名字为 name 的 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):删除请求中的一个属性

47、Tomcat 根目录下有哪些文件?

  • config:配置文件存放路径

  • webapps:项目部署的目录

  • bin Tomcat 运行需要的脚本与 jar 的目录

  • lib:运行项目时所需要的 jar 的目录

  • word:部署项目的缓存目录

  • temp:临时文件的存放目录

  • logs:记录日志的目录