常见问题小结

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>

  1. servlet是什么 servlet的执行原理是什么?

Servlet是一个用于扩展服务器端功能的服务器端组件技术 运行在服务器端,所以调用执行是由服务器负责 在web.xml中需要进行配置,就是将servlet和一个请求地址建立对应关系,当浏览器对地址 发起请求时,服务器则按照规则调用serlvet类中的方法 服务器端的组件技术 直接或者间接的实现Servlet接口 用于扩展服务器端功能,可以实现动态网页的开发。

  1.  Tomcat怎么修改端口号

一、找到server.xml文件

进入tomcat安装目录,进入conf文件夹,找到server.xml文件

二、编辑server.xml文件

找到Connector标签,红方框中8080位置就是端口号,修改这个端口号即可,之后重启服务器

  1.  除了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标准的版本。

  1. 常见的http状态码有哪些,分类说明

200 – 请求成功

301 – 资源(网页等)被永久转移到其它URL

404 – 请求的资源(网页等)不存在

500 – 内部服务器错误

  1. 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()

  1.  http的请求数据包和响应数据包中包含哪些内容

请求数据包结构:

  • 请求行:请求行在请求数据包的第一行,包含请求类型(get/post)、请求资源路径、协议的版本和类型

二、消息头:若干消息头样式(w3c定义的一些有特殊意义的键值对),如content-type=text/html,charset=utf-8等,服务器端和客户端都会遵循消息头的约定,也可以通过代码设置。

三、消息正文:如果请求方式为post,请求参数和值就会放在这里,如果为get那么请求参数和值就会包含在资源路径上。

响应数据包:

一、状态行:包含两部分内容的协议的版本和类型,状态码(500表示程序出错,404找不到资源路径,200正常运行)。

二、消息头:同上。

三、响应正文:服务器返回给浏览器的处理结果。

  1. 请描述一次完整的http请求过程,即前端浏览器输入url之后会经历什么

DNS解析

TCP连接

发送HTTP请求

服务器处理请求并返回HTTP报文

浏览器解析渲染页面

连接结束

  1.  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垃圾收集器所回收。

  1.  servlet是线程安全的吗?如果不是,应该怎么处理

    首先,默认的servlet是非线程安全的,servlet是单例模式,只产生一个实例,根据项目中web.xml实例,这个实例是web容器产生的,比如Tomcat,JBOSS,weblogic等。

就是说多个客户请求产生多个线程,一个线程对应一个客户,但是用的servlet对象却是一个。既然用的对象是一个,那么实例变量就是共享数据了,说到共享数据还不同步,必然是非线程安全的。

1.使用方法内局部变量

是因为各线程有自己堆栈空间,存储局部变量

方法参数传入,多采用传值(volue copy)传入方法内

2.对操作共享资源的语句,方法,对象, 使用同步

比如写入磁盘文件,采用同步锁,但建议尽量用同步代码块,不要用同步方法

3.使用同步的集合类

使用Vector代替ArrayList

使用Hashtable代替HashMap。

4.不要在 Servlet中再创建自己的线程来完成某个功能。

  1.  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>

  1.  JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?

1.相同点:JSP是  Servlet技术的扩展,所有的jsp文件都会被翻译为一个继承 HttpServlet的类.也就是jsp最终也是一个Servlet,本质上是Servlet的简易方式,这个 Servlet对外提供服务.

2.Servlet和  JSP最主要的不同点在于  JSP侧重于视图,Servlet主要用于控制逻辑。Servlet如果要实现  html的功能,必须使用  Writer输出对应的html,比较麻烦。而 JSP的情况是 Java和 HTML可以组合成一个扩展名为.jsp的文件,做界面展示比较方便而嵌入逻辑比较复杂.

  1. 如果浏览器cookie被用户禁止,session还能用吗?

一般情况下,在会话中,服务器存储的session是通过sessionid存储在cookie中,来存储在客户端的。所以,如果浏览器禁用了cookie,客户端请求没办法传递sessionid,服务器无法识别用户身份,会导致session失效。

  1. 有哪些方法可以完成会话跟踪

从原理上分析,一次请求和响应主要参与的有服务器、客户端,以及通信的HTTP协议,多以分别从这三方面考虑,会话跟踪技术主要有以下四种:

(1)Cookie

(2)url重写

(3)隐藏表单域

(4)Session

  1. 页面间对象传递的方法

通过servletcontext,也就是application对象了,但这种情况要求在同一个web应用下,
      2. 通过sessioncontext,也就是session对象了,这种情况一般也是要求在同一个web应用下,
1和2在特定的部署条件下,比如支持对话复制的负载均衡环境下,或者cluster情况下,可以跨服务器

3. 通过request对象,也就是在request里设置properties了,但是这种情况要求必须使用request.dispatch方法,也就是在server端重定向
      4. 通过response.redirect方法,这样既可以利用sesseion和application,如果不在同一个web应用下,就要使用url编码来传递参数了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值