jsp与servlet

JSP 专栏收录该内容
2 篇文章 0 订阅

什么是JSP?
JSP(java Service Pages)是由Sun Microsystems公司倡导、许多公司参与一起建立的动态技术标准。
在传统的HTML文件(*.htm 、 *.html)中加入Java程序片段(Scriptlet)和JSP标签,构成了JSP网页。
JSP页面的运行原理
1、客户端向服务器发送JSP页面请求。
2、JSP容器接收到请求后检索对应的JSP页面,如果该JSP页面是第一次被请求,则容器将此页面中的静态数据(HTML文本)和动态数据(Java脚本)全部转化成Java代码,使JSP页文件翻译成一个Java文件即Servlet。
3、容器将翻译后的Servlet文件编译成字节码文件即.class。
4、编译后的字节码文件被加载到容器内存中执行。并根据用户的请求生成HTML格式的响应内容。
5、容器将响应内容返回到客户端。如下图所示

在这里插入图片描述JSP页面由以下内容组成在这里插入图片描述
每创建一个JSP页面都有一个page指令
在这里插入图片描述

如下是page的属性
在这里插入图片描述
page的三大指令
Page :指令是针对当前页面的指令,Include :用于指定如何包含另一个页面,Taglib :用于定义和指定自定义标签。
JSP中动态include和静态include的区别
a、静态include:语法:<%@ include file=“文件名” %>,相当于复制,编辑时将对应的文件包含进来,当内容变化时,不会再一次对其编译,不易维护。
b、动态include:语法:<jsp:include page=“文件名”>,能够自动检查被包含文件,当客户端对JSP文件进行请求时,会重新将对应的文件包含进来,进行实时的更新。
page有四大作用域(从小到大排序)
1、page:代表与一个页面相关的对象和属性。
2、request:代表与客户端发出的一个请求相关的对象和属性。一个请求可能跨越多个页面,涉及多个 Web 组件;需要在页面显示的临时数据可以置于此作用域。

3、session:代表与某个用户与服务器建立的一次会话相关的对象和属性。跟某个用户相关的数据应该放在用户自己的 session 中。
4、application:代表与整个 Web 应用程序相关的对象和属性,它实质上是跨越整个 Web 应用程序,包括多个页面、请求和会话的一个全局作用域。
较常用的就是session,当前浏览器的多次请求与响应的过程。
而使session(当前会话)结束的有三种:
1、关闭当前服务器,
2、超时,服务器响应.
3、调用 session.invalidate()方法来结束。

Servlet的声明周期

而Servlet有良好的生存期的定义,包括加载和实例化、初始化、处理请求以及服务结束。这个生存期由javax.servlet.Servlet接口的init(),service()和destroy()方法表达。
Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。
web容器加载servlet,生命周期开始。通过调用servlet的init()方法进行servlet的初始化。通过调用service()方法实现,根据请求的不同调用不同的do***()方法。结束服务,web容器调用servlet的destroy()方法。

jsp和servlet 的区别:

JSP是Servlet技术的扩展,本质上就是Servlet的简易方式。JSP编译后是“类servlet”。
Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是Java和HTML可以组合成一个扩 展名为.jsp的文件。JSP侧重于视图,Servlet主要用于控制逻辑。
页面向后台提交数据有三种方式
1、form表单。
2、a href 超链接。
3、ajax运用了js技术
页面向后台提交请求有两种方式
1、get。
2、post。
既然的提交数据那么肯定有中文,有数字,而数据提交不是中文格式,那么提交的数据就会出现乱码问题,那么如何解决表单提交的中文乱码问题呢?
a、设置页面编码,若是jsp页面,需编写代码<%@page language=“java” pageEncoding=“UTF-8” contentType=“text/html;charset=UTF-8” %>
若 是 html 页 面 , 在 网 页 头 部 ( < head>< /head> ) 中 添 加 下 面 这 段 代 码 < meta http-equiv=“Content-Type” content=“text/html; charset=utf-8” />
b 、 将 form 表 单 提 交 方 式 变 为 post 方 式 , 即 添 加 method=“post”; ) 在 Servlet 类 中 编 写 代 码request.setCharacterEncoding(“UTF-8”),而且必须写在第一行。
c 、 如 果 是 get 请 求 , 在 Servlet 类 中 编 写 代 码 byte [] bytes = str.getBytes(“iso-8859-1”);String cstr = new String(bytes,“utf-8”);
或者直接修改Tomcat服务器配置文件server.xml增加内容:URIEncoding=“utf-8”
get和post的区别
a、get是用来从服务器上获取数据,而post是用来向服务器传递数据;
b、get将表单中数据按照variable=value的形式,添加到action所指向的URL后面,并且两者用"?“连接,变量之间用”&"连 接;而post是将表单中的数据放在form的数据体中,按照变量与值对应的方式,传递到action所指定的URL。
c、get是不安全的,因为在传输过程中,数据是被放在请求的URL中;而post的所有操作对用户来说都是不可见的。
d、get传输的数据量小,这主要应为受url长度限制;而post可以传输大量的数据,所有上传文件只能用post提交。
e、get限制form表单的数据集必须为ASCII字符;而post支持整个IS01 0646字符集。
f、get是form表单的默认方法。
页面发送请求,servlet执行逻辑,servlet调用service方法根据页面提交方式来调用doget()或dopost()方法。最后相应。

request.getAttribute()和 request.getParameter()有何区别
a、request.getParameter()取得是通过容器的实现来取得通过类似post,get等方式传入的数据。
b、getAttribute是返回对象,getParameter返回字符串
c、getAttribute()一向是和setAttribute()一起使用的,只有先用setAttribute(设置之后,才能够通过getAttribute()来获得值,它们传递的是Object类型的数据。而且必须在同一个request对象中使用才有效。
而getParameter()是接收表单的get或者 post提交过来的参数
如下是Request对象的主要方法
在这里插入图片描述

Servlet API中forward(转发)与redirect(重定向)的区别?

1、从地址栏显示来说
forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址.
redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.所以redirect等于客户端向服务器端发出两次request,同时也接受两次response。
转发地址栏不发生改变,重定向地址栏发生改变。
转发是一次请求,重定向是多次请求。
2、从数据共享来说
forward:转发页面和转发到的页面可以共享request里面的数据.redirect:不能共享数据.redirect不仅可以重定向到当前应用程序 的其他资源,还可以重定向到同一个站点上的其他应用程序中的资源,甚至是使用绝对URL重定向到其他站点的资源.forward方法 只能在同一个Web应用程序内的资源之间转发请求.forward 是服务器内部的一种操作.redirect 是服务器通知客户端,让客户端重新发起请求.所以,你可以说 redirect 是一种间接的请求, 但是你不能说"一个请求是属于forward还是redirect "。
转发数据不会丢失,而重定向数据会丢失。
3、从运用地方来说
forward:一般用于用户登陆的时候,根据角色转发到相应的模块. redirect:一般用于用户注销登陆时返回主页面和跳转到其它的网站等.
4、从效率来说
forward:高. redirect:低.
servlet有四种会话跟踪技术
1、ession :使用 setAttribute(String str,Object obj) 方法将对象捆绑到一个会话。
2、Cookie: 一个 Cookie 是一个小的,已命名数据元素。服务器使用 SET-Cookie 头标将它作为 HTTP响应的一部分传送到客户端,客户端被请求保存 Cookie 值,在对同一服务器的后续请求使用一个Cookie 头标将之返回到服务器。与其它技术比较, Cookie 的一个优点是在浏览器会话结束后,甚至在客户端计算机重启后它仍可以保留其值
3、.URL 重写 :URL 可以在后面附加参数,和服务器的请求一起发送,这些参数为名字 / 值对。
4、隐藏表单域: ,非常适合步需要大量数据存储的会话应用。
说一下session的工作原理可能会好理解一点
session 的工作原理是客户端登录完成之后,服务器会创建对应的 session,session 创建完之后,会把 session 的 id 发送给客户端,客户端再存储到浏览器中。这样客户端每次访问服务器时,都会带着 sessionid,服务器拿到 sessionid 之后,在内存找到与之对应的 session 这样就可以正常工作了。

http的常见响应码

请求收到,继续处理:
100 客户端必须继续发出请求
101 客户端要求服务器根据请求转换HTTP协议版本
操作成功/收到/分析/接受:
200 交易成功
201 提示知道新文件的URL
202 接受和处理、但处理未完成
203 返回信息不确定或不完整
204 请求收到,但返回信息为空
205 服务器完成了请求,用户代理必须复位当前已经浏览过的文件
206 服务器已经完成了部分用户的GET请求
重定向:
300 请求的资源可在多处得到
301 永久重定向,在Location响应首部的值仍为当前URL(隐式重定向)
302 临时重定向,在Location响应首部的值仍为新的URL(显示重定向)
303 建议客户端访问其他URL或访问方式
304 Not Modified 请求的资源没有改变 可以继续使用缓存
305 请求的资源必须从服务器指定的地址得到
306 前一版本HTTP中使用的代码,现行版本中不再使用
307 声明请求的资源临时性删除
客户端错误:
400 错误请求。由于语法错误,该请求无法完成
401 未经授权。服务器拒绝响应
HTTP 401.1 未授权,登录失败
HTTP 401.2 未授权,服务器配置问题导致登录失败
HTTP 401.3 ACL 禁止访问资源
HTTP 401.4 未授权 授权被筛选器拒绝
HTTP 401.5 未授权 ISAPI或CGI授权失败
402 保留有效ChargeTo头响应
403 禁止访问,服务器拒绝响应
HTTP 403.1 禁止访问 禁止可执行访问
HTTP 403.2 禁止访问 禁止读访问
HTTP 403.3 禁止访问 禁止写访问
HTTP 403.4 禁止访问 要求SSL
HTTP 403.5 禁止访问 要求SSL 128
HTTP 403.6 禁止访问 IP地址被拒绝
HTTP 403.7 禁止访问 要求客户端证书
HTTP 403.8 禁止访问 禁止站点访问
HTTP 403.9 禁止访问 连接的用户过多
HTTP 403.10 禁止访问 配置无效
HTTP 403.11 禁止访问 密码更改
HTTP 403.12 禁止访问 映射器拒绝访问
HTTP 403.13 禁止访问 客户端证书已被吊销
HTTP 403.15 禁止访问 客户端访问许可过多
HTTP 403.16 禁止访问 客户端证书不可信或者无效
HTTP 403.17 禁止访问 客户端证书已经到期或者尚未生效
404 未找到。无法找到请求的位置。
405 方法不被允许。用户在Request-Line字段定义的方法不允许
406 不可接受。服务器只生成客户端不接受的响应。根据用户发送的Accept,请求资源不可访问
407 类似401,需要代理身份验证。客户端必须先使用代理对自身进行身份验证
408 超时。等待请求的服务器超时。客户端没有在用户指定的时间内完成请求
409 冲突。由于请求中的冲突,无法完成该请求。对当前资源状态,请求不能完成
410 过期。请求页不再可用。服务器上不再有此资源且无进一步的参考地址
411 服务器拒绝用户定义的Content-Length属性请求
412 一个或多个请求头字段在当前请求中错误
413 请求的body大于服务器允许的大小
414 请求的URL长于服务器允许的长度
415 不支持的媒体类型。服务器不会接受该请求,因为媒体类型不受支持。
416 请求中包含Range请求头字段,在当前请求资源范围内没有range指示值,请求也不包含If-Range请求头字段
417 服务器不满足请求Expect头字段指定的期望值,如果是代理服务器,可能是下一级服务器不能满足请求长
服务器端错误:
500 - 内部服务器错误
HTTP 500.100 - 内部服务器错误
HTTP 500-11 服务器关闭
HTTP 500-12 应用程序重新启动
HTTP 500-13 - 服务器太忙
HTTP 500-14 - 应用程序无效
HTTP 500-15 - 不允许请求
501 - 未实现。服务器不识别该请求方法,或者服务器没有能力完成请求。
502 - 网关错误
503 - 服务不可用。服务器当前不可用(过载或故障)。
504 - 网关超时

  • 3
    点赞
  • 4
    评论
  • 1
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:游动-白 设计师:我叫白小胖 返回首页

打赏作者

筱梦啊

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值