jsp基础

jsp读书笔记

1.jsp的由来

jsp的本质是servlet, 当用户向指定的servlet发送请求时, servlet利用输出流动态生成html页面, 包括静态的HTML标签和所有在HTML页面中出现的内容.

 

由于包含大量的HTML标签和大量的静态文本和格式, 导致Servlet的开发效率极其低下,

表现为所有的逻辑代码包括布局, 色彩图像等都必须耦合在java代码中.

 

jsp的出现弥补了这种不足. jsp通过在标准HTML页面中嵌入java代码, 其静态部分无需java程序控制, 只有例如从数据库读数据那种动态生成的页面内容才使用java脚本控制.极大地简化了页面流的开发.

 

2.jsp的本质

jsp的本质是servlet, 每个jsp页面就是一个servlet实例.jsp由系统编译成servlet,servlet再负责响应用户的需求.

 

3.jsp的基本语法

jsp注释

<%-- 注释内容--%>

jsp声明

<%!

public int coutn;

public String info(){

       return“hello”;

}

%>

 

输出表达式

<%= %>

 

<body>

       <%=count++ %>

</body>

 

jsp脚本

<% %>

4.jsp的三个编译指令

page

描述当前界面的指令

include

可以将外部文件嵌入到当前的jsp文件中

可包含静态文本和动态的jsp界面

 

taglib

自定义标签

 

5.7个动态指令

动作指令是运行时的动作, 编译指令是通过servlet引擎处理消息.

(1) forward指令

用于将页面响应转发到下一个界面, 可携带参数.

<body>

       <jsp:forwardpage:”forward-result.jsp”>

              <jsp:paramname=”age” value = “29”>

</jsp:forward>

</body>

 

forward-result.jsp

<body>

       <%=request.getParameter(“age”) %>

</body>

 

forward指令给人的感觉是将用户请求转发到了一个新的界面, 但实际上, 它只是完全采用了新界面来对用户进行响应. 请求依然是一次请求, 所以请求参数,请求属性都不会丢失.

 

(2) include

这个动态导入, 区别于静态导入.

l  静态导入是将被导入页面代码的完全融入, 动态导入则在Servlet中使用include方法来引入被导入页面的内容.

l   

(3) useBean, setProperty, getProperty

(4)param指令

一般与

jsp:include

       与inlcude结合, 参数指令用于将参数值传入被导入界面

jsp:forward

    与forward结合, param指令用于将参数值传入被转向的界面

jsp:plugin结合使用

与plugin结合, param指令用于将参数值传入JavaBean或者Appet实例

 

<jsp:param name=”paramName”value=”paramValue”>

6.jsp中的9个内置对象

l  浏览器的工作: 1.向远程服务器发送请求 (2)读取远程服务器返回的字符串数据 (3)根据字符串数据渲染出一个丰富多彩的界面

 

l  web服务器的工作: 1.启动单独的工作线程 2.使用I/O流读取用户请求的二进制流数据3.从请求数据中解析参数 4.处理用户请求 5.生成响应数据6.使用I/O流向客户端发送请求数据.

 

1,2,6步骤由浏览器完成, 345 由web服务器调用Servlet的_jspService方法来完成. _jspService的主要作用是, 负责完成解析参数 处理请求 生成响应等业务功能.

 

web服务器在执行了第三步解析到用户的请求参数之后, 将需求通过这些参数来创建HttpServletRequest,HttpServletResponse等对象. 作为调用_jspService的参数

 

由上面得知: web应用里的jsp页面和Servlet等程序都由web服务器来调用.桥梁是类Map的四个结构: application,session, request, page.

(1)application对象

通常有两个作用:

1是让JSP Servlet之间共享数据

2是访问web应用的配置参数

 

(2)config对象

jsp页面的配置信息, 使用较少

 

(3)exception对象

在_jspService代码块中, 有try catch语句

 

所有jsp的静态脚本, 静态HTML部分都会转化为try语句中的代码,一旦发现异常, 就会在catch中进行处理, 由_jspx_page_context对异常进行处理. 如果该页面的page指令指定了errorPage属性, 那么将请求forward到errorPage属性指定的界面. 否则使用系统的页面来输出错误信息

 

(4)out对象

out对象代表一个页面的输出流, 通常用于在页面上输出变量值及常量.一般在使用输出表达式的地方, 都可以使用out对象来达到同样的效果.

 

例如下面的一段代码:

<%@ page contentType=”text/html; charset=GBK”language=”java” errorPage=”” %>

<%@ page import=”java.sql.*” %>

<!DOCTYPE html  PUBLIC “-//W3C//DTD XHTML 1.0Transitional//EN”

“http://www.w3.org/TR/xhtml1-transitional.dtd”>

<htmlxmlns=”http://www.w3.org/1999/xhtml”>

<head>

       <title>out 测试</title>

</head>

 

 

 

<%

Class.forName(“com.mysql.jdbc.Driver”);

Connection conn = DriverManager.getConnection(

“jdbc:mysql://localhost:3306/javaee”,“root”, “111111”);

Statement stmt = conn.createStatement();

ResultSet rs = stmt.executeQuery(“select * fromnews_inf”);

%>

 

<table bgcolor=”#9999dd” bord=”1 width=”400”>

<%

while(rx.next())

//输出表格行

       out.println(“<tr>”);

//输出表格列

       out.println(“<td>”);

输出结果集第二列的值

       out.println(rs.getString(1));

关闭表格列

       out.println(“</td>”);

关闭表格行

out.println(“</tr>”);

}

%>

</table>

</body>

</html>

(5)pageContext

该对象主要用于JSP之间的数据共享. 使用pageContext可以访问page, request, session, application范围的变量.

(6)request对象

每个request对象封装着用户的一次请求. 并且所有的 请求参数都被封装在request对象中, 因此request对象是获取请求参数的重要途径.

1.     获取请求头. 请求参数

JSP/Servlet获取请求的途径就是request. request是HttpServletRequest接口的实例.

请求头和请求参数, 都是由用户发送到服务器的数据, 区别是请求头通常由浏览器自动添加, 而请求参数通常需要开发人员控制添加.

 

2.     操作request范围的属性.

表单请求的request参数, 在jsp forward用户请求的时候. 请求参数和request范围的属性都不会丢失, 即forward之后, 还是原来的请求, 并没有再次向服务器发送请求.

 

3.     将jsp页面include到本页面中

getRequestDispatcher(“a.jsp”).include(request, response);

4.     将请求forward到jsp页面

getRequestDispatcher(“a.jsp”).forward()

(7)response对象

response代表服务器对客户端的响应, 大部分时候, 程序无需使用response来响应客户端请求, 因为有个简单的响应对象----out. 它代表界面的输出流, 直接使用out生成响应更简单, 但是out是JspWriter的实例, JspWriter是Writer的子类, Writer是字符流. 无法输出非字符内容. 假如需要在JSP页面中动态生成一幅位图, 或者一个PDF文档, 则必须使用response作为响应输出.

 

1.     response响应生成非字符响应

生成一个位图

ImageIO.write(image, “png”, response.getOutputStream())

2.     重定向

与request不同的是, reponse重定向将生成第二次请求, 与前一次不在同一个request范围内, 所以发送一次请求的请求参数和request范围的属性会全部丢失.

 

response.sendRedirect(“redirect-result.jsp”);

 

输入http://localhost:8888/jspObject/doRedirect.jsp?name=lynash

那么会自动跳转到redirect-result.jsp界面. 并且参数name的值为空

所以使用重定向, 与在地址栏

3.     增加Cookie

session会随浏览器的关闭而失效, 但Cookie会一直存放在客户端机器上, 除非超出Cookie的生命周期

 

向客户端写Cookie的过程

创建Cookie实例, Cookie的构造器为Cookie(String name, String value)

Cookie c = new Cookie(“username”, name);

 

设置Cookie的生命期限,

c.setMaxAge(24*3600);//24小时

 

向客户端写Cookie

response.addCookie(c);

 

需要访问客户端的Cookie, 需要通过request对象.

 

(8)session对象

session代表一次用户会话,

一次会话:客户端浏览器连接服务器开始,到客户端浏览器与服务器断开为止, 这个过程是一个会话过程.

 

      session范围内的属性可以在多个页面的跳转间共享, 一旦关闭浏览器, 即session结束, session范围内的属性将全部丢失.

 

       关于session的机制, 通常用于保存客户端的状态信息, 这些状态信息需要保存到web服务器的硬盘上, 所以要求session里的属性值, 必须是可序列化的. session的属性值是任何可序列话的java对象,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值