关于servlet:Servelet

19次阅读

共计 2654 个字符,预计需要花费 7 分钟才能阅读完成。

1. 什么是 servelet:
Servelet 实质上是一段 Java 程序,和之前的 Java 程序不同的是,Servlet 程序无奈独立运行,须要将 Servlet 程序放在服务器中(比方 tomcat 服务器),由服务器调用才能够执行。—–Servlet: 服务器端的 Java 程序.

2.Servelet 作用:
其作用是对服务器接管过去的申请进行解决(作用为解决申请)

继承 HttpServlet 类,默认会笼罩 doGet 办法和 doPost 办法,两个办法的作用为:

  • doGet 办法:当浏览器发送申请的形式为 GET 提交时, 将会调用 doGet 办法来处

理申请

  • doPost 办法:当浏览器发送申请的形式为 POST 提交时,

将会调用 doPost 办法来解决申请
提醒:如果当 GET 提交和 POST 提交解决代码雷同时,能够将代码写在其中一个方
法里(例如写在 doGet 中),并在另外一个办法(例如 doPost)中调这个办法。这样
一来, 不论是 GET 提交还是 POST 提交, 最终 doGet 办法都会执行, 都会对申请进行解决!!

Servlet 在 web.xml 中的配置
创立 servelet 时,会主动配置 web.xml 文件(如果是复制 servelet 文件,配置文件不会跟着一起复制,需本人配置)(3.0 以上版本创立 web 工程不主动增加 web.xml)

对于下面的配置信息:
a) Eclipse 每创立一个 Servlet,就会在 web.xml 文件中增加两个标签:<servlet> 和
<servlet-mapping> 标签(能够将这两个标签看成一个组的标签)
b) <servlet> 和 <servlet-mapping> 标签内都会有一个 <servlet-name> 标签,标签的
内容能够更改,但要求更改后的这两个 <servlet-name> 标签的内容也必须统一。
c) <servlet-class> 标签用于配置 Servlet 类的全限定类名 (即包名 + 类名)
须要留神:如果在创立 Servlet 后批改了 Servlet 类的名称,这个中央也要一起更
改,否则将会呈现 ”ClassNotFoundException” 即类找不到异样
d) <url-pattern> 标签用于配置浏览器以什么门路拜访以后 Servlet(即 Servlet 对外
拜访的门路),默认的门路是:/ 类名
例如:下面为 HelloServlet 配置的 <url-pattern> 为 /HelloServlet,因而咱们在浏览
器中的拜访门路则为:
http:// 主机名 /web 我的项目拜访门路 …

request 和 response 介绍
request: 封装了浏览器发送给服务器的申请信息(申请行、申请头、申请实体等)
申请参数: 超链接前面通过问号提交的数据,都是申请参数。

申请参数时的中文乱码:
get:tomcat8.0 当前提交不会
post:request.setCharacterEncoding(“utf-8”);(告诉服务器在接管 POST 提交的参数时,应用 utf- 8 编码来接管!)

作为域对象应用
request 对象上的 map 汇合以及 request 对象的所在范畴称之为域对象
存数据:request.setAttribute(String attrName, Object attrValue);
— 往 request 域中存入一个域属性,属性名(key)只能是字符串, 属性值 (value) 能够是任意类型。
取对象:request.getAttribute(String attrName);
— 依据属性名 (key) 获取对应的属性值(value)。返回的是一个 Object 类型的对象。

申请转发(forward)
(1)转发是一次申请,一次响应
(2)申请转发前后,浏览器的地址栏地址不会发生变化。(浏览器 – 拜访 –> A – 转发 –> B,地址栏地址始终指向 A 的地址)
(3)申请转发前后的两个资源必须属于同一个 Web 利用,否则将无奈进行转发。(A– 转发 –>B,A 和 B 必须属于同一个 Web 利用!)
(4)在转发时, 能够带数据到目的地(比方, 从 A 转发到 B, 能够从 A 带数据给 B, 须要配合域对象才能够

response:封装服务器要发送给浏览器的响应信息(状态
行、响应头、响应实体),在 service 办法执行完后,服务器再将 response 中的数据取出,依照 HTTP 协定的格局发送给浏览器。
向客户端发送数据:
PrintWriter out = response.getWriter();
乱码问题:
在响应数据之前,告诉服务器应用 utf- 8 发送数据。
response.setContentType(“text/html;charset=utf-8”);

实现重定向 (redirct)
(1)重定向是两次申请、两次响应
(2)重定向前后,浏览器的地址栏地址会发生变化。(因为两次申请都是通过浏览器发动,浏览器晓得这个跳转的过程,因而地址栏地址会变动)
(3)重定向前后的 request 对象不是同一个(因为重定向是两次申请,服务器会依据两次申请创立两个不同的 request 对象,request 对象不是同一个,也就不能在重定向时通过 request 带数据到目的地。)
(4)重定向前后的两个资源能够是来自不同的 web 利用,甚至能够是来自不同的服务器。(进行跳转的两个资源之间没有限度)

实现代码:response.sendRedirect(所重定向到资源的 URL 地址);

申请转发(forward)和重定向(redirect)的区别?
(1)申请转发是一次申请, 一次响应; 而重定向是两次申请两次响应
(2) 申请转发前后地址栏地址不会发生变化; 而重定向前后地址栏地址会发生变化
(3) 申请转发前后的 request 对象是同一个, 能够配合 request 域对象带数据到目的地; 而重定向前后的 request 对象不是同一个, 不能联合 request 域对象在重定向前后带数据.
(4)申请转发要求两个资源必须属于同一个 Web 利用; 而进行重定向的两个资源能够是同一个 Web 利用, 也能够不是同一个 Web 利用, 甚至能够是来自于不同的主机或服务器.

什么时候用申请转发(forward)?什么时候用重定向(redirect)?
(1)如果心愿跳转前后地址栏地址不会发生变化, 只能应用转发; 如果心愿跳转前后地址栏地址会发生变化, 只能应用重定向
(2) 如果心愿在跳转前后, 可能通过 request 对象带数据到目的地, 只能应用转发
(3) 如果仅仅是做一个跳转, 没有其余要求, 此时举荐应用转发(转发是一次申请, 一次响应, 能够缩小拜访服务器的次数, 升高服务器的压力)

正文完
 0