JSP 复习总结

JSP 复习


第二章 基本语法

  1. 在 " <%! " 和 “%>” 之间声明变量和方法。声明的变量在整个 JSP 页面都有效,同时多个用户访问时会互相影响,用 synchronized 修饰的成员变量同一时间只能被一个线程访问。
  2. 在" <%" 和 “%>” 之间插入 Java 程序片,并且按顺序执行。程序片里面的变量都是局部变量,不互相影响。可以在程序片中插入 HTML 标记,选择执行哪一段标记。
  3. "<%=""%>" 之间插入 Java 表达式, 在"<%--""--%>" 之间插入 注释。
  4. page 指令标记。用来定义整个 JSP 页面的属性和值。可选属性:
    ① contentType,指定用户浏览器用什么来解析所受到的信息。
    <%@ page contentType="text/html; charset = gb2312" %>
    ② language,定义 JSP 页面使用的脚本语言,只能去 “java”。
    ③ import,引入 Java 的包。④ session,用于设置是否需要 session 对象。
    ⑤ buffer,设置缓冲区大小。⑥ autoFlush,设置缓冲区填满是否刷新。
    ⑦ isThreadsafe,设置是否可以多线程访问 JSP 页面。
    ⑧ info,定义一个常用字符串。
  5. include 指令标记。在 JSP 中静态的插入一个文件。
    <%@ include file="文件的 URL" %>
  6. include 动作标记。在 JSP 中动态的包含一个文件,即运行时才将文件加入。可以传参数(名,值对应),被引用文件可以用 getParameter()getParameter() 获取参数。
    <jsp:include page = "文件的 URL">
    	param 子标记
    </jsp:include>
    
  7. forward 动作标记。跟上一个差不多用法,只不过这个转向后,页面地址栏仍是转向前的 URL 地址。

第三章 JSP 内置对象

1. request 对象

内置对象 request 封装了用户提交的信息,该对象调用相应的方法就可以获取封装的信息。同时也是 ServletRequest 接口类的一个实例。

  1. 用户通常使用 HTML 表单提交信息。request 对象最常用 getParameter()getParameter() 来获取信息。
  2. 处理汉字信息。在获取信息之前使用 setCharacterEncodingsetCharacterEncoding 方法设置自己的编码。
  3. 处理 HTML 标记。
    表单 <form> 标记:
    <form action = "tom.jsp" method = "post">
    		<input type = "text" name = "boy" value = "ok" >
    		<input type = "submit" value = "送出" name = "submit">
    </form>
    
    子标记 <input> 可以选择表单的类型:文本框 text,单选按钮 radio,复选框 checkbox,口令框 password,隐藏 hidden,submit 按钮,重置按钮 reset。
    下拉和滚动列表通过 <select> 和它的子标记 <option>定义。
    图像标记 <image>,视频标记 <embed>,表格标记 <table>
  4. 处理超链接
    超链接标记 <a href = 链接的 URL?参数=值> 文字说明 </a>,使用超链接的同时还可以传递参数。
2. response 对象
  1. setContentTypesetContentType 方法动态改变了 contentType 的属性值。
  2. 动态添加响应头和值:setHeader(String head, String value)
  3. sendRedirect()sendRedirect() 方法重定向另一个页面。
  4. setStatus()setStatus() 设置响应的状态行。
3. session 对象

HTTP 是一个无状态协议,因此需要借助 session 对象记录有关连接的信息,它是 HttpSession 接口类的一个实例。(注意:同一个用户在不同的 web 服务目录的 session 是互不干扰的)

session 对象使用下列方法处理数据:
public Object setAttribute(String key, Object obj) 向会话加入数据。
public Object getAttribute(String key) 返回会话中的指定数据。
public void removeAttribute(String name) 移除会话中的指定数据。

session 对象的生存期限:
invalidate() 方法使其无效
public boolean isNew() 判断是否为新建 session 对象
public long getLastAccessedTime() 获取 session 对象创建的时间,单位毫秒。
public itn getMaxInactiveInterval() 获取 session 最后一次被操作的时间,单位秒。

4. application 对象

application 对象服务器创建,每个 Web 服务目录下的 application 对象由所有用户共享,但不同 Web 服务目录下不互相同。

常用方法:
public void setAttribute(String key, Object obj),向对象添加数据
public Object getAttribute(String key),从对象读取数据
public void removeAttribute(String key),从对象删除特定数据

注意任何用户对该对象的操作都会影响到其他用户。在某些情况下,对该对象的操作需要同步处理。

5. out 对象

out 对象是一个输出流,用来向用户端输出数据。

out.print(),输出值
out.flush(),输出缓冲区的内容
out.close(),关闭流

第四章 Javabean

Javabean 是一个可重复使用的软件组件,实际上就是一个 Java 类,通过封装属性和方法成为具有某种功能或者处理某个业务的对象,简称 bean。

1. 编写 Javabean

编写 Javabean 实际上就是编写一个 Java 类,并把字节码编译好。
首先在当前 Web 服务目录建立子目录 WEB-INF\classes,然后根据类的包名建立子目录结构,将字节码放到最底层里面。这样 Tomcat服务器就能找到字节码,并根据它创建 bean 对象以使用。

2. 使用 bean

通过 JSP 动作标记 useBean 来使用 bean。
<jsp:useBean id = "circle" class = "tom.jiafei.Circle" scope = "page" />

加载原理:
当加载一个 bean 时,JSP 引擎首先查找内置对象 pageContent 中是否含有这样的 bean,如果存在,就分配这样的 bean 给用户。如果不存在就根据 class 指定的字节码创建一个 bean,并添加到 pageContent 对象。

注意:如果修改了字节码文件,必须重启 JSP 引擎才能使用。

3. bean 的生存周期

bean 的生存周期取决于 scope 所取得值。

scope = page:
bean 只在当前页面有效,直到页面执行完毕。

scope = session
bean 在用户访问的 Web 服务目录各个页面都有效,直到用户的会话 session 消失。

scope = request
bean 只在当前页面有效,直到相应结束。存活时间略长于 page。因为 JSP 引擎认为页面执行完毕后,响应才算结束。

注意:上面三种不同的用户对 bean 的改变,互不影响

scope = application
bean 为所有用户所共享。不用的用户 scope 取值是 application 的 bean 也都是相同的。

4. 获取和修改 bean 的属性

除了上面提到的用 useBean 动作标记获得一个 bean,然后直接调用 bean 的方法之外,

还可以用 <getProperty>, <setProperty> 动作标记来修改属性。
<jsp:getProperty name = "bean 的 id 的名字" property = :"bean 的属性"/>
<jsp:setProperty name = "bean 的 id 的名字" property = :"bean 的属性" value = 字符串/>

第五章 Java Servlet

当用户请求一个 JSP 页面时,JSP 引擎首先将 JSP 页面文件转译成一个 Java 文件、编译 Java 文件,并用得到的字节码文件创建一个 servlet 对象来响应用户的请求。

可以看出 Java Servlet 技术是 JSP 的根基。而它的核心思想就是在服务器创建能相应用户请求的 servlet 对象。

1. 创建 servlet 类

写一个创建 servlet 的类就是编写 javax.servlet.http 包中的 HttpServlet 类的子类。首先在当前 Web 服务目录下创建子目录 WEB-INF\classes,然后根据 servlet 类的包名结构创建相应的目录,最后将字节码文件放入。

2. 编写部署文件 web.xml

Servlet 类的字节码文件保存到指定目录后,必须为 Tomcat 服务器编写一个部署文件,以便于按用户的请求使用字节码文件创建对象。

改部署文件是一个 XML 文件,由标记组成。格式如下:
第一行一定是 XML 声明:
<?xml version = "1.0" encoding = "ISO-8859-1" ?>
接着是根标记<web-app>,所有的标记都在根标记里面。
<servlet> 标记有两个子标记
<servlet-name> 是创建的 servlet 的名字
<servlet-class> 指定哪个 Servlet 类来创建 servlet
<servlet-mapping> 标记有两个子标记
<servlet-name> 创建的 servlet 的名字
<url-pattern> 用来指定用户用怎样的URL 格式来请求 servlet

每当 Web 服务目录增加新的 servlet 时,都需要为 web.xml 文件添加相应的标记。
在这里插入图片描述

3. servlet 运行原理

① servlet 对象的声明周期:
servlet 是 javax.servlet 包中 HttpServlet 类的子类的一个实例,由服务器创建并完成初始化工作。当多个用户请求一个 servlet 时,服务器为每一个用户启动一个线程而不是启动一个进程,效率高很多。

  • 初始化 servlet。服务器初始化这个 servlet,即创建一个 servlet,这个 servlet 调用 init 方法完成初始化。
  • 新诞生的 servlet 再调用 service 方法相应用户的请求。
  • 当服务器关闭时,调用 destroy 方法销毁 servlet。

② init 方法
public void init(ServletConfig config) throws ServletException
方法执行时,服务器会把一个 ServletConfig 对象传递过来,她负责传递服务设置信息。注意 init 方法只执行一次对于多个用户。

③ service 方法

public void service (HttpServletRequest request, HttpServletResponse response) throw ServletException, IOException

两个参数分别代表用户的请求信息,返回用户的相应。service 方法执行多次对于不同用户。

④ destroy 方法
public destroy()

4. 通过 JSP 页面访问 servlet

用户除了可以按 servlet 的请求格式在浏览器的地址栏直接输入请求一个 servlet 之外,还可以通过 JSP 页面来请求。

即:让 JSP 页面负责数据的显示,而让一个 servlet 去做和处理数据有关的事情。

① 通过表单向 servlet 提交数据
将表单的 action 值设置为 web.xml 下设定的某个 servlet 访问 URL即可。同时还可以添加参数。
<form action = "computeBill?sideA=10.66&sideB=23.9" ...></form>

② 通过超链接访问 servlet
<a href = "triangle"></a>

5. 共享变量

编写 Servlet 类声明的成员变量将被所有用户所共享。

6. doGet 和 doPost 方法

前面提到:服务器创建 servlet 后,它会调用 init 方法初始化自己(只初始化一次),之后每当接受用户的请求时,就会产生一个新的线程,并在这个新的线程中调用 service 方法。

实际上,HttpServlet 类所给出的 service 方法只是先检查 HTTP 请求类型(get、post),并在 service 方法根据用户的请求方式,再调用相对应的 doGet, doPost 方法。同时还可以重写这两个方法来灵活响应用户的请求。

7. 重定向与转发

重定向的功能是将用户从当前页面或 servlet 定向到另一个 JSP 页面或 servlet。
转发的功能是将用户对当前 JSP 页面或 servlet 的请求转发给另一个 JSP 页面或 servlet。

区别:转发的话,只能看到另一个页面的效果,但是地址栏还是原来的地址。

① sendRedirect 方法
void sendRedirect (String location) 方法是 HttpServletResponse 类中的方法。注意重定向之后不能使用 request 获取对象之前提交的数据
② RequestDispatcher 对象
RequestDispatcher 对象可以将用户对当前页面的请求和响应转发给另一个页面

步骤:

  • 获得 RequestDispatcher 对象
    public RequestDispatcher getRequestDispatcher(String path)
    其中参数是要转发到的 JSP 页面,例:
    RequestDispatcher dispatcher = request.gerRequestDispatcher("a.jsp")
  • 转发
    dispatcher.forward(request, response)
8. 使用 session

怎么样在 Servlet 类中使用 session 对象?
通过 HttpServletRequest 对象 request 调用 getSession 方法获取用户的 session 对象。
HttpSession session = request.getSession(true);

第六章 MVC 模式

模型-视图-控制器 (Model-View-Controller),简称MVC 模式。

  • 模型 (model) :用于存储数据的对象
  • 视图 (view) :像控制器提交所需数据,显示模型中的数据
  • 控制器 (controller):负责具体的业务逻辑操作,即控制器根据视图提出的要求对数据作出处理,将有关结果存储到模型中,并负责让模型和视图进行必要的交互,当模型中数据变化时,让试图更新显示。
    在这里插入图片描述

在 JSP 中实现 MVC 模式:

  • 模型:一个或多个 Javabean 对象,用于存储数据。Javabean 只要提供简单的 setXxx 方法和 getXxx 方法,不涉及对数据的具体处理。
  • 视图:一个或多个 JSP 页面,其作用是像控制器提交必要的数据和显示数据。
  • 控制器:一个或多个 servlet 对象,根据试图提交的数据进行数据处理操作,并将有关的结果存储到 Javabean 对象中,然后 servlet 使用转发或重定向的方式请求视图中的某个 JSP 页面显示数据。

在这里插入图片描述

第七章 JSP 连接数据库

JDBC (Java DataBase Connectivity) 提供了访问数据库的一些 API,即由一些 Java 类和接口组成,是 Java 运行平台核心类库的一部分。

1. 首先需要建立连接

建立连接的代码:

String uri= "jdbc:mysql://127.0.0.1/warehouse?useUnicode=true&characterEncoding=gb2312";
String user="root";
String password="stormjing7";
con=DriverManager.getConnection(uri,user,password);
//也可以写成con=DriverManager.getConnection(uri+"?user=root&password=");
sql=con.createStatement();
rs=sql.executeQuery("SELECT * FROM product ");

建立连接之后就可以用 SQL 语句与数据库进行交互。

2. 解决中文编码问题

有时候访问数据库会出现编码问题,解决编码问题的方法就是整个项目所有编码的地方都设置成同样的编码格式。比如:

  1. 建立数据库时
    create database warehouse default character set gb2312;
  2. 建立数据表时
    name varchar(100) character set gb2312,
  3. 连接语句也要写出编码格式:
    jdbc:mysql://127.0.0.1/warehouse?useUnicode=true&characterEncoding=gb2312"
3. 进行交互

JDBC 与数据库表进行交互的主要方式就是 SQL 语句,他可以将标准的 SQL 语句发送给数据库。

  1. SQL 查询语句和结果集和
    使用 Statement 语句声明一个 SQL 语句对象,然后让已创建的连接对象 con 调用方法创建这个 SQL 语句对象。
    Statement sql = con.createSatement();
  2. 得到 SQL 语句对象后,就可以调用相应的方法去查询,并且将结果放入一个 ResultSet 结果集中。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章