Javaweb
面试题;理解才是最重要的,而不是原封不动的背下来
一.请简述doget和dopost它们的区别
1) get是从服务器上获取数据,post是向服务器传送数据。
2) 在客户端,Get方式在通过URL提交数据,数据在URL中可以看到;POST方式,数据放置在HTML HEADER内提交。
3) 对于get方式,服务器端用request.getQueryString()可以获取GET请求参数的变量值,
对于post方式,服务器端用request.getParameter获取提交的数据。
4) GET方式提交的数据最多只能有1024字节,而POST则没有此限制。
5) 安全性问题。正如在(1)中提到,使用 Get 的时候,参数会显示在地址栏上,而 Post 不会。 所以,如果这些数据是中文数据而且是非敏感数据,那么使用 get;
如果用户输入的数据不是中文字符而且包含敏感数据,那么还是使用 post为好。
2、简述servlet的生命周期?
参考答案:
所谓生命周期,指的是servlet容器如何创建servlet实例、分配其资源、调用其方法、并销毁其实例的整个过程。
阶段一: 实例化(就是创建servlet对象,调用构造器)
在如下两种情况下会进行对象实例化。
第一种情况:
当请求到达容器时,容器查找该servlet对象是否存在,如果不存在,才会创建实例。
第二种情况:
容器在启动时,或者新部署了某个应用时,会检查web.xml当中,
servlet是否有 load-on-starup配置。如果有,则会创建该servlet实例。
load-on-starup参数值越小,优先级越高(最小值为0,优先级最高)。
阶段二: 初始化
为servlet分配资源,调用init(ServletConfig config);方法
config对象可以用来访问servlet的初始化参数。
初始化参数是使用init-param配置的参数。
init可以override。
阶段三: 就绪/调用
有请求到达容器,容器调用servlet对象的service()方法。
HttpServlet的service()方法,会依据请求方式来调用doGet()或者doPost()方法。但是,这两个do方法默认情况下,会抛出异常,需要子类去override。
阶段四: 销毁
容器依据自身的算法,将不再需要的servlet对象删除掉。
在删除之前,会调用servlet对象的destroy()方法。
destroy()方法用于释放资源。
在servlet的整个生命周期当中,init,destroy只会执行一次,而service方法会执行多次。
3.请简述一下部署Serlvet的过程
<servlet> <servlet-name>test</servelt-name> <servlet-class>TestServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>test</servlet-name> <url-pattern>/TestServlet</url-pattern> </servlet-mapping>
4. 有一个用户名 test, 密码 12345, 请编写一段创建COOKIE的JSP代码, 然后再编写一段读取COOKIE的JSP代码, 在页面上将COOKIE的信息显示出来。
String str = “username= test&password=12345”;
Cookie cookie=new Cookie(“mycookie”, str);
response.addCookie(cookie);
Cookie cookies[]=request.getCookies();
For(int i=0;i< cookies.length;i++){
Out.print(cookies.getName+”=”+ cookies.getValue());
5. 请简述Cookie, Session 和Application它们的区别。
1) Cookie会在客户端硬盘上创建Cookie文件
2) Session大部分情况下会在服务器端硬盘上写入Cookie文件
3) Cookie安全性最低
4) Application 表示Servlet上下文环境,在整个WEB应用中只有一个Application对象,用于存储些全局性的数据
6.有如下所示的页面:
页面里有一个form表单: <FORM action=”" name=”buyForm” method=”post”>,
多选框: <INPUT name=”isBuy” type=”checkbox” id=”isBuy” value=”paozhu”>
请编写JavaScript代码,实现该表单多选框的 “全选”“全不选” 功能。
——————————全选——————————–
//拿到form表单
Var f = document.getElementByName(“buyForm”);
Var cb = f.isBuy;
For(i=0;i<cb.length;i++){
If(cb[i]. checked ==false) cb[i]. checked = true;
}
7. 有这样一个form表单,如下图:
Form表单:<form
name=”userfrm” method=”post” action=”register_success.htm” >
登录名:<input
name=”username” type=”text”>
密码:<input
name=”pass” type=”password”>
重复密码:<input
name=”rpass” type=”password”>
请编写javascript程序实现该表单的客户端验证。
要求
1) 密码不能为空并且最少为6位,还要求两次输入的密码要一致
2) 登录名不能为空,且只能包括字母、数字和下划线字符
Var f = document.getElementsByName(“userfrm”); Var isValiUserName = false, isValiPassword = false; If(f. username!=”” && f. username!=”undefined”){ //正则表达式验证只能包括字母、数字和下划线字符 var re = new RegExp(“[a-zA-Z0-9]{5,20}”,”ig”); var str = “f.username.value”; isValiUserName = re.test(str); //得到用户名true/false的校验结果 } //校验密码 If(f. password!=”” && f.password.length>=6 && f.password== f.rpassword){ isValiPassword = true; } If(isValiUserName==true && isValiPassword==true) return true; Return false;
8. 请简述一下ajax的原理及实现步骤。
原理: HTTP协议的异步通信
get 请求
1) 创建一个XMLHttpRequest对象
2) 调用该对象的open方法
3) 如果是get请求,设置回调函数onreadystatechange = callback
4) Send
如果是post 请求
5) 创建一个XMLHttpRequest对象
6) 调用该对象的open方法
7) 调用setRequestHeader(“Content-Type”, “application/x-www-form-urlencoded”);
8) 设置回调函数onreadystatechange = callback
9) Send
9. 有如下一段HTML代码:请使用jquery实现页面的li元素基于奇数偶数的颜色换行
<script src=”jquery.js” type=”text/javascript”></script> <style type=”text/css”> .odd { } .even { background-color:red; } </style> <ul> <li>jquery 学习1</li> <li>jquery 学习2</li> <li>jquery 学习3</li> <li>jquery 学习4</li> <li>jquery 学习5</li> <li>jquery 学习6</li> </ul>
<script language=”javascript”> $(document).ready(function() { $(‘li:even’).addClass(‘even’); $(‘li:odd’).addClass(‘odd’); }); </script>
10.SESSION的工作原理
session启动的时候被分配到一个专有的session id .服务器为其分配一块内存 .浏览器将其写入Cookie.
服务器中的一进程会监视该session id,当它超时或者关闭时候释放内存.当浏览器连入服务器时,
会在Cookie中寻找该session id.并判断该id是否有效.有效就去读取其中的值.无效重新建立一个session id