Java中Servlet常见面试题有哪些
小编给大家分享一下Java中Servlet常见面试题有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
1:什么是B/S和C/S
Browser/Server浏览器/服务器(瘦客户端)
Custom/Server 客户端/服务器(胖客户端)
2:描述war包、jar包、ear包的结构
war-
--myweb
---WEB-INF
----web.xml
----lib
----classes
jar-
--myjar
---META-INF
----.MF
ear-
--META-INF
---Application.xml
--.war
--.jar
3:什么是servlet?servlet主要做什么?
网络服务的请求和响应方式
通过WEB浏览器调用servlet的方法,主要是在服务端写动态代码与服务器端交流;
4:servlet 与cgi相比的优点?servlet的缺点
优点:
性能(线程比进程更快)
可伸缩
Java强健且面向对象
Java独立的平台
缺点:
处理代码(业务逻辑)与HTML(表现逻辑)混合在一起
5:常用的servlet包的名称是?
javax.servlet
javax.servlet.http
6:描述servlet接口的层次结构?
Servlet
--genericServlet
--HttpServlet
--自己的servlet
ServletRequest
ServletResponse
7:对比get方法和post方法?
get方法: 请求对服务器没有负面影响,Form数据量小,数据的内部应在url中可见; 明文传输,安全度低。
post方法:请求的数据过程改变服务器的状态,Form数据量大,数据的内部应在url中不可见,安全度高;
8:归类描述HttpServletRequest接口都完成那些功能
1.读取和写入HTTP头标
2.取得和设置cookies
3.取得路径信息
4.标识HTTP会话。
9:归类描述HttpServletResponse接口都完成那些功能
HttpServletResponse加入表示状态码、状态信息和响应头标的方法,它还负责对URL中写入一Web页面的HTTP会话ID进行解码。
10:描述Service方法所完成的基本功能?默认是在那里实现的?
service方法是在servlet生命周期中的服务期,根据HTTP请求方法(GET、POST等),将请求分发到doGet、doPost等方法
HttpServlet类实现
11:如何开发自己的Servlet?描述应该做的步骤和每步需要完成的工作
1.引jar包
1)构建开发环境 common包-->lib包-->servlet--->api.jar
2.开发servlet类
1)首先继承HttpServlet
2)实现 doGet() doPost()
3)定义 doGet() doPost()
3.建个web应用
4.部署
安装web容器,例如Tomcat
在Tomcat的webapps目录下新建一个文件夹作为web程序的根
在根下新建一个名为WEB-INF的文件夹,里面建立一个web.xml的文件、一个classes的文件夹、一个lib文件夹按照servlet的DTD配置web.xml文件。
把编译好的servlet的class文件复制到classes目录下lib文件存放程序所需要的jar包
12:为何servlet需要部署描述?
servlet需要配置web.xml文件来使容器认识servlet程序
13:Servlet基本的描述应该是?请写出来
Hello sl314.web.FormBasedHello Hello /greeting
14:如何在html中使用servlet
FORM标记
ACTION- 指定form信息的目的地(相关的URL)
METHOD - 指定HTTP方法(GET或POST)
语法:
15:如何接受request中的参数
String userName = (String)request.getParameter("userName")方法
16:如何接受request中header的值
request.getHeader(name);
request.getHeaders(names);等
17:如何输出html
PrintWriter pw = response.getWriter();
pw.write("");
pw.write("Hello");
pw.write("");
18:如何设置输出的contentType
response.getContentType()
19:描述servlet的生命周期?
生命周期是指servlet实例在web容器中从:首次创建调用init方法开始初始化期,经过service方法运行期,一直到destory方法销毁期 结束
servlet实例的生命周期由web容器来管理
20:描述init,service,destroy方法的功能和特点
init方法: 是在servlet实例创建时调用的方法,用于创建或打开任何与servlet相关资源和初始化servlet的状态Servlet规范保证调用init方法前不会处理任何请求。
service方法:是servlet真正处理客户端传过来的请求的方法,由web容器调用,根据HTTP请求方法(GET、POST等),将请求分发到doGet、doPost等方法
destory方法:是在servlet实例被销毁时有web容器调用。Servlet规范确保在destroy方法调用之前所有请求的处理均完成需要覆盖destroy方法的情况:释放任何在init方法中打开的与servlet相关的资源存储servlet的状态
21:什么是回调方法?有什么特点?
由容器来调用程序的方法
由容器来决定什么时候来调
22:如何设置初始化servlet的参数?
greetingText Hello
23:如何获取servlet初始化的参数
public void init() { greetingText = getInitParameter("greetingText"); System.out.println(">> greetingText = '" + greetingText + "'"); }
24:ServletConfig接口默认在那里实现的
GenericServlet类实现ServletConfig接口
25:什么是ServletContext?有什么作用?
Servlet上下文
ServletContext对象是Web应用的运行时表示,可通过其实现Web应用中的资源共享
26:如何访问ServletContext接口?是在那里实现的?
Servlet通过getServletContext()方法访问
GenericServlet类实现
27:ServletContext接口的功能包括?分别用代码示例
只读初始化参数: getInitParameter(name:String) : String
getInitParameterNames() : Enumeration
读写访问应用级属性:getAttribute(name:String) : Object
setAttribute(name:String, value:Object)
getAttributeNames() : Enumeration
只读访问文件资源: getResource(path) : URL
getResourceAsStream(path) : InputStream
写web应用日志文件:log(message:String)
log(message:String, Throwable:excp)
28:如何设置Context的参数?
catalogFileName /WEB-INF/catalog.txt
29:如何获取Context设置的参数值?
ServletContext context = sce.getServletContext(); String catalogFileName = context.getInitParameter("catalogFileName");
30:描述Web应用的生命周期?
Web容器启动时,初始化每个Web应用
可以创建"监听器"对象触发这些事件;
Web容器关闭时,销毁每个Web应用
31:如何用代码实现监控Web应用的生命周期?
public class Test implements ServletContextListener{ public void contextInitialized(ServletContextEvent sce) { // } }com.csy.Test
32:web应用中如下错误码示什么意思:400,401,404,500
400 Bad Request
401 Unauthorized
404 Not Found
500 Internal Server Error
33:描述Web应用中用声明方式来进行错误处理的两种方法
使用error-page元素声明一个给定HTTP状态码的处理器
可以声明任意数量的错误页面,但一个给定的状态码只能对应一个页面
使用exception-type元素声明给定Java异常的处理器
java.lang.ArithmeticException
可以声明任意数量的错误页面,但一个给定的异常类型只对应一个页面
不能使用父类捕获多种异常
34:描述记录异常日志的方法,都位于那些接口?
GenericServlet:
log(message:String)
log(message:String, Throwable:excp)
ServletContext:
log(message:String)
log(message:String, excp:Throwable)
35:什么是会话?
Web容器可为每个用户保存一个"会话对象",用来存储特定用户的会话信息
36:如何获得会话?
HttpSession session = request.getSesseion();
37:会话Api的基本功能?
getID() :String
isNew() :boolean
getAttribute(name):Object
setAttribute(name,value)
removeAttribute(name)
38:如何销毁会话?
1、可使用部署描述符控制所有会话的生命周期
2、可使用控制特定会话对象的生命周期HttpSession接口
invalidate()
getCreationTime() :long
getLastAccessedTime() :long
getMaxInactiveInterval() :int
setMaxInactiveInterval(int)
39:描述会话保持状态的基本原理
当客户端第一次请求时,服务器创建一个session与request绑定,用响应对象response来返回sessionid 放到客户端的cookies中存储下来,下次在发送请求时,直接根据sessionid来检索服务器的会话(每次请求都会将所有的cookies带到服务器端)
40:如何读写cookie,代码示例
写:String name = request.getParameter("firstName"); Cookie c = new Cookie("yourname", name); response.addCookie(c); 读:Cookie[] allCookies = request.getCookies(); for ( int i=0; i < allCookies.length; i++ ) { if ( allCookies[i].getName().equals("yourname") ) { name = allCookies[i].getValue(); } }
41:什么是URL重写,如何实现,代码示例
Cookie不能使用时,可使用URL重写 request.encodeURL();
客户在每个URL的后面追加额外的数据
服务器将此标识符与其存储的有关会话数据相关联
http://host/path/file;jsessionid=123
41:描述web应用的4种认证技术
BASIC - Web浏览器接收用户名和口令,将其以明码方式发送给Web服务器
DIGEST - Web浏览器接收用户名和口令,使用加密算法将此数据发送给Web服务器
FORM - Web应用提供发送给Web浏览器的HTML form
CLIENT-CERT - Web容器使用SSL验证用户,服务端和客户端的链路保护
42:什么是授权,什么是验证?
授权是分局用户角色划分web资源的过程,其标识web应用中的安全域 分配权限
web容器使用厂商指定的机制验证用户的角色 匹配权限
43:什么是HTTPS
HTTPS (Secure Hypertext Transfer Protocol) 是使用SSL协议的HTTP
44:什么是审计?
也就是访问跟踪,是为web应用的每次访问保留记录的过程
45:如何实现声明性授权
1、标识web资源集
2、标识角色
3、将web资源集影射到角色
4、标识每个角色中的用户
在 web.xml里配
46:描述servlet并发问题?
多个同类线程运行,可以共享同一个Servlet实例,共享的数据和资源未合理同步,可能会引起数据的冲突
47:描述Web应用中的六种属性范围
局部变量(页面范围)
实例变量
类变量
请求属性(请求范围)
会话属性(会话范围)
上下文属性(应用范围)
48:支出上述六种那些是线程安全的
局部变量和请求属性
49:什么是STM?如何实现?
SingleThreadModel接口
可以实现SingleThreadModel接口保证某一时刻只有一个请求执行service方法
50:如何实现并发管理?
尽可能使用局部和请求属性
使用synchronized语法控制并发
尽可能减少同步块和同步方法的使用
使用正确设置了线程安全的资源类
以上是"Java中Servlet常见面试题有哪些"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!