作者:六星_研鑫
出自: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语法控制并发
尽可能减少同步块和同步方法的使用
使用正确设置了线程安全的资源类