JSP/商品信息显示案例/JSP指令(page/include(静态/动态包含)/taglib)/内置对象/域对象(pageContext/request/session/application)

案例一、商品信息的显示的案例

一,需求

​ 连接数据库 ,从数据库中获得商品的信息,并且显示到页面上

JSP/商品信息显示案例/JSP指令(page/include(静态/动态包含)/taglib)/内置对象/域对象(pageContext/request/session/application)_第1张图片

二,技术分析

1.JSP概述

​ Java server page(java服务器页面).JSP本质就是Servlet

​ 它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术。

​ JSP=html页面+java代码+jsp特有的内容(指令集、动作标签)

JSP产生原因:

​ servlet在展示页面的时候,相当的繁琐。sun公司为了解决这个问题,参照asp开发了一套动态网页技术jsp。 php

 

设置eclipse里面jsp编码:

JSP/商品信息显示案例/JSP指令(page/include(静态/动态包含)/taglib)/内置对象/域对象(pageContext/request/session/application)_第2张图片

 

jsp运行原理

    1. 当服务器收到 .jsp的请求时,会指派一个名为JspBase的Servlet类出来处理这个请求。

    1. JspBase把jsp页面,翻译成 java文件。java文件中就将html内容通过流写到客户端

    1. java虚拟机编译java文件 成 class文件

    1. 从JspServlet 移交请求给我们刚刚编译好的class文件 。

    1. 由jsp转化成的那个class执行此次请求,并且输出数据内容到页面上。

    1. 其实我们的一个jsp 就是一个 servlet 类。

JSP/商品信息显示案例/JSP指令(page/include(静态/动态包含)/taglib)/内置对象/域对象(pageContext/request/session/application)_第3张图片

jsp里面写java代码(重点)

一、JSP Scriptlets: <% Java代码块 、变量声明 %>,声明的变量是局部变量

二、声明:<%! 声明全局变量或者方法 %> ,声明的变量是全局变量

三、以下的形式,用于赋值 <%=aa %> <%=bb %>直接在页面输出aa和bb变量的值。

 

jsp的注释(快速添加注释的快捷键Ctrl+shift+/)

<%--  --%> :这是jsp注释,但是这种注释的内容是,服务器看到之后都直接忽略,也不会输出到客户端,也就是查看源文件,是不会看到这段内容的。

: 这是html的注释 ,这行文字也会当做内容输出到客户端,虽然在网页上没有显示,但是查看源文件,是能看到这样内容的。​ 所以,使用HTML注释的话不安全,而且浪费用户的流量;而使用JSP注释的话,就相对较安全,节省用户流量

 

JSP的写法总结

  • 遇到html标签就直接将这些html标签通过Writer的write方法写入客户端。

  • 遇到<% %>标签中的Java代码就在jsp文件翻译成的Java代码的Service方法中执行这些Java代码,所以这种标签中声明的变量都是Service方法中的局部变量,这种标签中不能声明方法。

  • 遇到<%! %>标签中的Java代码,都会在jsp文件翻译成的Java代码的类中执行这些代码,所以这种标签中声明的变量都是成员变量,而且这种标签中可以声明方法。

  • 遇到<%= %>标签时,都会直接在客户端页面输出"="后面的变量值或者调用的方法的返回值。

5.JSP三大指令(了解)

  • 指令作用:声明当前页面的一些属性和行为的

语法   <%@ 指令的类型 属性=属性值 属性=属性值 >
  • 指令可以出现多次,位置随意,一般放在最上面

5.1 page指令:定义JSP文件中的全局属性.(了解即可)

JSP/商品信息显示案例/JSP指令(page/include(静态/动态包含)/taglib)/内置对象/域对象(pageContext/request/session/application)_第4张图片

isELIgnored 是否忽略EL表达式

  • 重要的属性:

    import:导包

    pageEncoding:当前page(jsp页面)的编码 utf-8

    Content-Type:就是设置响应体的内容的类型以及编码。

    content:这是HTML文件中的编码格式

  • pageEncoding和Content-Type关系:

    ​ 当两个都指定编码的时候,按照各自的指定的编码

    ​ 当都不指定编码的时候,用默认的编码,iso8859-1

    ​ 当两个只出现一个的时候,俩者都使用出现的指定的编码

5.2 include指令:用于引入其他的页面,是做静态包含(重点)

只有包含页面才翻译成.Java文件,被包含的页面不翻译成Java文件,直接将被包含文件的代码拷贝到包含文件中,然后由包含文件翻译成的java代码一起输出.

<%@ inlucde file="">

静态包含的特征:

  • 1.静态包含的原理:其实就是将被包含文件的代码全部拷贝到包含文件中,然后一起翻译成Java文件,并使用输出流输出。

  • 2.包含文件和被包含文件中,不能定义相同的变量。

  • 3.只翻译包含文件,被包含文件不会被翻译。

JSP/商品信息显示案例/JSP指令(page/include(静态/动态包含)/taglib)/内置对象/域对象(pageContext/request/session/application)_第5张图片

5.3 taglib指令:用于引入标签库(jstl标签库)

<%@ taglib  属性 =属性值 %>

 

6.JSP九大内置对象(隐式对象)

  • 系统给我们创建好了,不需要new,直接调用就可以了

对象 类型 说明
request(域对象) HttpServletRequest request域对象
response HttpServletResponse 响应对象
session(域对象) HttpSession  
out JspWriter 用于往客户端页面写数据
exception Throwable 如果IsErroPage为true才能使用
application(域对象) ServletContext 相当于Servlet里面的ServletContext
config ServetConfig  
page Object(this) 指当前的页面
pageContext(域对象) PageContext 当前页面的上下文,第四个域对象

response的方法:

response.setStatus(), 设置响应状态码----->重定向的时候设置status为302

response.setContentType("text/html;charset=utf-8");设置响应体的内容的类型和编码

response.sendRedirect("path");一句代码发起重定向

response.setHeader(),设置响应头

response.addHeader(),设置响应头

response.addCookie(),添加cookie

response.getWriter(),获取字符输出流

response.getOutputStream(),获取字节输出流

request的方法:

request.getMethod();获取请求方式

request.getRemoteAddr();获取客户端的IP地址

request.getContextPath();获取项目路径

request.getRequestUrl(),获取客户端的请求url地址

request.getParatemet(name);根据一个请求参数名获取一个请求参数值

request.getParameterValues(name);根据一个请求参数名获取对应的多个请求参数值

request.getParameterNames();获取所有的请求参数名

request.getParameterMap();获取所有请求参数的参数名和参数值,并存放在map中

request.setAttribute("name",object);作为域对象存数据

request.getAttribute("name");作为域对象取数据

request.getCookies();获取到请求中携带的所有cookie

request.getSession();获取session对象

request.getHeader(name);根据一个请求头的name获取一个值

request.getHeaders(name);根据一个请求头的name获取多个值

request.getHeaderNames();获取所有请求头的name

request.setCharacterEncoding("UTF-8");设置请求体的字符集----->解决post请求的中文乱码

request.getRequestDispatcher("path");获取请求转发分发器

 

7.四大域对象(重点)

类型 作用范围
pageContext 当前页面
request 一次请求, 使用请求转发有效
session 一次会话(多次请求),
application 整个应用
  • pageContext的作用

    1.作为域对象存取值(当前页面) pageContext作为域对象基本没啥用

    ​ setAttribute(String name,Object obj);

    ​ getAttribute(String name);

    ​ removeAttribue(String name);(基本上用不到)

    2.代替其它3个域对象存值(了解)

    ​ setAttribute(String name,Object obj, int scope);

    3.获得其它8个内置对象(EL中会使用到)

    getRequest(), getSession()....

    4.便捷获得域(四个)对象的值 (重要)

    ​ pageContext.findAttribute(String name);依次从pageContext,request,session,application获取值,

    ​ 如果找到,终止查找,立即把这个值返回

    ​ 如果没有找到,返回null

8.六个动作标签(注意:标签体内如果不加param标签的话,开始标签和结束标签之间不要换行)

  • (重要)----->用于做请求转发

跳转到具体的页面

配合前面的forward来使用 ,表示跳转过去的时候,带参数过去。

写法如下:



	


-------------------------------------------------
也可以这么写
	

 

1获取参数:
收到来自首页的参数值:
<%=request.getParameter("username")%>
  •   (重要)

这个标签也是可以用作包含的, 效果上与前面的那个include一样,都能够显示包含的页面内容。

* jsp:include
	使用方式如下:

	动态包含
	先把被包含的页面,做编译,然后得到输出的结果, 最后跟我们本来的页面结果一起输出。 
	不管是包含还是被包含,都被翻译成java文件。

* include指令集

	静态包含
	这里的包含是把被包含的页面的源代码原原本本的拿过来,组拼成一份新的html代码,然后一起输出
	这里只会翻译一个JSP页面, 被包含的页面不会被翻译成java文件

动态包含和静态包含的区别

  • 1.静态包含只会将包含文件翻译成java文件并编译成class文件,而动态包含中包含文件和被包含文件都会被翻译成java文件然后编译成class文件

  • 2.静态包含发生在翻译期(就是翻译成java文件这个阶段已经包含好了),而动态包含发生在编译期

  • 3.静态包含中包含文件和被包含文件中不能定义相同的变量名。

  • 4.静态包含中只有一个request对象,而动态其实是包含页面将request转发到被包含页面,所以动态包含中在被包含页面能获取到包含页面中向下传递的参数。

一般都是用动态包含

下面三个标签用得很少(了解即可)

  • 创建一个对象

    使用方式如下:
  • 给指定的对象属性赋值

    使用方式如下:
  • 取出指定对象的属性值

  使用方式如下:

三,思路分析

JSP/商品信息显示案例/JSP指令(page/include(静态/动态包含)/taglib)/内置对象/域对象(pageContext/request/session/application)_第6张图片

四,代码实现

数据库的创建

  create database jspda;
  use jspda;
  create table product(
      pid int primary key auto_increment,
      pname varchar(20),
      price double,
      pdesc varchar(100)
  );


  insert into product values (null,'电视机',2999.00,'乐视电视 送18个月会员');
  insert into product values (null,'冰箱',4999.00,'海尔冰箱 省电');
  insert into product values (null,'空调',1999.00,'格力空调 掌握核心科技');
  insert into product values (null,'手机',999.00,'小米手机 充电5分钟 通话5分钟');

二、拷贝jar包和C3P0Utils、配置文件

三、代码实现

一、创建实体类(Bean)

二、创建一个index.jsp,访问index.jsp中的链接,找到ProductServlet

三、创建Servlet、Service、Dao

四、ProductServlet-------> ProductService------> ProductService

五、创建一个list.jsp遍历集合数据,显示在浏览器中

你可能感兴趣的:(JAVA)