java url解码_【Java面试】Servlet常见面试题!

v2-9625c6943090757cfdc62f0a08bae9a2_1440w.jpg?source=172ae18b

作者:六星_研鑫

出自:ITPUB博客

原文:blog.itpub.net/69977571/viewspace-2707930/


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

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

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

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值