servlet与jsp的联系与区别

jsp与servlet的联系与区别(34赞)  http://blog.csdn.net/kaixinbingju/article/details/9409927

JSP是Servlet技术的扩展,Java程序段和HTML可以组合成一个扩展名为.jsp的文件, 本质上是Servlet的简易方式,更强调应用的外表表达。 JSP编译后是"servlet类"。 
Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。 
JSP侧重于视图,Servlet主要用于控制逻辑。

简单描述一下JSP,以及JSP的工作原理 :
JSP技术是在传统的网页HTML文件中插入Java程序段(Scriptlet)和JSP标记(tag)。
JSP引擎(本身也是一个Servlet)首先会把这个JSP文件转换成一个Java源文件,并将该Java文件编译成.class文件,浏览器在调用JSP文件时,Servlet容器会把浏览器的请求和对浏览器的回应封装成
HttpServletRequest和HttpServletResponse对象,同时调用对应的Servlet实例中的jspService()
方法,把这两个对象作为参数传递到jspService()方法中。jspService()方法执行后会将HTML内容
返回给客户端。

1. 首先什么是servlet:
servlet是sun公司为开发动态web而提供的一门技术,用户若想用发一个动态web资源(即开发一个Java程序向浏览器输出数据),需要完成以下2个步骤: 
  1、编写一个Java类,实现servlet接口。 
  2、把开发好的Java类部署到web服务器中。 
  按照一种约定俗成的称呼习惯,通常我们也把实现了servlet接口的java程序,称之为Servlet 
  1. servlet的运行过程:(运行在服务器端)
1.浏览器发出请求,被web容器获取到 
2.Web服务器首先检查是否已经装载并创建了该Servlet的实例对象。如果是,则直接执行第4步,否则,执行第3步。 
3.装载并创建该Servlet的一个实例对象,调用Servlet实例对象的init(初始化)方法。 
4.创建一个用于封装HTTP请求消息的HttpServletRequest对象和一个代表HTTP响应消息的HttpServletResponse对象,然后调用Servlet的service()方法并将请求和响应对象作为参数传递进去。 
5.WEB应用程序被停止或重新启动之前,Servlet引擎将卸载Servlet,并在卸载之前调用Servlet的destroy()方法。
一般情况,servlet是在被请求的时候才去创建的,但是当添加时,就会在初始化的时候创建它,利用这点特性,我们可以初始化创建数据库等等。
使用servlet时,一般都是继承httpServlet,然后分别实现doGet或者doPost方法,但是在这里面要注意的是,这servlet并不是线程安全的,多线程单实例执行的,当并发访问同一个资源的话,就有可能引发线程安全问题

servlet的生命周期: 加载和实例化, 初始化, 请求处理, 服务终止. 

servlet与jsp的联系与区别
Java web初始化加载顺序及servlet运行过程: http://blog.csdn.net/douya_bb/article/details/51792596
  1. 启动web项目后,web容器首先回去找web.xml文件,读取这个文件。
  2. 容器会创建一个 ServletContext ( servlet 上下文),整个 web 项目的所有部分都将共享这个上下文。
  3. 容器将 转换为键值对,并交给 servletContext
  4. 容器创建 中的类实例,创建监听器。
  5. 容器加载filter,创建过滤器, 要注意对应的filter-mapping一定要放在filter的后面。
  6. 容器加载servlet,加载顺序按照 Load-on-startup 来执行

web.xml 的加载顺序是: [ServletContext -> context-param -> listener -> filter -> servlet ] ,

             而同个类型节点之间的实际程序调用的顺序是根据对应的 mapping 的顺序进行调用的.
不过有一点需要注意的是: spring容器的加载要在servlet之后,因此在有些过滤器当中需要提前用到spring bean的时候,就需要改成 Listener 的方式 :
org.springframework.web.context.ContextLoaderListener

Servlet 处理表单数据,这些数据会根据不同的情况使用不同的方法自动解析:
getParameter():您可以调用 request.getParameter() 方法来获取表单参数的值。
getParameterValues():如果参数出现一次以上,则调用该方法,并返回多个值,例如复选框。
getParameterNames():如果您想要得到当前请求中的所有参数的完整列表,则调用该方法。

请简述HTML,CSS,javascript 各自的职责以及他们之前的关系。
HTML负责显示网页静态内容,
CSS负责美化内容,
javascript负责动态交互。
三种互相独立,又相辅相成。

请求转发与重定向 forward()  与 redirect() 的区别?
使用 forward 的时候浏览器不知道它所请求的具体资源来源,所以地址栏不会变;
使用 redirect,服务端根据逻辑 ,发送一个状态码 ,告诉浏览器重新去请求那个地址 .所以地址栏显示的是新的URL。
forward: 转发页面和转发到的页面可以共享 request 里面的数据 .
redirect: 不能共享数据.
GETPOST区别?
1Get是从服务器端获取数据,Post则是向服务器端发送数据。
2、在客户端,Get方式通过URL提交数据,在URL地址栏可以看到请求消息,该消息被编码过;Post数据则是放在Html header内提交。
3、对于Get方式,服务器端用Request.QueryString获取变量的值;对用Post方式,服务器端用Request.Form获取提交的数据值。
4Get方式提交的数据最多1024字节,而Post则没有限制。
5Get方式提交的参数及参数值会在地址栏显示,不安全,而Post不会,比较安全。