Servlet+JSP及Tomcat常见面试题(转载+汇总)

Servlet+JSP及Tomcat常见面试题

文章转发自博客园,原作者喝咖啡的睡眠族
原文链接:Servlet+JSP及Tomcat常见面试题(面试必备)

1、 什么是servlet?

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

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

a) 默认端口号是8080

b) 修改步骤:

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

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

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

  1. 改变其中的8080就可以了

3、 Tomcat的目录结构

目录名作用
bin存放tomcat启动和关闭脚本文件的目录
conf存放tomcat配置文件的目录
lib存储tomcat启动和运行过程中的jar包
logs存储tomcat日志信息的目录
temp存储tomcat临时文件的目录
webapps存储tomcat中web应用的目录,这些应用可以被外界访问。
work存储tomcat运行时产生的文件的目录

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

a) BIO

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

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

b) NIO

利用java的异步IO处理,可以通过少量的线程处理大量的请求
Tomcat8在Linux系统中默认使用这种方式。
Tomcat7必须修改Connector配置来启动

<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" connectionTimeout="20000" redirectPort="8443"/>

c) APR

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

5、 Tomcat有几种部署方式?

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

  • 第二种:修改sercer.xml文件。在conf下的server.xml文件里找到Host标签,在里面添加如下代码:

<Context path="/jfinal_demo" docBase="F:\work\jfinal_demo\WebRoot" reloadable ="true" debug="0" privileged="true"></Context>

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

6、 什么是虚拟主机,什么是web应用

  • 一台真实的tomcat服务器上,可以存在多个网站,这些网站在访问者看来是运行在各自独立的服务器当中 ,但是真实情况确实运行在同一台tomcat服务器中,所以这些网站可以称之为运行在真实服务器中的虚拟主机一个网站就是一个虚拟主机
  • 虚拟主机无法直接管理web资源因为web资源涉及到的功能众多,管理维护十分繁琐。可以将同一功能的web资源放入一个目录当中,这个目录被虚拟主机管理。 这样的一个目录就称之为web应用目录。一个功能创建一个web应用目录。

7、 Servlet生命周期

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

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

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

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

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

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

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

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

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

  • HttpServletRequest和HttpServletResponse

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

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

  • <input>输入域提交参数

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

  • <jsp:forward="你要跳转的页面">
    <jsp:param="你要传递的参数">

  • 用session域对象

  • url?a=””&b=””

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

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

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

  • getAttribute():是获取对象容器中的数据,获取的是session的值

  • getParameter():只能得到String类型数据

  • getAttribute():可以接受String类型,也可以是对象

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

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

2、forward是服务器端发起的请求;redirect是客户端发起的请求;

3、forward只有一次请求;redirect会产生2次请求。

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

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

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

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

3、 他们都是一种会话技术,区别如下

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

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

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

15、 Servlet安全性问题

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

  • 解决方案:

    1. 在servlet中定义变量时,尽量都定义局部变量。在servlet中负责保存上下文ServletContext和负责处理session对象的HttpSession是线程不安全的,而负责处理请求的servletRequest是线程安全的
    2. 加锁:用synchronized进行保护,但是要尽量的缩小保护范围

16、 JSP与servlet的区别

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

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

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

内置对象(前四为四大域对象)作用
Request本质上就是HttpServletRequest,包含用户端请求的信息,就是请求对象
Response本质上就是HttpServletResponse,包含服务器传回客户端的响应信息,就是响应对象
SessionHttpSession,是一个会话对象,主要用于保存状态
ApplicationservletContext,指的的整个web应用
Page指整个jsp页面,类似this伪对象
PageContext主要用于管理整个jsp页面
Exception异常对象,jsp页面上的异常都会封装在这里面
Config本质上就是servletConfig对象
Out主要用于输出数据

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

域对象作用域
PageContext作用范围在整个页面(一个页面)
HttpRequest作用范围在一次请求
HttpSession这是JavaWeb的一种会话机制,作用在整个会话中
ServletContext作用范围在整个web应用

19、 JSP和HTML之间的关系

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

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

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

  • 静态包含在翻译的时候,将多个JSP翻译成一个servlet

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

  • 静态包含,编辑器引入,先包含再运行
    动态包含,运行期引入,先运行,把结果引入

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

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

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

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

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

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

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

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

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

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

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

25、 Listener与Filter的区别

Listener监听器、Filter过滤器、Interceptor拦截器是servlet的三大技术
示意图

  • Listener
    一旦满足监听器的条件,就会触发对应的操作,执行监听器中的动作。
    Listener随着web项目的开始而开始,只初始化一次,web项目的结束而结束。
    最先开始加载web.xml文件,随着web.xml同时加载,里面的参数同时加载到服务器里。
    主要作用: 将重复的代码简化,做一些初始化的内容添加工作、设置一些基本的内容、比如一些参数或者是一些固定的对象等等。

    • 监听器有 三类八种
      • 监听三大作用域的 创建与销毁 的监听器
        ServletContextListener
        HttpSessionListener
        ServletRequestListener
      • 监听三大作用域中属性变化的监听器
        ServletContextAttributeListener
        HttpSessionAttributeListener
        ServletRequestAttributeListener
      • 监听JavaBean在Session域中状态变化的监听器
        HttpSessionBindingListener
        HttpSessionActivationListener
  • Filter
    过滤请求与响应
    Filter跟web应用一起启动当web应用重新启动或销毁时,Filter也被销毁
    Filter对浏览器传递过来的参数进行过滤,浏览器传给Filter处理完以后,将请求再传给Servlet
    主要作用: 过滤字符编码,做一些应用逻辑判断如30天自动登录等

    • 实现Filter接口,重写 doFilter(ServletRequest request,ServletResponse response) 方法

    过滤器在执行过程中任何时候都可以打断,只要不执 chain.doFilter() 方法就不会再执行后面的过滤器和请求的内容。因此,要特别注意过滤链的执行顺序问题。假如在逻辑出现两次doFilter会导致有些页面会执行两次。

26、JavaEE的十三个核心规范

  1. JDBC(java Database Connectivity)

    JDBC API为访问不同的数据库提供了一种统一的途径,就像ODBC一样,JDBC对开发者屏蔽了一些细节问题,同时,JDBC对数据库的访问也具有平台无关性。

    生活实例:我们的粮仓,一般会配一个仓库管理员,对于仓库的事,找他就行,他拿着钥匙,和保存各个仓库的具体数据信息!

  2. JNDI(Java Name and Directory Interface)

    JNDI API 被用于执行名字和目录服务。它提供了一致的模型用来存取和操作企业级的资源如DNS和LDAP,本地文件系统,或应用服务器中的对象。

    生活实例:花名册,或者族谱,我们每个人出生在族谱中登记一个名字,这样我们根据名字就可以知道这个人的来龙去脉!

  3. EJB(Enterprise JavaBean)

    JavaEE技术之所以赢得全体广泛重视的原因之一就是EJB,他们提供了一个框架开发和实施分布式商务逻辑,由此很显著简化了具有可伸缩性和高度复杂的企业级应用开发。EJB规范定义了EJB组件何时如何与他们的容器继续拧交互作用。容器负责提供公用的服务,例如目录服务、事务管理、安全性、资源缓冲池以及容错性。但是注意的是,EJB并不是J2EE的唯一途径。正是由于EJB的开放性,使得有的厂商能够以一种和EJB平行的方式来达到同样的目的。

    生活实例:EJB到底是什么,这个……我暂时的理解,就是个特殊的类,特殊在他可以实现分布式的服务,就是多个人可以同时分布干一件事,总之还有点晕!

  4. RMI(Remote Method Invoke)1

    正如其名字所表示的那样,RMI协议调用远程对象上方法。它使用了序列化方式在客户端和服务器端传递数据。RMI是一种被EJB使用的更底层的协议。

  5. Java IDL(接口定义语言)/CORBA(公共对象请求代理结构)(Common Object Request Breaker Architecture)

    在java IDL的支持下,开发人员可以将Java和CORBA集成在一起。他们可以创建Java对象并使之可以在CORBA ORB中展开,或者他们还可以创建Java类并做为和其他ORB一起展开的CORBA对象客户。后一种方法提供了另外一种途径,通过它可以被用于你的新的应用和旧系统相集成。

  6. JSP(Java Server Pages)

    Jsp页面由html代码和嵌入其中的Java新代码所组成。服务器在页面被客户端所请求以后对这些java代码进行处理,然后将生成的html页面返回给客户端的浏览器。

  7. Java Servlet

    servlet是一种小型的java程序,它扩展了web服务器的功能。作为一种服务器端的应用,当被请求时开始执行,这和CGI Perl脚本很相似。Servlet提供的功能大多和jsp类似,不过实现方式不同。JSP通过大多数的html代码中嵌入少量的java代码,而servlet全部由java写成并生成相应的html。

  8. XML(Extensible Markup Language)

    XML是一种可以用来定义其他标记语言的语言。它被用来在不同的商务过程中共享数据。XML的发展和Java是互相独立的,但是,它和java具有相同目标正是平台独立。通过java和xml的组合,我们可以得到一个完美的具有平台独立性的解决方案。

  9. JMS(Java Message Service)

    JMS是用于和面向消息的中间件相互通信的应用程序接口(API)。它既支持点对点的域,有支持发布/订阅类型的域,并且提供对下列类型的支持:经认可的消息传递,事务性消息传递,一致性消息和具有持久性的订阅者的支持。JMS还提供了另一种方式对您的应用与旧的后台系统相集成。

  10. JTA(Java Transaction Architecture)

    Java事务API。允许应用程序执行分布式事务处理——在两个或多个网络计算机资源上访问并且更新数据。JDBC驱动程序的JTA支持极大地增强了数据访问能力。事务最简单最直接的目的就是保证数据的有效性,数据的一致性。

    个人理解: JTA事务比JDBC事务更强大。一个JTA事务可以有多个参与者,而一个JDBC事务则被限定在一个单一的数据库连接。

  11. JTS(Java Transaction Service)

    JTS是CORBA OTS事务监控的基本的实现。JTS规定了事务管理器的实现方式。该事务管理器是在高层支持Java Transaction API (JTA)规范,并且在较底层实现OMG OTSspecification的Java映像。JTS事务管理器为应用服务器、资源管理器、独立的应用以及通信资源管理器提供了事务服务。

  12. JavaMail

    JavaMail是用于存取邮件服务的API,它提供了一套邮件服务器的抽象类。不仅支持SMTP服务器,也支持IMAP服务器。

  13. JAF(JavaBeans Activation Framework)

    JAF是一个专用的数据处理框架,它用于封装数据,并为应用程序提供访问和操作数据的接口.也就是说,JAF让Java程序知道怎么对一个数据源进行查看,编辑,打印等.

    JavaMail利用JAF来处理MIME编码的邮件附件。MIME的字节流可以被转换成Java对象,或者转换自Java对象。大多数应用都可以不需要直接使用JAF。


  1. remote(遥远的) invoke(调用) ↩︎

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
学生成绩管理系统是一个比较典型的Web应用程序,可以使用Java ServletJSP技术实现。下面是一个简单的实现步骤: 1. 确定系统功能和设计数据库表 首先,我们需要确定学生成绩管理系统的功能需求,例如学生信息管理、课程信息管理、成绩录入和查询等等。然后,设计数据库表格以存储数据。 例如,我们可以设计以下几个表格: 学生表(Student):学生ID、姓名、性别、出生日期、联系方式等。 课程表(Course):课程ID、课程名称、学分等。 成绩表(Score):学生ID、课程ID、成绩等。 2. 创建项目和配置环境 使用IntelliJ IDEA创建一个Web项目,然后配置环境。我们需要配置Tomcat服务器、MySQL数据库连接和JDBC驱动程序等。 3. 实现数据访问层 在项目中创建一个Java类,用于实现数据库的访问操作。我们可以使用JDBC技术连接数据库,然后实现数据的增删改查操作。 4. 实现业务逻辑层 在项目中创建另一个Java类,用于实现业务逻辑。例如,实现学生信息管理、课程信息管理、成绩录入和查询等功能。 5. 实现表示层 使用JSP技术实现用户界面,为用户提供交互界面。例如,实现学生信息管理页面、课程信息管理页面、成绩录入页面和查询页面等。 6. 部署和测试系统 最后,我们需要将项目部署到Tomcat服务器上,并测试学生成绩管理系统的功能和性能。 总之,使用IntelliJ IDEA、Java ServletJSP、MySQL和Tomcat等技术实现学生成绩管理系统是非常简单的。只需要按照上述步骤一步步实现,就可以得到一个完整的Web应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值