1.css选择器有哪些
id选择器、class选择器、标签选择器。
2.css2和css3有什么区别
css3是css2的进阶,增加了一些新的属性。
css2推荐的是内容和表现效果分离的方式,css3是朝着模块化发展的。
3.如何让一个DIV居中显示,如何让一个浮动的DIV居中显示
给div设置一个宽度,然后设置元素的左右外边距为 auto,比如,margin:0px auto。则可以实现 div 居中显示。
对于浮动元素,设置其左右外边距为关键字 auto 是无效的。此时,如果需要设置其居中显示,可以:
1、 精确计算其左外边距并进行设置,实现居中显示;
2、 使用一个居中显示的 div 元素包含此浮动元素,代码如:
<div style="margin:0px auto;"><div style="float:left;"></div></div>
- servlet是什么 servlet的执行原理是什么?
Servlet是一个用于扩展服务器端功能的服务器端组件技术 运行在服务器端,所以调用执行是由服务器负责 在web.xml中需要进行配置,就是将servlet和一个请求地址建立对应关系,当浏览器对地址 发起请求时,服务器则按照规则调用serlvet类中的方法 服务器端的组件技术 直接或者间接的实现Servlet接口 用于扩展服务器端功能,可以实现动态网页的开发。
- Tomcat怎么修改端口号
一、找到server.xml文件
进入tomcat安装目录,进入conf文件夹,找到server.xml文件
二、编辑server.xml文件
找到Connector标签,红方框中8080位置就是端口号,修改这个端口号即可,之后重启服务器
- 除了Tomcat还知道哪些web服务器
Jboss作为Java EE应用服务器,它不但是Servlet容器,而且是EJB容器,从而受到企业级开发人员的欢迎,从而弥补了Tomcat只是一个Servlet容器的缺憾。
Resin也仅仅是一个Servlet容器,然而由于它优秀的运行速度,使得它在轻量级Java Web领域备受喜爱,特别是在互联网Web服务领域,众多知名公司都采用其作为他们的Java Web应用服务器,譬如163、ku6等。
在商用应用服务器里主要有:Weblogic、Websphere,其中Weblogic我也使用过很长一段时间,当时也只用其当Servlet容器,然而就在同等条件下,在性能及易用性等方面,要比Tomcat优秀很多。
.glassfish是Sun公司推出的Java EE服务器,一个比较活跃的开源社区,不断的通过社区的反馈来提高其的可用性,经过glassfish v1、glassfish v2 到今天的glassfish v3,它已经走向成熟。Glassfish是一个免费、开放源代码的应用服务,它实现了Java EE 5,Java EE 5 平台包括了以下最新技术:EJB 3.0、JSF 1.2、Servlet 2.5、JSP 2.1、JAX-WS 2.0、JAXB 2.0、 Java Persistence 1.0、Common Annonations 1.0、StAX 1.0等。支持集群,通过内存中会话状态复制,增强了部署体系结构的可用性与可伸缩性,它对集群有着很好的支持,可以简单到通过添加机器,就可轻松的提高网站的带负载能力。在解析能力方面,它对html的吞吐能力与apache服务器不分上下,就是tomcat所不能比的,支持目录部署,热部署,解决了tomcat对热部署能力的缺陷。在版本方面做的更加人性化,有开发时用的简化版,专门用于部署web项目的版本,还要完全符合j2ee标准的版本。
- 常见的http状态码有哪些,分类说明
200 – 请求成功
301 – 资源(网页等)被永久转移到其它URL
404 – 请求的资源(网页等)不存在
500 – 内部服务器错误
- get和post请求有什么区别,什么情况下调用doGet()和doPost()?
URL地址长度不同, GET支持的字符少
GET的密码是明文,安全问题,容易受到黑客攻击
GET只传输文本,不支持文件传输
GET方式通常用来查询,不用来修改数据,修改数据用POST
Jsp页面中的FORM标签里的method属性为get时调用doGet(),为post时调用doPost()。
在地址栏输入URL回车,会调用doGet()方法。
在jQuery等AJAX框架中,使用$.get时调用doGet(),使用$.post时调用doPost()。
- http的请求数据包和响应数据包中包含哪些内容
请求数据包结构:
- 请求行:请求行在请求数据包的第一行,包含请求类型(get/post)、请求资源路径、协议的版本和类型
二、消息头:若干消息头样式(w3c定义的一些有特殊意义的键值对),如content-type=text/html,charset=utf-8等,服务器端和客户端都会遵循消息头的约定,也可以通过代码设置。
三、消息正文:如果请求方式为post,请求参数和值就会放在这里,如果为get那么请求参数和值就会包含在资源路径上。
响应数据包:
一、状态行:包含两部分内容的协议的版本和类型,状态码(500表示程序出错,404找不到资源路径,200正常运行)。
二、消息头:同上。
三、响应正文:服务器返回给浏览器的处理结果。
- 请描述一次完整的http请求过程,即前端浏览器输入url之后会经历什么
DNS解析
TCP连接
发送HTTP请求
服务器处理请求并返回HTTP报文
浏览器解析渲染页面
连接结束
- servlet的生命周期是什么
1. init()方法
在Servlet的生命周期中,仅执行一次init()方法,它是在服务器装入Servlet时执行的,可以配置服务器,以在启动服务器或客户机首次访问Servlet时装入Servlet。无论有多少客户机访问Servlet,都不会重复执行init();
2. service()方法
它是Servlet的核心,每当一个客户请求一个HttpServlet对象,该对象的Service()方法就要调用,而且传递给这个方法一个“请求”(ServletRequest)对象和一个“响应”(ServletResponse)对象作为参数。在HttpServlet中已存在Service()方法。默认的服务功能是调用与HTTP请求的方法相应的do功能。
3. destroy()方法
仅执行一次,在服务器端停止且卸载Servlet时执行该方法,有点类似于C++的delete方法。一个Servlet在运行service()方法时可能会产生其他的线程,因此需要确认在调用destroy()方法时,这些线程已经终止或完成。
(1)加载和实例化:默认情况下,当Servlet第一次被访问时,由容器创建Servlet对象;
(2)初始化:在Servlet实例化之后,容器将调用Servlet的init()方法初始化这个对象,完成一些如加载配置文件、创建连接等初始化的工作,该方法只调用一次;
(3)请求处理:每次请求Servlet时,Servlet容器都会调用Servlet的Servlet()方法对请求进行处理;
(4)服务终止:当需要释放内存或者容器关闭时,容器就会调用Servlet实例的destroy()方法完成资源的释放。在destroy()方法调用之后,容器会释放这个Servlet实例,该实例随后会被Java垃圾收集器所回收。
- servlet是线程安全的吗?如果不是,应该怎么处理
首先,默认的servlet是非线程安全的,servlet是单例模式,只产生一个实例,根据项目中web.xml实例,这个实例是web容器产生的,比如Tomcat,JBOSS,weblogic等。
就是说多个客户请求产生多个线程,一个线程对应一个客户,但是用的servlet对象却是一个。既然用的对象是一个,那么实例变量就是共享数据了,说到共享数据还不同步,必然是非线程安全的。
1.使用方法内局部变量
是因为各线程有自己堆栈空间,存储局部变量
方法参数传入,多采用传值(volue copy)传入方法内
2.对操作共享资源的语句,方法,对象, 使用同步
比如写入磁盘文件,采用同步锁,但建议尽量用同步代码块,不要用同步方法
3.使用同步的集合类
使用Vector代替ArrayList
使用Hashtable代替HashMap。
4.不要在 Servlet中再创建自己的线程来完成某个功能。
- request和response是什么,request中有哪些主要方法 redirect和forward的区别是什么
request是代表Http请求信息的对象,其中封装了浏览器向服务器发送的请求信息,将request传递给service方法,在处理请求的过程中,可以通过request对象获取请求相关的信息。
response对象是代表Http响应信息的对象,其中将会封装服务器向浏览器做出的响应信息,将response传递给service方法,在处理请求的过程中,如果有任何数据要发送给浏览器,可以通过response获取流进行发送
1.从地址栏显示来说
forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容
再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址.
redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.所
以redirect等于客户端向服务器端发出两次request,同时也接受两次response。
2.从数据共享来说
forward:转发页面和转发到的页面可以共享request里面的数据.
假如从a页面 到 b页面 再到c页面 如果用
在a页面中:
request.setAttribute(“a”,“aa”);
<jsp:forward page=“b.jsp”></jsp:forward>
在b页面中:
<jsp:forward page=“c.jsp”></jsp:forward>
跳转 在c页面用
request.getAttribute(“a”)
就可以得到a页面的值,或者用
request.getParameter(“name”)
也可以得到。
但是要用response.sendRedirect(“b.jsp”);
跳转的话就得不到a 页面的值和内容。
redirect:不能共享数据.
redirect不仅可以重定向到当前应用程序的其他资源,还可以重定向到同一个站点上的其他应用程序中的资源,甚至是使用绝对URL重定向到其他站点的资源.forward,方法只能在同一个Web应用程序内的资源之间转发请求.forward 是服务器内部的一种操作.redirect 是服务器通知客户端,让客户端重新发起请求.所以,你可以说 redirect 是一种间接的请求, 但是你不能说"一个请求是属于forward还是redirect "
3.从运用地方来说
forward:一般用于用户登陆的时候,根据角色转发到相应的模块.
redirect:一般用于用户注销登陆时返回主页面和跳转到其它的网站等.
4.从效率来说
forward:高.
redirect:低.
5.jsp 语法
<jsp:forward page={“relativeurl” | “<%= expression %>”} />
或者这样写:
<jsp:forward page={“relativeurl” | “<%= expression %>”} >
<jsp:param name=“parametername” value="{parametervalue | <%= expression %>}" />+
</jsp:forward>
- JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?
1.相同点:JSP是 Servlet技术的扩展,所有的jsp文件都会被翻译为一个继承 HttpServlet的类.也就是jsp最终也是一个Servlet,本质上是Servlet的简易方式,这个 Servlet对外提供服务.
2.Servlet和 JSP最主要的不同点在于 JSP侧重于视图,Servlet主要用于控制逻辑。Servlet如果要实现 html的功能,必须使用 Writer输出对应的html,比较麻烦。而 JSP的情况是 Java和 HTML可以组合成一个扩展名为.jsp的文件,做界面展示比较方便而嵌入逻辑比较复杂.
- 如果浏览器cookie被用户禁止,session还能用吗?
一般情况下,在会话中,服务器存储的session是通过sessionid存储在cookie中,来存储在客户端的。所以,如果浏览器禁用了cookie,客户端请求没办法传递sessionid,服务器无法识别用户身份,会导致session失效。
- 有哪些方法可以完成会话跟踪
从原理上分析,一次请求和响应主要参与的有服务器、客户端,以及通信的HTTP协议,多以分别从这三方面考虑,会话跟踪技术主要有以下四种:
(1)Cookie
(2)url重写
(3)隐藏表单域
(4)Session
- 页面间对象传递的方法
通过servletcontext,也就是application对象了,但这种情况要求在同一个web应用下,
2. 通过sessioncontext,也就是session对象了,这种情况一般也是要求在同一个web应用下,
1和2在特定的部署条件下,比如支持对话复制的负载均衡环境下,或者cluster情况下,可以跨服务器。
3. 通过request对象,也就是在request里设置properties了,但是这种情况要求必须使用request.dispatch方法,也就是在server端重定向
4. 通过response.redirect方法,这样既可以利用sesseion和application,如果不在同一个web应用下,就要使用url编码来传递参数了