乐趣区

关于jsp:学习笔记关于Servlet

Servlet 和 JSP 的区别和分割

HTML

全称 Hyper Text Markup Language 超文本标记语言, 是一种标记语言。它包含一系列标签.通过这些标签能够将网络上的文档格局对立,使扩散的 Internet 资源连贯为一个逻辑整体。HTML 文本是由 HTML 命令组成的描述性文本,HTML 命令能够阐明文字,图形、动画、声音、表格、链接等, 能够对立了解为动态 Web 资源。

JSP

全称 JavaServer Pages 动静网页创立规范,部署于网络服务器上,Jsp 以 Java 语言作为脚本,为用户的 Http 申请提供服务,并且与服务器上的其余 Java 程序独特解决简单的业务需要,生成动静 HTML。

问题:

用户在拜访静态数据(图片,文字 …)的时候间接返回动态页面, 用户拜访在拜访动态数据的时候须要连贯数据库,进行相应的逻辑解决,拿取用户申请的数据,那么服务器是如何辨认解决逻辑的呢?(通过 Servlet)

Servlet

全称 Servlet Applet 服务器连接器,用 Java 语言编写的服务器端程序,具备独立于平台和协定的个性,次要性能在于交互式地浏览和生成数据,生成动静 Web 内容,广义的 Servlet 是指 Java 语言实现的一个接口,狭义的 Servlet 是指任何实现了这个 Servlet 接口的类,个别状况下,人们将 Servlet 了解为后者。Servlet 运行于反对 Java 的应用服务器中。从原理上讲,Servlet 能够响应任何类型的申请,但绝大多数状况下 Servlet 只用来扩大基于 HTTP 协定的 Web 服务器。

关系和分割

1.Web 容器将 Jsp 编译成了 jvm 可能辨认的 Servlet(Java 类),Jsp 的实质是 Servlet。
2.Jsp 侧重于前端的视图,Servlet 侧重于逻辑管制。
3.Servlet 没有内置对象。
4.Jsp 中的内置对象由 HttpServletRequest,HttpServletResponse,HttpServlet 对象的到。

Servlet 我的项目的开发

步骤一:创立 Servlet 实现 Servlet 的一个接口或者继承 Servlet 的子类(GenericServlet/HttpServlet),并实现其办法。



web 工程目录文件的阐明

(1) Servlet: 工程名称 / 项目名称
(2) src: 源码目录, 创立的 java 源文件、配置文件(properties、xml 文件等)都能够放在 src 源码目录下
(3) build/classes: 编译文件的输入目录, src 源码目录中的文件编译后会输入到 classes 目录下。其中的 classes 目录在公布时会放在 WEB-INF 目录下,随着我的项目一起公布到服务器中
(4) WebContent: 就是 Web 利用的目录,其中能够寄存 html、css、js、jsp、图片以及编译后的 class 文件、jar 包、web.xml 文件等. 未来公布我的项目到服务器,其实就是将 WebContent 中的所有内容一起公布到服务器中。(5) WebContent/WEB-INF/lib: 用于寄存以后我的项目所依赖的 jar 包。比方要拜访 mysql 数据库,须要导入 mysql 驱动包,间接将 jar 包拷贝到 lib 目录下即可!(也不必再去做 build path --> add to build path)
步骤二:创立 Web 的拜访门路,即配置 web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>Servlet</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
    <description></description>
    <display-name>ServletDemo</display-name>
    <servlet-name>ServletDemo</servlet-name>
    <servlet-class>MTingCat.pra.ServletDemo</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>ServletDemo</servlet-name>
    <url-pattern>/ServletDemo</url-pattern>
  </servlet-mapping>
</web-app>

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]我的项目拜访门路 http://localhost:8089/Servlet/ServletDemo

步骤三:运行于 Web 端服务器(Tomcat)


步骤四:公布

Servlet 申请形式:申请转发和重定向

申请转发

申请转发和重定向指的是服务器外部资源的跳转形式,然而资源的跳转形式有所不同。
申请转发指的是浏览器申请服务器资源的时候,服务器上的 ServletA 接管申请,再将申请转发给 ServletB,由 ServletB 进行业务逻辑的解决,再生成动静页面做出响应。

申请转发特点

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

request 在实现转发时,通过 request.setAttribute办法和 request.getAttribute办法带数据到目的地时,就是通过 request 对象中的 map 汇合带数据,这个 request 对象上的 map 汇合以及 request 对象所在的范畴即称之为是一个域对象。

request.setAttribute(String attrName, Object attrValue);
-- 往 request 域中存入一个域属性,属性名(key)只能是字符串, 属性值 (value) 能够是任意类型。request.getAttribute(String attrName);
-- 依据属性名 (key) 获取对应的属性值(value)。返回的是一个 Object 类型的对象。
域对象的特色
生命周期

从一次申请开始到做出响应:在服务器调用 Servlet 程序的 service 办法之前,会创立代表申请的 request 对象,在申请解决完,响应完结时,会销毁 request 对象。

作用范畴

在一次申请范畴内,能够通过 request 域带数据到目的地。

次要性能

和申请转发配合应用,从 Servlet 带数据到 JSP(带数据到目的地)

实现
request.getRequestDispatcher(url 地址 / 转发到资源的地址).forward(req, res);

重定向

重定向指的是浏览器再拜访服务器的资源时,不能间接失去想要的数据,而是拿到服务器返回的数据,再一次拜访服务器拿到数据。

重定向特点
(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)如果仅仅是做一个跳转, 没有其余要求, 此时举荐应用转发(转发是一次申请, 一次响应, 能够缩小拜访服务器的次数, 升高服务器的压力)

Servlet 模板的创立

配置好 Servlet 的模板之后,每次须要创立时只须要输出 servlet,Alt+/ 就能够。

package ${enclosing_package};

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * author: MTingCat@tedu.cn
 * datetime: ${date} ${time}
 */
public class ${primary_type_name} extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();}
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);
    }
}
退出移动版