ITPub博客

首页 > 应用开发 > Java > 【Java面试】Servlet常见面试题!

【Java面试】Servlet常见面试题!

原创 Java 作者:六星_研鑫 时间:2020-07-29 19:40:29 0 删除 编辑
1:什么是B/S和C/S

 Browser/Server浏览器/服务器(瘦客户端)     

 Custom/Server 客户端/服务器(胖客户端)



点击免费获取最新BATJ面试题,2020最新面试技巧和简历模板!


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基本的描述应该是?请写出来

<servlet>
 
<servlet-name>Hello</servlet-name>
 
<servlet-class>sl314.web.FormBasedHello</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Hello</servlet-name>
<url-pattern>/greeting</url-pattern>
</servlet-mapping>


14:如何在html中使用servlet

FORM标记

ACTION– 指定form信息的目的地(相关的URL)

METHOD – 指定HTTP方法(GET或POST)

语法:

<FORM ACTION=’servlet-URL’ METHOD=’{GET|POST}’>

{HTML form tags and other HTML content}

</FORM>


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("<html>");

pw.write("Hello");

pw.write("</html>");


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的参数?

<init-param>
 
       <param-name>greetingText</param-name>
 
       <param-value>Hello</param-value>
 
  </init-param>



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的参数?

<context-param>
 
<param-name>catalogFileName</param-name>
 
<param-value>/WEB-INF/catalog.txt</param-value>
 
</context-param>


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) {
 
//
 
}
 
}
 
<listener>
 
<listener-class>
    com.csy.Test
</listener-class>
</listener>


32:web应用中如下错误码示什么意思:400,401,404,500

400    Bad Request

401    Unauthorized

404    Not Found

500    Internal Server Error


33:描述Web应用中用声明方式来进行错误处理的两种方法

使用error-page元素声明一个给定HTTP状态码的处理器

<error-page>

 <error-code>404</error-code>

 <location>/error/404.html</location>

</error-page>

可以声明任意数量的错误页面,但一个给定的状态码只能对应一个页面

使用exception-type元素声明给定Java异常的处理器

<error-page>

 <exception-type>

        java.lang.ArithmeticException

 </exception-type>

<location>/error/ExceptionPage</location>

</error-page>

可以声明任意数量的错误页面,但一个给定的异常类型只对应一个页面

不能使用父类捕获多种异常


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、可使用部署描述符控制所有会话的生命周期

    <session-config>

    <session-timeout>10</session-timeout>

    </session-config>

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的后面追加额外的数据

服务器将此标识符与其存储的有关会话数据相关联


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语法控制并发

尽可能减少同步块和同步方法的使用

使用正确设置了线程安全的资源类


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/69977571/viewspace-2707930/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
一入Java坑,终身入Java坑,欢迎java坑友一起交流学习,群内有大牛,并分享提供大量免费资料,欢迎入圈:925050116

注册时间:2020-06-27

  • 博文量
    26
  • 访问量
    20367