1、  什么是servlet?
servlet是用来处理客户端请求并产生动态网页内容的java类

2、 
Tomcat的缺省端口是多少,怎么修改?

a)     
默认端口号是8080

b)     
修改步骤:

i.         
打开tomcat的安装目录,找到conf文件

ii.         
找到其中的server.xml,打开后找到其中的

<connector connectionTimeout=”20000” port=”8080”

改变其中的8080就可以了

3、 
Tomcat有哪几种Connector运行模式(优化)?

a)     
BIO

i.         
一个线程处理一个请求,缺点:并发量高的时候,线程数较多,浪费资源

Tomcat7或以下,在Linux系统中默认使用这种方式

b)     
NIO

i.         
利用java的异步IO处理,可以通过少量的线程处理大量的请求
Tomcat8在Linux系统中默认使用这种方式。
Tomcat7必须修改Connector配置来启动
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"

connectionTimeout="20000" redirectPort="8443"/>

c)     
APR

i.         
即Apache Portable Runtime,从操作系统层面解决IO阻塞问题
Tomcat7或Tomcat8在Win7或以上的系统中启动默认使用这种方式
Linux如果安装了apr和native,Tomcat直接启动就支持apr。

4、 
Tomcat有几种部署方式?

a)     
第一种:直接将web项目文件拷贝到webapps目录中

b)     
第二种:修改sercer.xml文件。在conf下的server.xml文件里找到Host标签,在里面添加如下代码:
<Context path="/jfinal_demo"
docBase="F:\work\jfinal_demo\WebRoot" 
reloadable ="true" debug="0" privileged="true"></Context>

c)     
第三种:在conf\Catalina\localhost目录下添加xml配置文件
新建名为jfinal_demo.xml文件,文件内容配置如下:
<Context path="/jfinal_demo"
docBase="F:\work\jfinal_demo\WebRoot" 
reloadable ="true" debug="0"
privileged="true"></Context>

5、 
Servlet生命周期

a)     
加载Servlet
web容器负责加载servlet,当web容器启动时或者是在第一次使用这个servlet时,容器会负责创建servlet实例

b)     
 初始化
当一个servlet加载后,容器将调用init()方法初始化这个对象,初始化的目的是为了让servlet在处理客户端请求前完成一些初始化的工作

c)     
请求处理
当有请求提交时,servlet将调用service()方法进行处理客户端请求,并且会根据不同的请求调用不同的doGet()或doPost()方法

d)     
销毁
当web容器关闭或检测到一个servlet实例要从服务器中被移除时,容器就会调用destroy()方法,以便让该实例释放掉所占用的资源

6、 
Get()与post()的区别?

a)     
Get是向服务器发送、索取数据的一种请求,而post是向服务器提交数据的一种请求

b)     
Get方式传递数据安全性较低,post方式比较安全。但是post方式的执行效率比get方式要差一些

c)     
Get请求方式将请求信息放在URL后面,请求信息和URL之间以“?”隔开,这种请求方式直接将请求信息暴露在URL中;
post请求方式将请求信息放置在报文体中,想获得请求信息必须解析报文

7、 
doGet与doPost方法的两个参数是什么?什么情况下调用

a)     
HttpServletRequest和HttpServletResponse

b)     
JSP页面中的form标签里的method属性为get时调用doGet()为post时调用doPost();超链接跳转页面时调动的是doGet()

8、 
获取页面的元素的值有几种方式?分别说一下

a)     
用<input>输入域提交参数

b)     
request.setAttribute();在下个页面直接request.getAttriute()得到

c)     
<jsp:forward=”你要跳转的页面”>
<jsp:param>你要传递的参数

d)     
用session域对象

e)     
url?a=””&b=””

9、 
request.getAttribute()和request.getParameter()区别

a)     
都是HttpServletRequest中的方法,用来传递数据的

b)     
getParameter():响应的是web客户端向web服务端通过点击链接或提交按钮传递数据,代表HTTP请求数据;获取的是post/get传递的参数值
    getAttribute():是获取对象容器中的数据,获取的是session的值

c)     
getParameter():只能得到String类型数据
    getAttribute():可以接受String类型,也可以是对象

10、        
forward(转发)和redirect(重定向)的区别

a)     
forward:requset.getRequsetDispatcher(“/***.jsp”).forward(request,response)
    redirect:response.sendRedirect(“/***.jsp”)

b)     
forward是服务器端发起的请求;redirect是客户端发起的请求;

c)      forward只有一次请求;redirect会产生2次请求。

d)     
forward数据会同时转发过去;redirect数据不会同时传递过去。

11、        
什么是cookie?什么是session?session和cookie的区别

a)     
Cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息,它的过期时间可以任意设置,如果不主动清除,很长一段时间都能保留

b)     
Session是在无状态的HTTP协议下,服务端记录用户状态时用于标识具体用户的机制,它是在服务端保存的用来跟踪用户的状态的数据结构,可以保存在文件、数据库、或者集群中。

c)     
他们都是一种会话技术,区别如下

i.         
Session:
        数据存放在服务端,安全(只存放和状态相关的)
        session不仅仅是存放字符串,还可以存放对象
        session是域对象(session本身是不能跨域的,但可以通过相应技术来解决)
        sessionID的传输默认是需要cookie支持的

ii.         
Cookie
        数据存放在客户端,不安全(存放的数据一定是和安全无关紧要的数据)
        cookie只能存放字符串,不能存放对象
        cookie不是域对象(Cookie是支持跨域的)

12、        
Tomcat是如何创建servlet类实例?用到了什么原理

a)     
当tomcat启动时,会读取在webapps目录下所有的web应用中的web.xml文件。然后对xml文件进行解析,并读取servlet注册信息。然后将每个应用中注册的servlet类都进行加载,并通过反射的方式实例化

13、        
Servlet安全性问题

a)     
因为servlet是单列模式创建的,只实例化一次,同一个servlet可以处理多个用户请求,当同时有两个用户访问时,则会启动两个负责处理请求的servlet线程,所以会出现线程安全问题

b)     
解决方案:

i.         
在servlet中定义变量时,尽量都定义局部变量。在servlet中负责保存上下文ServletContext和负责处理session对象的HttpSession是线程不安全的,而负责处理请求的servletRequest是线程安全的

ii.         
加锁:用synchronized进行保护,但是要尽量的缩小保护范围

14、        
JSP与servlet的区别

a)     
JSP本质上就是一个简易的servlet,Web容器将JSP代码编译成JVM能识别的java类

b)     
Jsp更擅长表现于页面显示,servlet更擅长于逻辑控制

15、        
JSP的内置对象有哪些,作用是什么

a)     
Request :本质上就是HttpServletRequest,包含用户端请求的信息,就是请求对象

b)     
Response :本质上就是HttpServletResponse,包含服务器传回客户端的响应信息,就是响应对象

c)     
Session : 是HttpSession,是一个会话对象,主要用于保存状态

d)     
Application : 是servletContext,指的的整个web应用

e)     
Page : 指整个jsp页面,类似this伪对象

f)      
PageContext : 主要用于管理整个jsp页面

g)     
Exception : 异常对象,jsp页面上的异常都会封装在这里面

h)     
Config : 本质上就是servletConfig对象

i)      
Out :主要用于输出数据

16、        
JavaWeb中四大域对象及作用范围

a)     
PageContext : 作用范围在整个页面(一个页面)

b)     
HttpRequest : 作用范围在一次请求

c)     
HttpSession : 这是JavaWeb的一种会话机制,作用在整个会话中

d)     
ServletContext :作用范围在整个web应用

17、 JSP和HTML之间的关系

a)      JSP是简单的servlet,是在服务端执行的,通常返回客户端的是一个HTML文本

18、 JSP静态包含和动态包含的区别

a)      静态包含:<%@ include file=”被包含的页面” %>
    动态包含:<jsp:include page=”被包含的页面” flush=“true” >

b)     
静态包含在翻译的时候,将多个JSP翻译成一个servlet
    动态包含在翻译的时候,将多个JSP翻译成多个servlet,在程序运行加载到JVM中的时候,动态合并,动态包含可以传递数据

c)     
静态包含,编辑器引入,先包含在运行
    动态包含,运行期引入,先运行,把结果引入

19、 JSP是如何被执行的?执行效率会比servlet低嘛?

a)     
JSP本质上是一个简单的servlet,在执行JSP的时候,会被转译成一个*_jsp.java的java文件,然后再跟寻常的java文件一样被解析成一个class文件,最后被jre执行

b)     
与servlet相比,第一次执行效率比较低,因为第一次会被转化为servlet,之后执行效率都相同

20、 JSP和servlet的区别、共同点、各自应用的范围?

a)     
JSP在本质上就是servlet,但两者的创建方式不一样,servlet完全是java程序代码构成擅长于流程控制和事务处理而通过的servlet类生成动态网页;JSP由HTML代码和JSP标签构成,可以方便的编写动态网页

b)     
采用Servlet来控制业务流程;用JSP来生成动态网页

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

a)     
<%@ page
session=”false”>

b)     
在默认情况下,在对一个JSP页面发出请求时,如果session还没建立,JSP页面会自动为请求建立一个Session对象,但是session是比较消耗资源的,如果没有必要保持和使用session,就不应该创建session

22、 自定义标签要继承哪个类

a)     
可以继承TagSupport或者BodyTagSuppot,两者的差别是前者适用于没有主题的标签,而后者适用于有主题的标签

b)     
若选择TagSupport,可以实现doStartTag和doEndTag这两个方法实现Tag的功能;如果选择继承BodyTagSupport,可以实现doAfterBody这个方法

Servlet+JSP及Tomcat常见面试题(面试必备)的更多相关文章

  1. Tomcat学习总结(14)—— Tomcat常见面试题

    一.Tomcat的缺省是多少,怎么修改 Tomcat的缺省端口号是8080. 修改Tomcat端口号: 1.找到Tomcat目录下的conf文件夹 2.进入conf文件夹里面找到server.xml文 ...

  2. tomcat常见面试题1

    一.Tomcat的缺省是多少,怎么修改 Tomcat的缺省端口号是8080. 修改Tomcat端口号: 1.找到Tomcat目录下的conf文件夹 2.进入conf文件夹里面找到server.xml文 ...

  3. 【搞定 Java 并发面试】面试最常问的 Java 并发基础常见面试题总结!

    本文为 SnailClimb 的原创,目前已经收录自我开源的 JavaGuide 中(61.5 k Star![Java学习+面试指南] 一份涵盖大部分Java程序员所需要掌握的核心知识.欢迎 Sta ...

  4. 【搞定 Java 并发面试】面试最常问的 Java 并发进阶常见面试题总结!

    本文为 SnailClimb 的原创,目前已经收录自我开源的 JavaGuide 中(61.5 k Star![Java学习+面试指南] 一份涵盖大部分Java程序员所需要掌握的核心知识.觉得内容不错 ...

  5. Java面试炼金系列 (1) | 关于String类的常见面试题剖析

    Java面试炼金系列 (1) | 关于String类的常见面试题剖析 文章以及源代码已被收录到:https://github.com/mio4/Java-Gold 0x0 基础知识 1. '==' 运 ...

  6. Spring 常见面试题总结 | JavaGuide

    首发于 JavaGuide 在线网站:Spring 常见面试题总结 最近在对 JavaGuide 的内容进行重构完善,同步一下最新更新,希望能够帮助你. Spring 基础 什么是 Spring 框架 ...

  7. SpringMVC常见面试题总结(超详细回答)

    SpringMVC常见面试题总结(超详细回答) 1.什么是Spring MVC ?简单介绍下你对springMVC的理解? Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的 ...

  8. JDBC常见面试题

    以下我是归纳的JDBC知识点图: 图上的知识点都可以在我其他的文章内找到相应内容. JDBC常见面试题 JDBC操作数据库的步骤 ? JDBC操作数据库的步骤 ? 注册数据库驱动. 建立数据库连接. ...

  9. JAVA常见面试题问题简述(持续更新中)

    JAVA常见面试题问题简述 1. springcloud和dubbo的区别 ①相比之下springcloud 的社区会更加活跃,解决问题的速度也会越来越快,dubbo相对来说如果碰到没有解决的问题,就 ...

随机推荐

  1. 你不知道的JavaScript--Item1 严格模式

    本文转自[阮一峰博客]:http://www.ruanyifeng.com/blog/2013/01/javascript_strict_mode.html 一.概述 除了正常运行模式,ECMAscr ...

  2. GitHub 系列之「Git 进阶」

    1.用户名和邮箱 我们知道我们进行的每一次 commit 都会产生一条 log,这条 log 标记了提交人的姓名与邮箱,以便其他人方便的查看与联系提交人,所以我们在进行提交代码的第一步就是要设置自己的 ...

  3. Java 学习笔记 (一) If 语句

    接触到的教程中if语句所包含boolean表达式都是以数字作为举例,所以误以为string类型的值也可以这样判断,结果发现下面的脚本不工作: String sysTitle = driver.getT ...

  4. disk.go

    package disk import "syscall" //空间使用结构体 type DiskStatus struct {     Size uint64     Used ...

  5. Tensorflow学习-数据读取

    Tensorflow数据读取方式主要包括以下三种 Preloaded data:预加载数据 Feeding: 通过Python代码读取或者产生数据,然后给后端 Reading from file: 通 ...

  6. vue不是内部或外部命令解决验证方案

    一.前提 1.该教程是在你已经安装配置好node.js和express情况下 2.你已经完成了vue和vue-cli的全局安装 3.完成以上2步后,使用vue指令,会显示"vue不是内部或外 ...

  7. Typora + Mathpix Snip,相见恨晚的神器

    word 文档虽然很好,但当我需要输入一大堆公式的时候,word 公式让我疯狂. Why markdown?首先,GitHub 上都在用,那我也得会吧,不然 README.md 怎么写:其次,mark ...

  8. MIP 技术进展月报:储存功能全新上线,MIP-Cache域名升级,校验更严谨

    集 ** 瞬时触达用户.高转化率.炫酷闪电标.优质展现形式 ** 等诸多特性为一体的 MIP 页面吸引了众多站点进行改造.为了更好地服务于广大站长,更快地倾听站长们的声音,MIP 技术团队特推出< ...

  9. js十大排序算法

    排序算法说明: (1)对于评述算法优劣术语的说明 稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面:不稳定:如果a原本在b的前面,而a=b,排序之后a可能会出现在b的后面: 内排序:所有排 ...

  10. Python练习:九九乘法表

    打印 n * n 的乘法表 #打印 9*9 乘法表 def Multiplication(n): # n - 定义打印的行数 max_len = len(str((n)**2)) #计算最大值的占位( ...