Servlet,JSP基础知识

1:页面请求的工作流程

  1. 用户通过浏览器输入链接地址来请求所需的资源
  2. 浏览器接受用户的请求,并把该请求组装成指定的格式发送给服务器端,客户端与服务器端之间通过HTTP来完成具体的交互。其中请求的数据流中主要包含HTTP请求方法(GET和POST),请求的网址以及请求的一些参数
  3. 服务器接收到客户端发来的请求,并查找用户所需的资源,找到资源后,将资源返回给客户端
  4. 服务器通过把响应信息组装成特定的信息格式返回给客户端,这个过程通过HTTP来完成。相应的数据流主要包含状态编码,Content-type,响应消息的内容
  5. 浏览器对HTML进行解析,并把响应结果展现给用户

2:HTTP中的GET和POST方法区别

HTTP请求的方法有很多种,GET,POST,HEAD,TRACE,OPTIONS等。

  • GET:最简单的一种,主要功能是从服务器端获取用户所需资源,并将其作为响应返回给客户端。GET方法的主要作用是来获取服务器端资源信息,不会影响资源自身的状态。
  • POST:可从服务器端获取资源,同时还可以向服务器上传数据。
  • GET也可向服务器端上传数据,一般不推荐,原因如下:
  1. 采用GET方法向服务器上传数据时,一般将数据添加到URL后面,并且用“?”链接,各个变量用&链接。由于对URL长度存在限制,所以这种方式可传递的数据量非常小,通常在1024Byte左右,而POST方法传递数据是通过HTTP请求的附件进行的,传输的数据量更大。
  2. GET方式是添加到URL后面的,因此上传的数据会被彻底暴露,存在安全隐患。而POST方式提交的数据没有明文显示,安全性更高

3:Servlet详解

  • HTML只能保存静态内容,难以满足客户需要。
  • Servlet是采用Java 语言编写的服务器端程序,它运行于Web服务器中的Servlet容器中,主要功能是提供请求/响应的Web服务模式,可以生成动态的Web内容,优点如下:
  1. 较好的移植性:Java是跨平台和可移植性强的特点,使得servlet也有较好的移植性,即无需修改代码就可以部署到多种不同类型的web容器中
  2. 执行效率高:Servlet针对每个请求创建一个线程来执行,而创建线程得开销小,所以效率高;
  3. 使用方便:Servlet提供了许多非常有用的接口用来读取或设置HTTP头消息,处理Cookie和跟踪会话状态等;
  4. 可扩展性强:Servlet是Java写的,具有Java得所有优点。
  • Servlet没有main方法,他是在容器中执行的。当Web服务器获取到一个对Servlet的请求时,该服务器将会把这个请求交给对应的容器来处理。容器通过调用Servlet的方法(doGet/doPost)来响应客户端的请求;Servlet处理客户端请求步骤如下:
  1. 用户通过点击一个链接来向Servlet发起请求
  2. Web服务器接收到请求后,会把该请求交给相应的容器来处理,当容器发现这是Servlet发起的请求后,容器会创建两个对象(HttpServletResponse和HttpServletRequest);
  3. 容器可以根据请求消息中的URL找到对应的Servlet,然后针对该请求创建一个单独的线程,同时将上面两个对象以参数的形式传到新创建的线程中;
  4. 容器调用Servlet的service()方法完成对用户请求的响应,service()方法会调用doPost()方法和doGet方法完成具体的响应任务,同时把生成的动态页面返回容器;(method属性是GET/POST时,分别调用doGet/doPost方法)
  5. 客户把相应消息组成HTTP格式返回给客户端,此时这个线程运行结束,同时删除(2)中创建的对象;

4:servlet生命周期

  • Servlet生命周期只有两个状态:为创建状态和初始化状态;状态转换通过三个方法来实现
  • init():init方法时Servlet生命的起点,用于创建或打开任何与Servlet相关的资源以及执行初始化工作;
  • service():service方法时Servlet中真正处理客户端传过来的请求的方法,根据HTTP请求方法将请求分发到doGet或doPost方法;
  • destroy():destroy方法释放任何在init方法中打开的与Servlet相关的资源;
  • Servlet生命周期
  1. 加载:容器通过类加载器使用Servlet类对应的文件来加载Servlet
  2. 创建:通过调用Servlet的构造函数来创建一个Servlet实例
  3. 初始化:调用init()方法完成初始化工作,这个方法是在Servlet已被创建但向客户端提供服务之前调用的,init()方法只会调用一次;
  4. 处理客户请求:Servlet被创建后就可提供服务,每当有一个新的客户请求到来时,容器就会创建一个新的线程处理该请求,接着调用service进行服务。
  5. 卸载:在卸载Servlet方法之前调用destroy方法,释放所占用的资源。destroy被调用后,容器就不会像这个Servlet发送任何请求消息了,destroy方法只会被调用一次;

5:JSP

  • JSP(Java Server Page):本质上是嵌入了Java代码的HTML文件,在引入JSP之前,所有业务和HTML响应都是在Servlet中实现的,缺陷是:必须把用户响应的试图组装成一个很长的HTML格式的字符串写入println方法中,业务逻辑和试图没有分离,系统扩展性差;
  • JSP引入解决了这个问题,理念是让每个Servlet只负责其对应的业务逻辑的处理,让JSP来负责用户的HTML显示,因此实现了业务逻辑和视图逻辑的分离,增强了可扩展性

6:JSP和Servlet异同

  • 相同:JSP是一个特殊的Servlet,只要是JSP可完成的工作,Servlet都可以完成,JSP页面最重要被转换成Servlet来执行,因此处理请求实际上是编译后的Servlet;
  • 不同:
  1. Servlet实现方法是在Java中嵌入HTML代码,编写和修改HTML非常不方便,而JSP是在html中嵌入Java代码,适合页面的显示(在Struts中,Servlet位于MVC设计模式中的控制层,JSP位于视图层)
  2. Servlet中没有内置对象,JSP中的内置对象都是必须通过HttpServletResponse和HttpServletRequest以及HttpServlet对象得到;

7:Servlet中forword和redirect的区别

  • 为了保证Servlet之间可以互相跳转,Servlet中提供了两种跳转方式;
  • forword:服务器内部重定向,客户端不知道,在整个重定向过程中使用的是同一个Request,因此forword会将Request的信息带入被定向的JSP或Servlet
  • redirect:客户端的重定向,客户端浏览器会获取到跳转的地址,然后重新发送请求。这种方法比forword对了一次网络请求,则其效率低于forword。

8:JSP的内置对象

JSP内置对象
名称描述
request客户端请求,此请求包含来自GET/POST请求的参数,客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出相应。request对象是用来获取请求参数的非常重要的途径,他是HttpServletRequest的实例
response表示服务端对客户端的响应,将web服务器处理后的结果返回给客户端,他是HttpServletResponse的实例
pageContext提供了对JSP页面的所有对象及命名空间的访问,也就是说,用它可以访问到本页面的所有其他对象,例如前面的requset,response,session,application等;
session用来表示客户端与服务器的一次会话。从客户端与Web服务器建立连接的时候会话开始,直到关闭浏览器会话结束,是HttpSession的实例
application代表JSP所属的Web应用本身。application可以存放全局对象,因此可以实现对象间的数据共享。生命周期和服务器的生命周期一致;也就是说,服务器启动后这个对象即被创建出来,直到服务器停止后这个对象的生命周期才结束,是ServletContext类的实例
out用于在客户端浏览器内输出信息,是JspWriter的实例
config主要作用是取得服务器的配置信息。当一个Servlet初始化时,容器把某些信息通过config对象传递给这个Servlet,Servlet可以使用这个对象获取所需的配置信息
page表示当前JSP页面,类似于Java中的this指针,是java.lang.Object类的实例
exception用来表示异常。当一个页面在运行过程中发生了例外,就会产生这个对象。如果JSP需要使用这个对象,就必须把isErrorPage设为true,否则无法编译,是java.lang.Throwable的对象

9:request的常用方法

  • request对象是用来封装用户请求数据的,每当请求到达服务器时,都会创建一个request对象;
setAttribute(String name,Object)用来设置名字为name所对应的属性值。在对请求进行转发处理时,也可以通过该方法设置一些属性,从而将数据传递到转发后的页面中
getAttribute(String name)用来获取名字为name对应的属性值,也可以通过setAttribute方法设置一些属性
getAttributeNames()返回request对象所有属性的名字集合。其返回值为枚举的实例
getCookies()用来返回客户端的所有Cookie对象,其结果是一个Cookie数组
getCharacterEncoding()用来返回请求的消息中字符的编码格式
getContentLength()用来获取请求消息的Body的长度
getInputStream()返回请求的输入流,这个输入流可以被用于获得请求中的数据
getMethed()用来获取HTTP的请求方式,如Get或Post
getParameter(String name)用来获取用户提交的数据,其中name与表单中的name属性一一对应
getParameterNames()用来获取客户端送给服务端的所有参数的名字,其结果是一个枚举的实例
getParameterValues(String name)获得有name指定的参数的所有值
getProtocal()用来获取客户端向服务器端传送数据所使用的协议名称
getQueryString()用来获得查询字符串,返回值为URL后面的参数串
getRequestURL()用来获取发出请求字符串的客户端地址
getRemoteAddr()获取客户端的IP地址
getSession(boolean create)用来获取与请求有关的session
getServereName()获得服务器的名字
getServletPath()用来获取客户端所请求的脚本文件(JSP或Servlet)的路径
getServerPort()用来获取服务器的端口号
removeAttibute(String name)用来删除名字为name对应的属性

10:JSP的动作

JSP使用动作来实现动态的插入文件,实现重定向和对JavaBean的引用等功能。有六个基本动作;

10.1----jsp:include

用来在页面被请求时引入一个文件。include指令是在jsp文件被转换成Servlet是引入文件,而jsp:include插入文件的时间是在页面被请求时,而且被引用文件不能包含某些jsp代码

<jsp:include page="text.jsp" flush="true">
<jsp:param name="name" value="value"/>
</jsp:include>

以上代码表示在当前文件中可以引入test.jsp文件

10.2---.jsp:useBean

用来寻找或者实例化一个JavaBean。它使得开发人员既可以发挥Java组件重用的优势,同时也避免了损失jsp区别于Servlet的方便性。

<jsp:useBean id="car" scope="session" class="com.Car">

以上代码表示实例化了一个com.Car类的实例

10.3---jsp:setProperty

用来设置已经实例化的Bean对象的属性,实例如下:

<jsp:setProperty name="car" property="color" value="red"/>

以上代码用来获取名字为car的实例的属性设置为red

10.4---jsp:getProperty

用来获取某个JavaBean的属性,实例如下:

<jsp:qetProperty name="car" property="color"></jsp:getProperty>

10.5---jsp:forward

用来把请求转到一个新的页面,实例如下

<jsp:forward page="/Servlet/login" />

以上代码用来把当前页面重定向到/Servlet/login来处理。

10.6---jsp:plugin

用于在浏览器中播放或者显示一个对象,使用这个动作能插入所需的特定的浏览器的OBJECT或者EMBED元素来制定浏览器运行一个Java Applet所需的插件,实例如下:


<jsp:plugin type="applet" codebase="/ch5" code="Hello.class" height="40" width="320">

以上代码用来在浏览器中运行一个applet插件。

11:会话跟踪技术

  • page:代表与一个页面相关的对象和属性。一个页面有一个编译好的Java servlet类表示;
  • request:代表与web客户端发送的一个请求相关的对象和属性,一个请求可能跨越多个页面,涉及多个web组件;
  • session:代表与用于某个web客户端的一个用户体验相关的对象和属性,一个web会话也可以经常跨越多个客户端请求;   
  • application:代表与整个web应用程序相关的对象和属性,实质上是跨越多个web应用程序,包含多个页面,请求和会话的一个全局作用域;

12:什么是Ajax

  • Ajax(Asychronous JavaScript and XML):是一个结合了Java技术,XML以及JavaScript的编程技术,其主要目的实在不刷新页面的情况下通过与服务器进行少量数据交互来提高页面的交互性,减少响应时间,改善用户体验。使用Ajax后,页面就不需要在每次用户提交修改时重新加载了;

13:Cookie和Session的区别

  • cookie是在HTTP下,服务器或脚本可以维护客户工作站上信息的一种方式。他是由web服务器保存在用户浏览器上的小文件,可以包含有关用户的信息。
  • session是指用来在客户端与服务器端之间保持状态的解决方案以及数据结构。区别如下:
  1. cookie机制采用的是在客户端保持状态的方案,即数据存放在客户的浏览器上;而session机制采用的是在服务器端保持状态的方案;
  2. cookie安全性不够。由于cookie信息存放到客户端,其他人可以很容易得到本地cookie,并进行cookie欺骗。而session存放到服务器端,安全性较高
  3. cookie性能更高一点。由于session会在一定时间内保存在服务器上,因此当访问量增多时,会降低服务器的性能;
  4. 单个cookie保存的数据不能超过4KB,很多浏览器都限制一个站点最多保存20个cookie,而session不存在此问题;
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值