一、 什么是servlet?
servlet是用来处理客户端请求并产生动态网页内容的java类java
二、 Tomcat的缺省端口是多少,怎么修改?web
a) 默认端口号是8080数据库
b) 修改步骤:apache
i. 打开tomcat的安装目录,找到conf文件跨域
ii. 找到其中的server.xml,打开后找到其中的tomcat
<connector connectionTimeout=”20000” port=”8080” 安全
改变其中的8080就能够了服务器
三、 Tomcat有哪几种Connector运行模式(优化)?cookie
a) BIOsession
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。
四、 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>
五、 Servlet生命周期
a) 加载Servlet
web容器负责加载servlet,当web容器启动时或者是在第一次使用这个servlet时,容器会负责建立servlet实例
b) 初始化
当一个servlet加载后,容器将调用init()方法初始化这个对象,初始化的目的是为了让servlet在处理客户端请求前完成一些初始化的工做
c) 请求处理
当有请求提交时,servlet将调用service()方法进行处理客户端请求,而且会根据不一样的请求调用不一样的doGet()或doPost()方法
d) 销毁
当web容器关闭或检测到一个servlet实例要从服务器中被移除时,容器就会调用destroy()方法,以便让该实例释放掉所占用的资源
六、 Get()与post()的区别?
a) Get是向服务器发送、索取数据的一种请求,而post是向服务器提交数据的一种请求
b) Get方式传递数据安全性较低,post方式比较安全。可是post方式的执行效率比get方式要差一些
c) Get请求方式将请求信息放在URL后面,请求信息和URL之间以“?”隔开,这种请求方式直接将请求信息暴露在URL中;
post请求方式将请求信息放置在报文体中,想得到请求信息必须解析报文
七、 doGet与doPost方法的两个参数是什么?什么状况下调用
a) HttpServletRequest和HttpServletResponse
b) JSP页面中的form标签里的method属性为get时调用doGet()为post时调用doPost();超连接跳转页面时调动的是doGet()
八、 获取页面的元素的值有几种方式?分别说一下
a) 用<input>输入域提交参数
b) request.setAttribute();在下个页面直接request.getAttriute()获得
c) <jsp:forward=”你要跳转的页面”>
<jsp:param>你要传递的参数
d) 用session域对象
e) url?a=””&b=””
九、 request.getAttribute()和request.getParameter()区别
a) 都是HttpServletRequest中的方法,用来传递数据的
b) getParameter():响应的是web客户端向web服务端经过点击连接或提交按钮传递数据,表明HTTP请求数据;获取的是post/get传递的参数值
getAttribute():是获取对象容器中的数据,获取的是session的值
c) getParameter():只能获得String类型数据
getAttribute():能够接受String类型,也能够是对象
十、 forward(转发)和redirect(重定向)的区别
a) forward:requset.getRequsetDispatcher(“/***.jsp”).forward(request,response)
redirect:response.sendRedirect(“/***.jsp”)
b) forward是服务器端发起的请求;redirect是客户端发起的请求;
c) forward只有一次请求;redirect会产生2次请求。
d) forward数据会同时转发过去;redirect数据不会同时传递过去。
十一、 什么是cookie?什么是session?session和cookie的区别
a) Cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息,它的过时时间能够任意设置,若是不主动清除,很长一段时间都能保留
b) Session是在无状态的HTTP协议下,服务端记录用户状态时用于标识具体用户的机制,它是在服务端保存的用来跟踪用户的状态的数据结构,能够保存在文件、数据库、或者集群中。
c) 他们都是一种会话技术,区别以下
i. Session:
数据存放在服务端,安全(只存放和状态相关的)
session不只仅是存放字符串,还能够存放对象
session是域对象(session自己是不能跨域的,但能够经过相应技术来解决)
sessionID的传输默认是须要cookie支持的
ii. Cookie
数据存放在客户端,不安全(存放的数据必定是和安全可有可无的数据)
cookie只能存放字符串,不能存放对象
cookie不是域对象(Cookie是支持跨域的)
十二、 Tomcat是如何建立servlet类实例?用到了什么原理
a) 当tomcat启动时,会读取在webapps目录下全部的web应用中的web.xml文件。而后对xml文件进行解析,并读取servlet注册信息。而后将每一个应用中注册的servlet类都进行加载,并经过反射的方式实例化
1三、 Servlet安全性问题
a) 由于servlet是单列模式建立的,只实例化一次,同一个servlet能够处理多个用户请求,当同时有两个用户访问时,则会启动两个负责处理请求的servlet线程,因此会出现线程安全问题
b) 解决方案:
i. 在servlet中定义变量时,尽可能都定义局部变量。在servlet中负责保存上下文ServletContext和负责处理session对象的HttpSession是线程不安全的,而负责处理请求的servletRequest是线程安全的
ii. 加锁:用synchronized进行保护,可是要尽可能的缩小保护范围
1四、 JSP与servlet的区别
a) JSP本质上就是一个简易的servlet,Web容器将JSP代码编译成JVM能识别的java类
b) Jsp更擅长表现于页面显示,servlet更擅长于逻辑控制
1五、 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 :主要用于输出数据
1六、 JavaWeb中四大域对象及做用范围
a) PageContext : 做用范围在整个页面(一个页面)
b) HttpRequest : 做用范围在一次请求
c) HttpSession : 这是JavaWeb的一种会话机制,做用在整个会话中
d) ServletContext :做用范围在整个web应用
1七、 JSP和HTML之间的关系
a) JSP是简单的servlet,是在服务端执行的,一般返回客户端的是一个HTML文本
1八、 JSP静态包含和动态包含的区别
a) 静态包含:<%@ include file=”被包含的页面” %>
动态包含:<jsp:include page=”被包含的页面” flush=“true” >
b) 静态包含在翻译的时候,将多个JSP翻译成一个servlet
动态包含在翻译的时候,将多个JSP翻译成多个servlet,在程序运行加载到JVM中的时候,动态合并,动态包含能够传递数据
c) 静态包含,编辑器引入,先包含在运行
动态包含,运行期引入,先运行,把结果引入
1九、 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来生成动态网页
2一、 如何避免JSP页面自动生成Session对象?为何要这么作?
a) <%@ page session=”false”>
b) 在默认状况下,在对一个JSP页面发出请求时,若是session还没创建,JSP页面会自动为请求创建一个Session对象,可是session是比较消耗资源的,若是没有必要保持和使用session,就不该该建立session
2二、 自定义标签要继承哪一个类
a) 能够继承TagSupport或者BodyTagSuppot,二者的差异是前者适用于没有主题的标签,然后者适用于有主题的标签
b) 若选择TagSupport,能够实现doStartTag和doEndTag这两个方法实现Tag的功能;若是选择继承BodyTagSupport,能够实现doAfterBody这个方法