1、Tomcat的优化经验
1. 内存优化-Xms
2. 增加线程数maxThreads="150"
3. 修正server.xml中的中文编码
4. BIO改NIO
2、HTTP请求的GET与POST方式的区别
答:
1. URL地址长度不同, GET支持的字符少
2. GET的密码是明文,安全问题,容易受到黑客攻击
3. GET只传输文本,不支持文件传输
4. GET方式通常用来查询,不用来修改数据,是幂等操作,修改数据用POST
3.当service有一个实例变量,doGet和doPost去调用这个变量,会出现什么问题,你是如何解决的。
会出现线程不安全问题。无论是doGet还是doPost去调用,服务器端处理的过程都是一样的,那么我们可以把处理过程单独写在另外一个方法handle里,让两个方法都去调用handle,根据不同请求去调用不同的方法。
4.有三台服务器,如果在一台服务器上登陆了这个用户,其他两台就不能再登陆这个用户,使用session共享,你是怎么做的。
把所有的session的数据保存到Mysql服务器上,所有Web服务器都来这台Mysql服务器来获取Session数据。
5.写一个自定义标签要继承什么类
SimpleTagSupport
,一般调用doTag方法或者实现SimpleTag接口
6.Jsp如何处理json
在 jsp 中处理 JSON,通常需要配套使用 JQuery 控件,并且导入一些 Common jar 包。使用 JQuery 控件是因为它能有效的解析并且展示 JSON 数据,导入Common 则是因为 Java 中的对象并不是纯粹的数据,需要通过这些 Jar 包的处理使之转化成真实数据。
7.Jsp的重定向和转发的流程有什么区别
重定向是客户端行为,转发是服务器端行为
重定向时服务器产生两次请求,转发产生一次请求,重定向时可以转发到项目以外的任何网址,转发只能在当前项目里转发
重定向会导致request对象信息丢失。转发则不会
转发的url不会变,request.getRequestDispatch()。forward()
重定向的url会改变,response.getRedirect();
8.Jsp和servlet的区别
jsp
的可读性强,容易维护,并且jsp在最后会编译成servlet,servlet容易调试。
9.jsp可以操作窗口吗?
Jsp
不能够直接调用窗口,只能先 生成打开窗口的js,再由js调用
10.session的主要几个方法的区别
Session
不能通过new创建,需要通过调用getSession()或者getSession(true)方法创建,getSession()是自动创建session,getSession(true)是强制创建session,setAttribute()方法可以用于传值,getAttribute()可以用于取值
(第一次创建session的时候,就是访问第一次一个jsp页面<这个页面的page指令 没有设置session=false>)
销毁session调用invalidate方法
通过setMaxInactiveInterval()可以设定session的生存时间(web.xml可以设置session的生存时间)
11.jsp的三大指令,七大动作的具体功能
三大指令:
Page :指令是针对当前页面的指令
Include :用于指定如何包含另一个页面
Taglib :用于定义和指定自定义标签
七大动作:
Forward,执行页面跳转,将请求的处理转发到另一个页面
Param :用于传递参数
Include :用于动态引入一个jsp页面
Plugin :用于下载javaBean或applet到客户端执行
useBean :使用javaBean
setProperty :修改javaBean实例的属性值
getProperty :获取javaBean实例的属性值
12.获取页面的元素和值有几种方式,分别说一下
request.getParameter()
返回客户端的请求参数与值
request.getParameterNames()
返回所有可用属性名的枚举
request.getParameterValues()
返回包含参数的所有值的数组
13.servlet和javaScript的区别,他们分别是什么作用
一个是服务端,一个是客户端
Servlet
是独立于平台和协议的服务器端的java应用程序,可以动态生成web页面,并采用响应--请求的模式提供web服务
javaScript
是一种解释性语言,用于向html页面提供交互行为,通常被直接嵌入在html页面中
servlet
是java语言编写的web应用
js
是基于html上的一种解释语言
14.jsp的执行原理
客户端发出请求(request),jsp引擎将jsp页面翻译成servlet的java源文件,在Tomcat中将源文件编译成class文件,并加载到内存中执行,把结果返回(response)给客户端。
16.HTML和Servlet的异同
不同:
Html是静态,servlet是动态
html页面由服务器直接返回,
servlet是用来处理客户请求,并返回html页面
//servlet需要服务器调用servlet方法生成动态html页面,且需要在web.xml中配置url路径
17.会话跟踪有哪些,他们的区别是什么
Cookie,session和application,
Cookie是http对象,客户端与服务端都可以操纵
cookie是在客户端保持状态,session是在服务器端保持状态,由于cookie是保存在客户端本地的,所以数据很容易被窃取,当访问量很多时,使用session则会降低服务器的性能,application的作用域是整个工程里只有一个,可以在不同浏览器之间共享数据,所有人都可以共享,因此application也是不安全的
18.session和application的作用
Session
用于客户端与服务器之间保持状态的解决方案,数据保存在服务器内存中,底层是有cookie实现的
Application
的作用域是整个工程里只有一个,可以在不同浏览器之间共享数据,所有人都可以共享,因此application是不安全的。
19.request ,response,session 和 application是怎么用的
Request
是客户端向服务端发送请求
Response
是服务端对客户端请求做出响应
Session
在servlet中不能直接使用,需要通过getSession()创建,如果没有设定它的生命周期,或者通过invildate()方法销毁,关闭浏览器session就会消失
Application
不能直接创建,存在于服务器的内存中,由服务器创建和销毁
20.有几种方式将页面的值传到后台
可通过form表单的get或post将值传递到后台,也可通过setAttribute()方法将值传递到后台
21.一个form表单的值如何获取
在servlet中通过request.getParameter()方法可以获取表单的值
或者是request.getParameterValuse();
22.传递参数到后台有几种方式
表单传参,url传参,jquery.ajax传参
23.Jsp中父页面中怎么拿到子页面的表单元素,不是拿值怎么拿
通过设置属性setAttribute(),通过getAttribute()拿值,getParameter()方法可以做到
24.定义一个String类型的字符串,如果重定向之后还能不能获得这个数据
不能
25.404和500是什么意思
404
:找不到url请求的路径,一般是工程名不对或者拼写错误
500
:服务器内部错误,一般是服务器内部代码编写错误,也有可能是抛异常导致
26.写出5种JSTL常用标签
<c:if>
,<c:item>,<c:foreach>,<c:out>,<c:set>
28.Jsp页面把一个元素隐藏的方法
通过使用属性hidden可以将元素隐藏
29.Session,application,cookie的区别
Session
不能通过new创建,要通过调用getSession()方法创建,数据保存在服务器端,单个客户端session是共享的,底层是由cookie实现的,大小没有限制
Application
的作用域是整个工程只有共享一个,生命周期比session大
Cookie
需要通过new创建,数据保存在客户端中,cookie保存的数据不能超过4k,不安全
30.我们在web应用开发过程中经常遇到输出某种编码的字符,如ISO-8859-1,如何输出一个某种编码的字符串
如将ISO-8859-1输出为GBK格式的字符, 通过new String(byte[] bytes,String charset) 构造器设置编码构造一个新的String(new String("ISO-8859-1","GBK"));
32.怎么判断用户请求时是第一次,如果客户端和服务端断开怎么连到上一次操作
通过session中的isNew()可以判断是否是新用户
33.如果创建servlet实例不用构造方法,怎么创建一个servlet实例
Web
容器会自动为servlet写一个无参的构造器,它使用class.forName("").newInstance()反射来创建servlet实例的
34.Servlet是安全的吗?当service有一个实例变量,doGet和doPost去调用这个变量,会出现什么问题,你是如何解决的
是线程不安全的,因为servlet是单例模式,当多个客户端共同访问的时候线程不安全。
尽量用局部变量,同步块,如果当前字段是不会改变的,用final修饰
36.说明一下jsp中<jsp: include page..>和<%@ include file%>的区别
<jsp:include page=""/> 动态导入
是行为元素、是在请求处理阶段引入的,引入执行页面或servlet所生成的应答文本
先编译,后包含,就是将每个jsp页面都单独转化成html页面,最后再将所有的html页面相加,如果有相同变量不会冲突
<%@ include file="" %> 静态导入
是指令元素
是编译时包含,引入静态文本(html,jsp),在JSP页面被转化成servlet之前和它融和到一起。先包含,后编译
就是将多个jsp一起解析,最后再一起生成html页面,如果有相同变量会冲突
37. pageContext有什么作用
可以使用pageContext对象来设定属性,并指定属性的作用范围,提供了对JSP页面内所有的对象及名字空间的访问
39.Filter与拦截器怎么执行的
首先初始化过滤器,然后服务器组织过滤器链,所有的请求都必须需要先通过过滤器链,
过滤器链是一个栈,遵循先进后出的原则 ,所有的请求需要经过一个一个的过滤器,执行顺序要根据web.xml里配置的<filter-mapping>的位置前后执行,每个过滤器之间通过chain.doFilter连接, 最后抵达真正请求的资源,执行完后再从过滤器链退出
40.Jsp中如何进行分页,项目中如何进行分页?
需要上一页和下一页的超链接(至少需要这两个),通过计算当前页的页码获取下一页数据
的起始位置,然后在 MySql 中查询,如果使用 Oracle 则需要另外计算下一页数据的结
束位置。
使用hibernate框架,它可以针对不同的数据库自动产生为你分页的代码。
41,关于Ajax的技术组成与核心原理
1、Ajax特点:
局部刷新、提高用户的体验度,数据从服务器商加载。
2、AJax的技术组成:不是新技术,而是之前技术的整合
Ajax: Asynchronous Javascript And Xml;(异步的JavaScript和XML)
包括的技术:JavaScript、XML、CSS、XMLHttpRequest
异步:发送请求以后,不等结果,由回调函数处理。
JavaScript:向服务器发送请求,获得返回结果,更新页面
XML: 用来封装数据
3、Ajax核心原理
XMLHttpRequst对象:通过该对象向服务器发送请求。
它是异步请求的技术,所有现代浏览器都支持(Chrome、IE5+)
1)创建XMLHttpReuest对象
非IE浏览器(Mozilla/Safari):
var xhr=new XMLHttpRequest();
IE:
xhr=new ActiveXObject("Msxml2.XMLHTTP");
低版本IE:
xhr=new ActiveXObject("Microsfot.XMLHTTP");
2)XMLHttpRequest对象的属性与方法
a)方法:
open("GET/POST",URL,true/false):用来向服务器建立连接
有三个参数:
参数1:提交方式,post或get
参数2:请求的URL
参数3:表示同步或异步请求,true:表示异步请求
false: 表示同步请求
send(data):发送请求
参数:提交的内容。
POST方式:data就是提交的参数,send(username=root&password=abc123);
GET方式:send(null)
b)属性:
onreadystatechange:设置状态改变时的回调函数,回调函数用来获取服务器数据。
onreadystatechange=function(){
}
readyState:服务器状态响应
状态码:
0:未初始化
1:正在加载
2:加载完成
3:请求进行中
4:请求完成
responseText:服务器返回的数据(文本格式)
responseXML:服务器返回的数据(XML格式)
43.Xhtml和html有什么区别。
Html(超文本标记语言)是标准通用标记语言下的一个应用,也是一种规范,一种标准。
Xhtml(可扩展超文本标记语言)是一种置标语言,表现方式与html类似,不过语法上更加严格,主要不同:
1,所有元素必须被正确嵌套,
2,所有标记必须闭合,
3,标签名,属性名必须小写字母,
4,所有的属性必须用“”括起来,
5,所有非标签一部分的><&都必须以编码形式,
6,所有属性必须要有值,
7,注释中不要有--
8,图片必须要有说明文字
44.css的引入方式有哪些?link和@import的区别是?
四种:内联,内嵌,外链,导入
区别:
1,link属于xhtml标签,@import完全是css提供的一种方式,link除了加载css还可以定义rss,定义rel属性等,@import只能加载css。
2,加载顺序差别:link引用的css是同时被加载的,@import引用的css会等到页面全部被下载完才会再被加载。
3,兼容性差别,@import是css2.1提出,ie5以上才支持,link没有兼容问题。
4,使用dom控制样式的差别,当用javascript去控制样式的时候,只能使用link,@import不是dom能控制的。
5,@import可以在css中再次引入其他样式表。
45.css选择符有哪些?哪些属性可以继承?优先级如何计算?内联和important哪个优先级高?
标签选择符,类选择符,id选择符,继承的不如指定的,id>class>Tagname
Important优先级高
46.前端页面由哪三层构成,分别是什么?作用是什么?
结构层:html由html或者xhtml负责创建,运用标签对网页内容的含义作出描述。
表示层:css由css负责创建,对如何显示有关内容做出回答。
行为层:javascript由javascript负责创建,负责回答应该如何对事件作出反应。
47.你曾经在哪些浏览器测试过兼容?这些浏览器的内核分别是什么?
Ie(ie内核),火狐(Gecko),谷歌(webkit),opera(presto)
48.<img>标签上title与alt属性的区别是什么?
Alt是在你的图片因为某种原因不能加载的时候在页面显示的提示信息,它会直接输出在原本加载图片的地方,title是在鼠标悬停在图片上的显示的小提示,鼠标离开就没了,绝大数html标签都支持title。
50.描述css reset的作用和用途。
Css reset重置浏览器的默认css样式,浏览器种类不同,默认样式不一样,通过使用css reset重置,让他们统一,方便开发。
51.你如何对网站的文件和资源进行优化?期待的解决方案包括:
1,尽可能减少http请求数(文件合并)
2,使用CDN(内容分发网络)
3,添加Expire/Cache-Control头
4,启用Gzip压缩
5,css放在页面最上面
6,scrip放在页面最下面
7,避免在css中使用Expressions
8,把js和css放在外部文件中
9,减少dns查询
10,压缩javascript和css
11,避免重定向
12,移除重复脚本
13,配置实体标签
14,使用ajax缓存
52.什么是语义化的html?
根据内容的结构化(内容语义化),选择合式的标签(代码语义化),便于开发者的阅读和写出更加优雅的代码的同时让浏览器的爬虫和机器更好地解析。
53.清除浮动有几种方式?各自的优缺点是?
1,父级定义height(优点:代码少,简单易掌握;缺点:只适合固定高度元素,无法高度自适应)
2,结尾处使用空标签清除浮动:Clear:both(优点:理论上能清除所有标签的浮动,简代码少浏览器支持好;缺点:增加了无意义的标签)
3,父级定义伪类after和zoom(优点:浏览器支持好;缺点:代码多,两句代码结合使用才能让主流浏览器都支持)
4,父级定义overflow:hidden(优点:代码少,简单,浏览器支持好;缺点:必须定义width或者zoom,同时不能定义height,不能和position配合使用)
5,父级定义overflow:auto(优点:代码少,简单,浏览器支持好;缺点:必须定义width或者zoom,同时不能定义height,内部元素高度超过父级会出现滚动条
还有,父级一起浮动,父级定义display:table,结尾加br的clear:both等
54.解释下 CSS sprites,以及你要如何在页面或网站中使用它?
是一种网页图片应用处理方式。它允许你将一个页面涉及到的所有零星图片都包含到一张大图中去,这样一来,当访问该页面时,载入的图片就不会像以前那样一幅一幅地慢慢显示出来了。页面icon很多的情况下使用合适。
55,html5有哪些新特性、移除了那些元素?如何处理HTML5新标签的浏览器兼容问题?如何区分 HTML 和HTML5??
HTML5 现在已经不是 SGML 的子集,主要是关于图像,位置,存储,多任务等功能的增加。
绘画 canvas用于媒介回放的 video 和 audio 元素本地离线存储 localStorage 长期存储数据,浏览器关闭后数据不丢失;sessionStorage 的数据在浏览器关闭后自动删除
语意化更好的内容元素,比如 article、footer、header、nav、section
表单控件,calendar、date、time、email、url、search
新的技术webworker, websockt, Geolocation
移除的元素
纯表现的元素:basefont,big,center,font, s,strike,tt,u;
对可用性产生负面影响的元素:frame,frameset,noframes;
支持HTML5新标签:
IE8/IE7/IE6支持通过document.createElement方法产生的标签,
可以利用这一特性让这些浏览器支持HTML5新标签,
浏览器支持新标签后,还需要添加标签默认的样式:
当然最好的方式是直接使用成熟的框架、使用最多的是html5shim框架
<!--[if lt IE 9]>
<script> src="http://html5shim.googlecode.com/svn/trunk/html5.js"</script>
<![endif]-->
如何区分: DOCTYPE声明\新增的结构元素\功能元素
56.javascript的同源策略。
一段脚本只能读取来自于同一来源的窗口和文档的属性,这里的同一来源指的是主机名、协议和端口号的组合
57、HTML的 form提交之前如何验证数值文本框的内容全部为数字?否则的话提示用户并终止提交?
<form οnsubmit='chkForm(this)'>
<input type="text" name="d1" />
<input type="submit" />
</form>
<script type="text/javascript">
function chkForm(this){
var value1 = this.d1.value;
var len =value1.length;
for(var i=0;i<len;i++){
if(value1.charAt(i)>"9"|| value1.charAt(i)<"0"){
alert("含有非数字字符");
return false;
}
}
return true;
}
</script>
60. jsp有哪些动作?作用分别是什么?
(这个问题似乎不重要,不明白为何有此题)
答:JSP共有以下6种基本动作
jsp:include:在页面被请求的时候引入一个文件。
jsp:useBean:寻找或者实例化一个JavaBean。
jsp:setProperty:设置JavaBean的属性。
jsp:getProperty:输出某个JavaBean的属性。
jsp:forward:把请求转到一个新的页面。
jsp:plugin:根据浏览器类型为Java插件生成OBJECT或EMBED标记
61、JSP的常用指令
isErrorPage(是否能使用Exception对象),isELIgnored(是否忽略表达式)
62. JSP中动态INCLUDE与静态INCLUDE的区别?
<jsp:include page=included.jsp flush=true />它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数 静态INCLUDE用include伪码实现,不会检查所含文件的变化,适用于包含静态页面 <%@include file=included.htm %>
标签不同
执行的时机不同,动态include是在运行时把两个JSP合并,静态include是在编译期合并动态include在页面发生改变时,能及时更新,而静态页面,不会再次重新编译
63、页面间对象传递的方法
1. request
2. session
3. application
4. cookie
5. URL地址
64、解释一下什么是servlet;
答: 通常Servlet特指HttpServlet,用来接受浏览器的访问请求,浏览器最常用的请求为GET和POST方式,还有其它五种,而HttpServlet分别有七个方法(PUT、DELETE、HEADER、TRACE、OPTION)处理这些类型的请求,另有一个是J2EE不支持的,是CONNECT。Servlet是J2EE规范中的重要成员,是构成WEB的重要组件
65、说一说Servlet的生命周期?
1. 加载Servlet类
2. 实例化
3. 初始化init
4. 处理请求 service à 进一步调用doGet/doPost方法
5. 销毁 destory
66、Servlet的基本架构
1. 定义一个Servlet类,继承HttpServlet抽象类
2. 在web.xml中定义一个servlet标签,配置类名和servlet名
3. 配置servlet处理的URL请求连接,可以用模糊匹配
4. 在J2EE生命周期中,一个Servlet只有一个实例
5. 一个Servlet可以为多个请求服务,每个请求在独立的线程中执行
67、Servlet API中forward()与redirect()的区别?
Forward: 服务器端内部跳转,URL地址不变,属于单次请求
Redirect: 服务器通知浏览器中转,URL地址发生改变,是两次跳转
Forward不能跨域跳转
Redirect可以跨域跳转
Forward在两个页面传值可以通过parameter,也可以通过attribute,能传递Java对象
Redirect在两个页面传值只能通过parameter,在URL中传参
68、Request对象的主要方法:
setAttribute(String name,Object):设置名字为name的request的参数值
getAttribute(String name):返回由name指定的属性值
getAttributeNames():返回request对象所有属性的名字集合,结果是一个枚举的实例
getCookies():返回客户端的所有Cookie对象,结果是一个Cookie数组
getCharacterEncoding():返回请求中的字符编码方式
getContentLength():返回请求的Body的长度
getHeader(String name):获得HTTP协议定义的文件头信息
getHeaders(String name):返回指定名字的request Header的所有值,结果是一个枚举的实例
getHeaderNames():返回所以request Header的名字,结果是一个枚举的实例
getInputStream():返回请求的输入流,用于获得请求中的数据
getMethod():获得客户端向服务器端传送数据的方法
getParameter(String name):获得客户端传送给服务器端的有name指定的参数值
getParameterNames():获得客户端传送给服务器端的所有参数的名字,结果是一个枚举的实例
getParametervalues(String name):获得有name指定的参数的所有值
getProtocol():获取客户端向服务器端传送数据所依据的协议名称
getQueryString():获得查询字符串
getRequestURI():获取发出请求字符串的客户端地址
getRemoteAddr():获取客户端的IP地址
getRemoteHost():获取客户端的名字
getSession([Boolean create]):返回和请求相关Session
getServerName():获取服务器的名字
getServletPath():获取客户端所请求的脚本文件的路径
getServerPort():获取服务器的端口号
removeAttribute(String name):删除请求中的一个属性
69、request.getAttribute()和 request.getParameter()有何区别?
1. getParameter是表单数据或URL参数,不能在server端修改
getAttribute是两个页面或servlet之间内部跳转传递对象参数,可以修改
2. getParameter的类型只能是String
getAttribute的类型可以是任意Java对象
3. forward跳转时才有attribute,redirect时,attribute全部为null
70、MVC的各个部分都有那些技术来实现?如何实现?
MVC是Model-View-Controller的简写。
Model代表的是应用的业务逻辑(通过JavaBean,EJB组件实现),通常是数据访问层。
View是应用的表示层(由JSP页面产生)或模板框架,如freemarker、velocity
Controller是提供应用的处理过程控制(一般是一个Servlet),负责页面间跳转
通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现。这些组件可以进行交互和重用。
Model:JDBC、Hibernate、MyBatis
View:JSP、FreeMarker、Struts
Controller:Spring MVC、Struts、Servlet
SpringSide集成Spring、Struts、Hibernate、WebService、View展示框架,作者江南白衣
71、我们在web应用开发过程中经常遇到输出某种编码的字符,如iso-8859-1等,如何输出一个某种编码的字符串?
public String translate(String str) {
try {
return new String(str.getBytes("ISO-8859-1"), "GBK").trim();
} catch (Exception e) {
System.err.println(e.getMessage());
throw new RuntimeException(e);
}
}