1.jsp技术:在html中嵌入Java代码
servlet技术:在Java代码中嵌套html
servlet技术:擅长编写java代码
jsp技术:擅长页面显示
2.jsp脚本
<% java代码 %>---- 内部的java代码翻译到service方法的内部
<%= java变量或表达式%>---- 会被翻译成service方法内部out.print()
<% !java代码 %>---- 会被翻译成servlet的成员的内容
3.jsp的注释
不同的注释可见范围是不同
Html注释: 可见范围 jsp源码、翻译后的servlet、页面 显示html源码
java注释://单行注释 /*多行注释*/ 可见范围 jsp源码 翻译后的servlet
jsp注释:<%--注释内容--%> 可见范围 jsp源码可见
4.jsp的运行原理-----本质就是servlet
jsp在第一次访问时被web容器翻译成servlet
执行过程:第一次访问---->helloServlet.jsp---->helloServlet_jsp.java---->编译运行
注:被翻译后的servlet在Tomcat的work目录中可以找到
5.JSP指令
jsp的指令是指导jsp翻译和运行的命令,jsp包括三大指令:
page指令 --- 属性最多的指令(实际开发中page指令默认)
属性最多的一个指令,根据不同的属性,指导整个页面特性
格式:<%@ page 属性名1= "属性值1" 属性名2= "属性值2" ...%>
常用属性如下:
language:jsp脚本中可以嵌入的语言种类
pageEncoding:当前jsp文件的本身编码---内部可以包含contentType
contentType:response.setContentType(text/html;charset=UTF-8)
session:是否jsp在翻译时自动创建session
import:导入java的包
errorPage:当当前页面出错后跳转到哪个页面
isErrorPage:当前页面是一个处理错误的页面
include指令
页面包含(静态包含)指令,可以将一个jsp页面包含到另一个jsp页面中
格式:<%@ include file="被包含的文件地址"%>
taglib指令
在jsp页面中引入标签库(jstl标签库、struts2标签库)
格式:<%@ taglib uri="标签库地址" prefix="前缀"%>
6.JSP内置/隐式对象(9个)
jsp被翻译成servlet之后,service方法中有9个对象定义并初始化完毕,我们在jsp 脚本中可以直接使用这9个对象
名称 |
类型 |
描述 |
out |
javax.servlet.jsp.JspWriter |
用于页面输出 |
request |
javax.servlet.http.HttpServletRequest |
得到用户请求信息, |
response |
javax.servlet.http.HttpServletResponse |
服务器向客户端的回应信息 |
config |
javax.servlet.ServletConfig |
服务器配置,可以取得初始化参数 |
session |
javax.servlet.http.HttpSession |
用来保存用户的信息 |
application |
javax.servlet.ServletContext |
所有用户的共享信息 |
page |
java.lang.Object |
指当前页面转换后的Servlet类的实例 |
pageContext |
javax.servlet.jsp.PageContext |
JSP的页面容器 |
exception |
java.lang.Throwable |
表示JSP页面所发生的异常,在错误页中才起作用 |
out对象
out的类型:JspWriter
out作用就是想客户端输出内容----out.write()
out缓冲区默认8kb 可以设置成0 代表关闭out缓冲区 内容直接写到respons缓冲 器
buffer="8kb"
pageContext对象
jsp页面的上下文对象,作用如下:
page对象与pageContext对象不是一回事
(1)pageContext是一个域对象
setAttribute(String name,Object obj)
getAttribute(String name)
removeAttrbute(String name)
pageContext可以向指定的其他域中存取数据
setAttribute(String name,Object obj,int scope)
getAttribute(String name,int scope)
removeAttrbute(String name,int scope)
findAttribute(String name)---依次从pageContext域,request域,session域,application域中获 取属性,在某个域中获取后将不在向后寻找
四大作用域的总结:
page域:当前jsp页面范围
request域:一次请求
session域:一次会话
application域:整个web应用
(2)可以获得其他8大隐式对象
例如: pageContext.getRequest()
pageContext.getSession()
7.jsp标签(动作)
页面包含(动态包含):
静态包含与动态包含的区别?
请求转发:
8.商品的列表的展示
DataSourceUtils类省略
Product实体类
package com.shenhesoft.product.domain;
/**
* 创建实体类product
* @author zhu
* @Date 2018-10-29
* @version 1.0
*
*/
public class Product {
private String pid;
private String pname;
private double market_price;
private double shop_price;
private String pimage;
private String pdate;
private int is_hot;
private String pdesc;
private int pflag;
private String cid;
public String getPid() {
return pid;
}
public void setPid(String pid) {
this.pid = pid;
}
public String getPname() {
return pname;
}
public void setPname(String pname) {
this.pname = pname;
}
public double getMarket_price() {
return market_price;
}
public void setMarket_price(double market_price) {
this.market_price = market_price;
}
public double getShop_price() {
return shop_price;
}
public void setShop_price(double shop_price) {
this.shop_price = shop_price;
}
public String getPimage() {
return pimage;
}
public void setPimage(String pimage) {
this.pimage = pimage;
}
public String getPdate() {
return pdate;
}
public void setPdate(String pdate) {
this.pdate = pdate;
}
public int getIs_hot() {
return is_hot;
}
public void setIs_hot(int is_hot) {
this.is_hot = is_hot;
}
public String getPdesc() {
return pdesc;
}
public void setPdesc(String pdesc) {
this.pdesc = pdesc;
}
public int getPflag() {
return pflag;
}
public void setPflag(int pflag) {
this.pflag = pflag;
}
public String getCid() {
return cid;
}
public void setCid(String cid) {
this.cid = cid;
}
}
ProductServlet
package com.shenhesoft.product.servlet;
import java.io.IOException;
import java.sql.SQLException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import com.shenhesoft.product.domain.Product;
import com.shenhesoft.product.utils.DataSourceUtils;
public class ProductServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
QueryRunner qr=new QueryRunner(DataSourceUtils.getDataSource());
//查询product表中的所有数据
String sql="select * from product";
try {
//获取product里的所有数据存在集合中
List list = qr.query(sql, new BeanListHandler(Product.class));
//将数据存到request域中
request.setAttribute("productList", list);
//请求转发到product_list.jsp
request.getRequestDispatcher("/product_list.jsp").forward(request, response);
} catch (SQLException e) {
e.printStackTrace();
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
product_list.jsp
<%@page import="org.apache.jasper.tagplugins.jstl.core.ForEach"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@page import="java.util.*"%>
<%@page import="com.shenhesoft.product.domain.Product"%>
会员登录
<%
//获取list集合
List
productList = (List) request.getAttribute("productList");
if (productList != null) {
for (Product product : productList) {
out.write("");
out.write("");
out.write(
"");
out.write("");
out.write("");
out.write(""+product.getPname()+"");
out.write("
");
out.write("");
out.write("商城价:¥"+product.getMarket_price()+"");
out.write("
");
out.write("");
}
}
%>