- 一、案例一:展示所有商品信息
- 1.1、流程分析
- 1.2、代码实现
- 1.3、JSP技术
- 1.3.1、JSP简述
- 1.3.1.1 入门案例
- 1.3.1.2 Jsp执行原理(了解)
- 1.3.2、JSP开发模板修改(了解)
- 1.3.3、JSP脚本
- 1.3.4、JSP注释
- 1.3.5、JSP指令(重点)
- 1.3.5.1、指令简述
- 1.3.5.2、Page指令
- 1.3.5.3、include指令
- 1.3.5.4、taglib指令
- 1.3.6、JSP九大内置对象
- 1.3.6.1、九大内置对象简述
- 1.3.6.2、pageContext对象
- 1.3.6.3、out对象
- 1.3.7、JSP四大作用域总结(了解)
- 1.4、使用JSP优化案例代码
- 二、案例二:展示所有商品信息(优化)
- 2.1、讲解:EL表达式(重点)
- 2.1.1、EL简述
- 2.1.2、EL表达式使用
- 2.1.2.1、入门案例 简单使用EL表达式
- 2.1.2.2、数据的读取
- 2.1.2.3、数据的运算 (域对象)
- 2.1.2.4、数据的判断(域对象)
- 2.2、知识点:JSTL标签
- 2.2.1、JSTL标签的简述及导入
- 2.2.2、
- 2.2.3、
- 2.4、MVC设计模式
要实现的效果:
(1)结构:
(2)新建一个index.html如上所示:
Insert title here 点击查询商品
(3)sql导入:
create database product;
use product
CREATE TABLE product (
pid VARCHAr(32) NOT NULL,
pname VARCHAr(50) DEFAULT NULL,
market_price DOUBLE DEFAULT NULL,
shop_price DOUBLE DEFAULT NULL,
pimage VARCHAr(200) DEFAULT NULL,
pdate DATE DEFAULT NULL,
is_hot INT(11) DEFAULT NULL,
pdesc VARCHAr(255) DEFAULT NULL,
pflag INT(11) DEFAULT NULL,
cid VARCHAr(32) DEFAULT NULL,
PRIMARY KEY (pid)
) ENGINE=INNODB DEFAULT CHARSET=utf8;
INSERT INTO `product` VALUES ('1','小米 4c 标准版',1399,1299,'products/1/c_0001.jpg','2015-11-02',1,'小米 4c 标准版 全网通 白色 移动联通电信4G手机 双卡双待',0,'1'),('10','华为 Ascend Mate7',2699,2599,'products/1/c_0010.jpg','2015-11-02',1,'华为 Ascend Mate7 月光银 移动4G手机 双卡双待双通6英寸高清大屏,纤薄机身,智能超八核,按压式指纹识别!!选择下方“移动老用户4G飞享合约”,无需换号,还有话费每月返还!',0,'1'),('11','vivo X5Pro',2399,2298,'products/1/c_0014.jpg','2015-11-02',1,'移动联通双4G手机 3G运存版 极光白【购机送蓝牙耳机+蓝牙自拍杆】新升级3G运行内存·双2.5D弧面玻璃·眼球识别技术',0,'1'),('12','努比亚(nubia)My 布拉格',1899,1799,'products/1/c_0013.jpg','2015-11-02',0,'努比亚(nubia)My 布拉格 银白 移动联通4G手机 双卡双待【嗨11,下单立减100】金属机身,快速充电!布拉格相机全新体验!',0,'1'),('13','华为 麦芒4',2599,2499,'products/1/c_0012.jpg','2015-11-02',1,'华为 麦芒4 晨曦金 全网通版4G手机 双卡双待金属机身 2.5D弧面屏 指纹解锁 光学防抖',0,'1'),('14','vivo X5M',1899,1799,'products/1/c_0011.jpg','2015-11-02',0,'vivo X5M 移动4G手机 双卡双待 香槟金【购机送蓝牙耳机+蓝牙自拍杆】5.0英寸大屏显示·八核双卡双待·Hi-Fi移动KTV',0,'1'),('15','Apple iPhone 6 (A1586)',4399,4288,'products/1/c_0015.jpg','2015-11-02',1,'Apple iPhone 6 (A1586) 16GB 金色 移动联通电信4G手机长期省才是真的省!点击购机送费版,月月送话费,月月享优惠,畅享4G网络,就在联通4G!',0,'1'),('16','华为 HUAWEI Mate S 臻享版',4200,4087,'products/1/c_0016.jpg','2015-11-03',0,'华为 HUAWEI Mate S 臻享版 手机 极昼金 移动联通双4G(高配)满星评价即返30元话费啦;买就送电源+清水套+创意手机支架;优雅弧屏,mate7升级版',0,'1'),('17','索尼(SONY) E6533 Z3+',4099,3999,'products/1/c_0017.jpg','2015-11-02',0,'索尼(SONY) E6533 Z3+ 双卡双4G手机 防水防尘 涧湖绿索尼z3专业防水 2070万像素 移动联通双4G',0,'1'),('18','HTC One M9+',3599,3499,'products/1/c_0018.jpg','2015-11-02',0,'HTC One M9+(M9pw) 金银汇 移动联通双4G手机5.2英寸,8核CPU,指纹识别,UltraPixel超像素前置相机+2000万/200万后置双镜头相机!降价特卖,惊喜不断!',0,'1'),('19','HTC Desire 826d 32G 臻珠白',1599,1469,'products/1/c_0020.jpg','2015-11-02',1,'后置1300万+UltraPixel超像素前置摄像头+【双】前置扬声器+5.5英寸【1080p】大屏!',0,'1'),('2','中兴 AXON',2899,2699,'products/1/c_0002.jpg','2015-11-05',1,'中兴 AXON 天机 mini 压力屏版 B2015 华尔金 移动联通电信4G 双卡双待',0,'1'),('20','小米 红米2A 增强版 白色',649,549,'products/1/c_0019.jpg','2015-11-02',0,'新增至2GB 内存+16GB容量!4G双卡双待,联芯 4 核 1.5GHz 处理器!',0,'1'),('21','魅族 魅蓝note2 16GB 白色',1099,999,'products/1/c_0021.jpg','2015-11-02',0,'现货速抢,抢完即止!5.5英寸1080P分辨率屏幕,64位八核1.3GHz处理器,1300万像素摄像头,双色温双闪光灯!',0,'1'),('22','三星 Galaxy S5 (G9008W) 闪耀白',2099,1999,'products/1/c_0022.jpg','2015-11-02',1,'5.1英寸全高清炫丽屏,2.5GHz四核处理器,1600万像素',0,'1'),('23','sonim XP7700 4G手机',1799,1699,'products/1/c_0023.jpg','2015-11-09',1,'三防智能手机 移动/联通双4G 安全 黑黄色 双4G美国军工IP69 30天长待机 3米防水防摔 北斗',0,'1'),('24','努比亚(nubia)Z9精英版 金色',3988,3888,'products/1/c_0024.jpg','2015-11-02',1,'移动联通电信4G手机 双卡双待真正的无边框!金色尊贵版!4GB+64GB大内存!',0,'1'),('25','Apple iPhone 6 Plus (A1524) 16GB 金色',5188,4988,'products/1/c_0025.jpg','2015-11-02',0,'Apple iPhone 6 Plus (A1524) 16GB 金色 移动联通电信4G手机 硬货 硬实力',0,'1'),('26','Apple iPhone 6s (A1700) 64G 玫瑰金色',6388,6088,'products/1/c_0026.jpg','2015-11-02',0,'Apple iPhone 6 Plus (A1524) 16GB 金色 移动联通电信4G手机 硬货 硬实力',0,'1'),('27','三星 Galaxy Note5(N9200)32G版',5588,5388,'products/1/c_0027.jpg','2015-11-02',0,'旗舰机型!5.7英寸大屏,4+32G内存!不一样的SPen更优化的浮窗指令!赠无线充电板!',0,'1'),('28','三星 Galaxy S6 Edge+(G9280)32G版 铂光金',5999,5888,'products/1/c_0028.jpg','2015-11-02',0,'赠移动电源+自拍杆+三星OTG金属U盘+无线充电器+透明保护壳',0,'1'),('29','LG G4(H818)陶瓷白 国际版',3018,2978,'products/1/c_0029.jpg','2015-11-02',0,'李敏镐代言,F1.8大光圈1600万后置摄像头,5.5英寸2K屏,3G+32G内存,LG年度旗舰机!',0,'1'),('3','华为荣耀6',1599,1499,'products/1/c_0003.jpg','2015-11-02',0,'荣耀 6 (H60-L01) 3GB内存标准版 黑色 移动4G手机',0,'1'),('30','微软(Microsoft) Lumia 640 LTE DS (RM-1113)',1099,999,'products/1/c_0030.jpg','2015-11-02',0,'微软首款双网双卡双4G手机,5.0英寸高清大屏,双网双卡双4G!',0,'1'),('31','宏碁(acer)ATC705-N50 台式电脑',2399,2299,'products/1/c_0031.jpg','2015-11-02',0,'爆款直降,满千减百,品质宏碁,特惠来袭,何必苦等11.11,早买早便宜!',0,'2'),('32','Apple MacBook Air MJVE2CH/A 13.3英寸',6788,6688,'products/1/c_0032.jpg','2015-11-02',0,'宽屏笔记本电脑 128GB 闪存',0,'2'),('33','联想(ThinkPad) 轻薄系列E450C(20EH0001CD)',4399,4199,'products/1/c_0033.jpg','2015-11-02',0,'联想(ThinkPad) 轻薄系列E450C(20EH0001CD)14英寸笔记本电脑(i5-4210U 4G 500G 2G独显 Win8.1)',0,'2'),('34','联想(Lenovo)小新V3000经典版',4599,4499,'products/1/c_0034.jpg','2015-11-02',0,'14英寸超薄笔记本电脑(i7-5500U 4G 500G+8G SSHD 2G独显 全高清屏)黑色满1000減100,狂减!火力全开,横扫3天!',0,'2'),('35','华硕(ASUS)经典系列R557LI',3799,3699,'products/1/c_0035.jpg','2015-11-02',0,'15.6英寸笔记本电脑(i5-5200U 4G 7200转500G 2G独显 D刻 蓝牙 Win8.1 黑色)',0,'2'),('36','华硕(ASUS)X450J',4599,4399,'products/1/c_0036.jpg','2015-11-02',0,'14英寸笔记本电脑 (i5-4200H 4G 1TB GT940M 2G独显 蓝牙4.0 D刻 Win8.1 黑色)',0,'2'),('37','戴尔(DELL)灵越 飞匣3000系列',3399,3299,'products/1/c_0037.jpg','2015-11-03',0,' Ins14C-4528B 14英寸笔记本(i5-5200U 4G 500G GT820M 2G独显 Win8)黑',0,'2'),('38','惠普(HP)WASD 暗影精灵',5699,5499,'products/1/c_0038.jpg','2015-11-02',0,'15.6英寸游戏笔记本电脑(i5-6300HQ 4G 1TB+128G SSD GTX950M 4G独显 Win10)',0,'2'),('39','Apple 配备 Retina 显示屏的 MacBook',11299,10288,'products/1/c_0039.jpg','2015-11-02',0,'Pro MF840CH/A 13.3英寸宽屏笔记本电脑 256GB 闪存',0,'2'),('4','联想 P1',2199,1999,'products/1/c_0004.jpg','2015-11-02',0,'联想 P1 16G 伯爵金 移动联通4G手机充电5分钟,通话3小时!科技源于超越!品质源于沉淀!5000mAh大电池!高端商务佳配!',0,'1'),('40','机械革命(MECHREVO)MR X6S-M',6799,6599,'products/1/c_0040.jpg','2015-11-02',0,'15.6英寸游戏本(I7-4710MQ 8G 64GSSD+1T GTX960M 2G独显 IPS屏 WIN7)黑色',0,'2'),('41','神舟(HASEE) 战神K660D-i7D2',5699,5499,'products/1/c_0041.jpg','2015-11-02',0,'15.6英寸游戏本(i7-4710MQ 8G 1TB GTX960M 2G独显 1080P)黑色',0,'2'),('42','微星(MSI)GE62 2QC-264XCN',6199,5999,'products/1/c_0042.jpg','2015-11-02',0,'15.6英寸游戏笔记本电脑(i5-4210H 8G 1T GTX960MG DDR5 2G 背光键盘)黑色',0,'2'),('43','雷神(ThundeRobot)G150S',5699,5499,'products/1/c_0043.jpg','2015-11-02',0,'15.6英寸游戏本 ( i7-4710MQ 4G 500G GTX950M 2G独显 包无亮点全高清屏) 金',0,'2'),('44','惠普(HP)轻薄系列 HP',3199,3099,'products/1/c_0044.jpg','2015-11-02',0,'15-r239TX 15.6英寸笔记本电脑(i5-5200U 4G 500G GT820M 2G独显 win8.1)金属灰',0,'2'),('45','未来人类(Terrans Force)T5',10999,9899,'products/1/c_0045.jpg','2015-11-02',0,'15.6英寸游戏本(i7-5700HQ 16G 120G固态+1TB GTX970M 3G GDDR5独显)黑',0,'2'),('46','戴尔(DELL)Vostro 3800-R6308 台式电脑',3299,3199,'products/1/c_0046.jpg','2015-11-02',0,'(i3-4170 4G 500G DVD 三年上门服务 Win7)黑',0,'2'),('47','联想(Lenovo)H3050 台式电脑',5099,4899,'products/1/c_0047.jpg','2015-11-11',0,'(i5-4460 4G 500G GT720 1G独显 DVD 千兆网卡 Win10)23英寸',0,'2'),('48','Apple iPad mini 2 ME279CH/A',2088,1888,'products/1/c_0048.jpg','2015-11-02',0,'(配备 Retina 显示屏 7.9英寸 16G WLAN 机型 银色)',0,'2'),('49','小米(MI)7.9英寸平板',1399,1299,'products/1/c_0049.jpg','2015-11-02',0,'WIFI 64GB(NVIDIA Tegra K1 2.2GHz 2G 64G 2048*1536视网膜屏 800W)白色',0,'2'),('5','摩托罗拉 moto x(x+1)',1799,1699,'products/1/c_0005.jpg','2015-11-01',0,'摩托罗拉 moto x(x+1)(XT1085) 32GB 天然竹 全网通4G手机11月11天!MOTO X震撼特惠来袭!1699元!带你玩转黑科技!天然材质,原生流畅系统!',0,'1'),('50','Apple iPad Air 2 MGLW2CH/A',2399,2299,'products/1/c_0050.jpg','2015-11-12',0,'(9.7英寸 16G WLAN 机型 银色)',0,'2'),('6','魅族 MX5 16GB 银黑色',1899,1799,'products/1/c_0006.jpg','2015-11-02',0,'魅族 MX5 16GB 银黑色 移动联通双4G手机 双卡双待送原厂钢化膜+保护壳+耳机!5.5英寸大屏幕,3G运行内存,2070万+500万像素摄像头!长期省才是真的省!',0,'1'),('7','三星 Galaxy On7',1499,1398,'products/1/c_0007.jpg','2015-11-14',0,'三星 Galaxy On7(G6000)昂小七 金色 全网通4G手机 双卡双待新品火爆抢购中!京东尊享千元良机!5.5英寸高清大屏!1300+500W像素!评价赢30元话费券!',0,'1'),('8','NUU NU5',1288,1190,'products/1/c_0008.jpg','2015-11-02',0,'NUU NU5 16GB 移动联通双4G智能手机 双卡双待 晒单有礼 晨光金香港品牌 2.5D弧度前后钢化玻璃 随机附赠手机套+钢化贴膜 晒单送移动电源+蓝牙耳机',0,'1'),('9','乐视(Letv)乐1pro(X800)',2399,2299,'products/1/c_0009.jpg','2015-11-02',0,'乐视(Letv)乐1pro(X800)64GB 金色 移动联通4G手机 双卡双待乐视生态UI+5.5英寸2K屏+高通8核处理器+4GB运行内存+64GB存储+1300万摄像头!',0,'1');
(4)三层架构好,编写实体Product.java
package com.zql.pojo;
import java.io.Serializable;
import java.util.Date;
public class Product implements Serializable{
private String pid;
private String pname;
private double market_price;
private double shop_price;
private String pimage;
private Date pdate;
private int is_hot;
private String pdesc;
private int pflag;
private String cid;
public Product() {
super();
// TODO Auto-generated constructor stub
}
public Product(String pid, String pname, double market_price, double shop_price, String pimage, Date pdate,
int is_hot, String pdesc, int pflag, String cid) {
super();
this.pid = pid;
this.pname = pname;
this.market_price = market_price;
this.shop_price = shop_price;
this.pimage = pimage;
this.pdate = pdate;
this.is_hot = is_hot;
this.pdesc = pdesc;
this.pflag = pflag;
this.cid = 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 Date getPdate() {
return pdate;
}
public void setPdate(Date 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;
}
@Override
public String toString() {
return "Product [pid=" + pid + ", pname=" + pname + ", market_price=" + market_price + ", shop_price="
+ shop_price + ", pimage=" + pimage + ", pdate=" + pdate + ", is_hot=" + is_hot + ", pdesc=" + pdesc
+ ", pflag=" + pflag + ", cid=" + cid + "]";
}
}
ProductServlet.java
package com.zql.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.zql.pojo.Product;
import com.zql.service.ProductService;
@WebServlet("/search")
public class ProductServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//解决乱码问题
response.setContentType("text/html;charset=utf-8");
//获取商品
request.getParameter("");
ProductService service = new ProductService();
List pList = service.search();
PrintWriter writer = response.getWriter();
writer.write("rn");
writer.write("rn");
writer.write("rn");
writer.write("rn");
writer.write("Insert title here rn");
writer.write("rn");
writer.write("rn");
writer.write("trn");
writer.write("ttrn");
writer.write("ttt商品序号 rn");
writer.write("ttt商品名称 rn");
writer.write("ttt商品图片 rn");
writer.write("ttt商品价格 rn");
writer.write("ttt商品描述 rn");
writer.write("tt rn");
for(int i = 0;i < pList.size();i++) {
writer.write("ttrn");
writer.write("ttt"+(i+1)+" rn");
writer.write("ttt"+pList.get(i).getPname()+" rn");
writer.write("ttt+pList.get(i).getPimage()+"" width="100%" height="100%"/> rn");
writer.write("ttt"+pList.get(i).getShop_price()+" rn");
writer.write("ttt"+pList.get(i).getPdesc()+" rn");
writer.write("tt rn");
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
ProductService.java
package com.zql.service;
import java.util.List;
import com.zql.dao.ProductDao;
import com.zql.pojo.Product;
public class ProductService {
public List search() {
ProductDao dao = new ProductDao();
return dao.search();
}
}
ProductDao.java
package com.zql.dao;
import java.sql.SQLException;
import java.util.List;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import com.zql.pojo.Product;
import com.zql.utils.C3P0Utils;
public class ProductDao {
public List search() {
try {
QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
String sql = "select * from product";
List plist = qr.query(sql, new BeanListHandler(Product.class));
return plist;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}
(5) 启动tomcat,浏览器访问:http://localhost:8080/servlet7/index.html
显示如下:
1.3、JSP技术
作用:代替了servlet做响应体输出
1.3.1、JSP简述
JSP全名是Java Server Pages。Java服务器页面,它是建立在Servlet规范之上的动态网页开发技术。在JSP文件中,HTML代码与Java代码共同存在,其中,HTML代码用来实现网页中静态内容的显示,Java代码用来实现网页中动态内容的显示。为了与传统HTML有所区别,JSP文件的扩展名为.jsp。
JSP = HTML + java
1.3.1.1 入门案例
HTML与JSP的区别:
HTML只能展示静态内容, 不能写java代码
JSP即可以展示静态内容,也可以展示动态内容(java代码)
JSP = HTML + Java
1.3.1.2 Jsp执行原理(了解)
匹配执行.JSP
HttpJspBase是Servlet的子类
JSP的本质就是一个 Servlet
1.3.2、JSP开发模板修改(了解)
改变了模板的编码:
1.3.3、JSP脚本
JSP脚本:在JSP源码上书写Java代码
<%
String str = "Daniel";
out.print(str);
%>
JSP脚本片段:
写法格式: <% java代码 %>
翻译后的位置: 在_jspService这个方法内
JSP声明片段:
写法格式: <%! %>
翻译后的位置: 在成员变量上
JSP脚本表达式:
写法格式: <%= %>
翻译后的位置: 在_jspService这个方法内
1.3.4、JSP注释
写法格式: <%-- 注释 --%>
1.3.5、JSP指令(重点)
1.3.5.1、指令简述
jsp中可能会写大量的java代码
JSP的指令,可以大大减少程序员书写Java代码的工作量。
程序员只需要设置简单的指令,翻译后的Java代码上,简单的指令会翻译成大段大段的Java代码来执行
指令格式:
<%@指令名称 属性名1=”属性值1” 属性名2=”属性值2” %>
指令名称:
Page指令
Include指令
Taglib指令
1.3.5.2、Page指令
来创建一个jsp文件, 会不会有这个page指令, 默认被创建的.
属性名称|取值or范围|描述
属性名称 取值or范围 描述 pageEncoding 当前页面 指定页面编码格式
相当于:response.setCharacterEncoding(“UTF-8”) contentType 有效的文档类型 客户端浏览器根据该属性判断文档类型,例如:
HTML格式为text/html
纯文本格式为text/plain
JPG图像为image/jpeg
GIF图像为image/gif
Word文档为application/msword
类是于:
response.setContentType("text/html; charset=UTF-8");
errorPage 某个JSP页面的相对路径 指定一个错误页面,如果该JSP程序抛出一个未捕捉的异常,则转到errorPage指定的页面。 errorPage指定页面的isErrorPage属性为true,且内置的exception对象为未捕捉的异常
当前页面出现异常,跳转到哪个页面展示
自动请求转发:服务器端路径 isErrorPage true / false 指定该页面是否为错误处理页面,如果为true,则该JSP内置有一个Exception对象的exception,可直接使用。默认情况下,isErrorPage的值为false
设置当前页面是否为标准错误页面
标准错误页面:可以获取并展示跳转而来页面的错误信息
isErrorPage设置为true以后,多出一个exception变量
exception变量封装了跳转而来页面的异常信息 import 任何包名、类名 指定在JSP页面翻译成的Servlet源文件中导入的包或类。import是唯一可以声明多次的page指令属性。一个import属性可以引用多个类,中间用英文逗号隔开。 language java 指明解释该JSP文件时采用的语言,默认为Java session true、false 指明该JSP内是否内置Session对象,如果为true,则说明内置Session对象,可以直接使用,否则没有内置Session对象。 默认情况下,session属性的值为true。需要注意的是,JSP 引擎自动导入以下4个包:
java.lang.*
javax.servlet.*
javax.servlet.jsp.*
javax.servlet.http.*
1.3.5.3、include指令
Java中: 重复性代码 提取或者是抽取为工具类
Jsp中: 重复性的代码 使用include指令来抽取
应用场景:
上图步骤总结:
(1)编写index/head.jsp
(2)编写index/foot.jsp
(3)编写index/index.jsp
(4)加入启动tomcat
(5)访问:http://localhost:8080/servlet7/index/index.jsp
1.3.5.4、taglib指令
专门负责引入其他标签库
1.3.6、JSP九大内置对象
1.3.6.1、九大内置对象简述
JSP会翻译成Java代码,作为Servlet执行。
每次必须会执行_jspService()
_jspService()内部定义了一些变量/常量,让程序员方便使用
名称 类型 描述 out javax.servlet.jsp.JspWriter 用于页面输出
JSP输出字符流 request javax.servlet.http.HttpServletRequest 得到用户请求信息。
域对象,针对某次请求 response javax.servlet.http.HttpServletResponse 服务器向客户端的回应信息 config javax.servlet.ServletConfig 服务器配置,可以取得初始化参数
JSP配置信息的封装对象(一般不用) session javax.servlet.http.HttpSession 用来保存用户的信息
域对象,针对某次会话N次请求 application javax.servlet.ServletContext 所有用户的共享信息
域对象,针对整个项目的所有请求, 在这它是最大的作用域 page java.lang.Object 指当前页面转换后的Servlet类的实例
当前JSP对应的Servlet对象。
(一般不用) pageContext javax.servlet.jsp.PageContext JSP的页面容器
域对象,是JSP独有的。
普通Servlet是没有这个域对象
最小的域对象,
作用范围:是当前JSP页面
域对象,针对整个项目的所有请求, 在这它是最大的作用域 exception java.lang.Throwable 表示JSP页面所发生的异常,在错误页中才起作用
设置了isErrorPage=”true”才会出现。
封装了上一个页面的错误信息。 (一般不用)
1.3.6.2、pageContext对象
pageContext对象是JSP独有的,普通Servlet没有这个对象。
作用范围:
当前JSP页面
作用:
JSP最小的域对象
<%
//向pageContext中存储数据
pageContext.setAttribute("name","Daniel");
%>
<%
//从pageContext中获取数据
String name = (String)pageContext.getAttribute("name");
out.print(name);
%>
显示如下:
1.3.6.3、out对象
Out对象 jsp中用户输出字符流对象
Response.getWrite() servlet输出字符流对象
1.3.7、JSP四大作用域总结(了解)
Servlet 三大作用域:
从小到大: request session ServletContext
JSP四大作用域:
从小到大: pageContext request session ServletContext
1.4、使用JSP优化案例代码
(1)其它代码都不变动,修改ProductServlet.java
添加部分(添加的同时要注掉之前的部分,可看完整代码)
//存储在域对象中
request.setAttribute("pList", pList);
//转发到jsp页面
request.getRequestDispatcher("/pList.jsp").forward(request, response);
完整代码:
package com.zql.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.zql.pojo.Product;
import com.zql.service.ProductService;
@WebServlet("/search")
public class ProductServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//解决乱码问题
response.setContentType("text/html;charset=utf-8");
//获取商品
request.getParameter("");
ProductService service = new ProductService();
List pList = service.search();
//存储在域对象中
request.setAttribute("pList", pList);
//转发到jsp页面
request.getRequestDispatcher("/pList.jsp").forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
(2)在WebContent下面添加pList.jsp(记得导包import="java.util.*,com.zql.pojo.Product")
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.util.*,com.zql.pojo.Product"%>
Insert title here
商品序号
商品名称
商品图片
商品价格
商品描述
<%
List plist = (List)request.getAttribute("pList");
for(int i = 0;i < plist.size();i++){
%>
<%=i+1%>
<%=plist.get(i).getPname()%>
.getPimage()%>)
<%=plist.get(i).getShop_price()%>
<%=plist.get(i).getPdesc()%>
<%
}
%>
(3)启动tomcat运行: http://localhost:8080https://blog.csdn.net/servlet7/search
遇到问题解决参考
二、案例二:展示所有商品信息(优化)
2.1、讲解:EL表达式(重点)
2.1.1、EL简述
EL是Expression Language的缩写,它是一种简单的数据访问语言。
EL(Expression Language) 目的:为了使JSP写起来更加简单。表达式语言的灵感来自于 ECMAScript 和 XPath 表达式语言,它提供了在 JSP 中简化表达式的方法,让Jsp的代码更加简化。
2.1.2、EL表达式使用
写法格式: ${el表达式 }
2.1.2.1、入门案例 简单使用EL表达式
2.1.2.2、数据的读取
目前学习的EL表达式不支持数据的保存/数据的存储操作。
EL表达式能做的就是读 相当于数据库中 select
EL表达式不能读取JSP中的变量;
EL表达式可以读取域对象中的键值对,需要写的键值对的名称;
String
String[]
List
Map
JavaBean
(1)先创建JavaBean(Person.java)
package com.zql.pojo;
import java.io.Serializable;
public class Person implements Serializable{
private int id;
private String name;
private String hobby;
private String addr;
public Person() {
super();
// TODO Auto-generated constructor stub
}
public Person(int id, String name, String hobby, String addr) {
super();
this.id = id;
this.name = name;
this.hobby = hobby;
this.addr = addr;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getHobby() {
return hobby;
}
public void setHobby(String hobby) {
this.hobby = hobby;
}
public String getAddr() {
return addr;
}
public void setAddr(String addr) {
this.addr = addr;
}
@Override
public String toString() {
return "Person [id=" + id + ", name=" + name + ", hobby=" + hobby + ", addr=" + addr + "]";
}
}
复合形式 List
上述全部代码(elel.jsp):
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.util.*,com.zql.pojo.Person"%>
Insert title here
<%--
<%
String str = "Daniel";
request.setAttribute("str", str);
%>
${str} --%>
<%-- <%
String [] arr = {"Daniel","Wendy","Kendra"};
request.setAttribute("arr", arr);
%>
${arr}
${arr[1]} --%>
<%-- <%
List list = new ArrayList();
list.add("name");
list.add("age");
list.add("hobby");
list.add("addr");
request.setAttribute("list",list);
%>
${list} --%>
<%-- <%
Map map = new HashMap();
map.put("name", "Daniel");
map.put("age", 100);
map.put("birthday", "521");
map.put("hobby", "run");
request.setAttribute("map", map);
%>
${map}
${map.name} --%>
<%-- <%
Person person = new Person(3,"Daniel","run","深圳");
request.setAttribute("person",person);
%>
${person }
${person.addr } --%>
<%
List list = new ArrayList();
Person person1 = new Person(3,"Daniel","run","深圳");
Person person2 = new Person(4,"Daniel","run","深圳");
Person person3 = new Person(5,"GuoGuo","play","兰州");
list.add(person1);
list.add(person2);
list.add(person3);
request.setAttribute("list",list);
%>
${list }
${list[2].name}
2.1.2.3、数据的运算 (域对象)
对常量进行运算: (不频繁)
对域对象数据进行运算: 频繁使用
运算完毕不会修改域对象数据
<%
int i = 1;
int j = 2;
String a = "1";
String b = "2";
request.setAttribute("i",i);
request.setAttribute("j",j);
request.setAttribute("a",a);
request.setAttribute("b",b);
%>
${i+j}
${a+b}
${i+a}
${a+j}
- 没有拼接的功能,只能是数字相加
下面表格有空再了解哈
2.1.2.4、数据的判断(域对象)
是否为空的判断
<%--
1.对象是否为null
2.字符串是否为"" 或者null
3.集合是否为0 或者null
–%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="com.zql.pojo.Person"%>
Insert title here
<%
Person person1 = new Person(2,"Daniel","run","深圳");
Person person2 = new Person();
Person person3 = null;
request.setAttribute("person1", person1);
request.setAttribute("person2", person2);
request.setAttribute("person3", person3);
%>
${empty person1};
${empty person2};
${empty person3};
${not empty person1};
${not empty person2};
${not empty person3};
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="com.zql.pojo.Person"%>
Insert title here
<%
String a = "Daniel";
String b = "";
String c = null;
request.setAttribute("a", a);
request.setAttribute("b", b);
request.setAttribute("c", c);
%>
${empty a};
${empty b};
${empty c};
${not empty a};
${not empty b};
${not empty c};
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.util.*"%>
Insert title here
<%
List list1 = new ArrayList();
List list2 = new ArrayList();
list2.add(11);
List list3 = null;
request.setAttribute("list1", list1);
request.setAttribute("list2", list2);
request.setAttribute("list3", list3);
%>
${empty list1};
${empty list2};
${empty list3};
${not empty list1};
${not empty list2};
${not empty list3};
2.2、知识点:JSTL标签
2.2.1、JSTL标签的简述及导入
JSTL标签和EL表达式的作用是一样的,简化大量的JSP脚本。
JSTL作用原理和EL表达式一样的,翻译成大段的Java代码来使用。
标签库 标签库的UTL 前缀 Core http://java.sun.com/jsp/jstl/core c I18N http://java.sun.com/jsp/jstl/fmt fmt SQL http://java.sun.com/jsp/jstl/sql sql XML http://java.sun.com/jsp/jstl/xml x Functions http://java.sun.com/jsp/jstl/functions fn
Core标签库中有很多标签。
使用JSTL标签。
导入JAR包,项目就可以使用JSTL标签
(1)导jar包
只能使用在JSP上,无法使用在HTML上。
JSP需要使用taglib指令导入对应标签库,某个JSP就可以使用JSTL标签
(2)导入包
可查看1.3.5.4、taglib指令 如下指令:
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
(3) 编写入门案例:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
Insert title here
<%
String str = "Daniel";
request.setAttribute("str", str);
%>
${str}
2.2.2、
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
Insert title here
<%
String name = "Daniel";
request.setAttribute("name", name);
%>
我不是空的
2.2.3、
Items: 要遍历的集合 和EL表达式一起使用
Var: 存放在集合中每次遍历出的数据
VarStatus:遍历出来的状态(步长)
Count:索引从1开始
Index:索引从0开始
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.util.*"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
Insert title here
<%
List list = new ArrayList();
list.add("Daniel");
list.add("Wendy");
list.add("Kendra");
list.add("Guoguo");
request.setAttribute("list", list);
%>
${s}
<%-- ${vs.count} --%>
<%-- ${vs.index} --%>
2.3、案例代码优化
(1)导入JSTL 的jar包(前面有提到)
(2)将ProductServlet.java 中转发修改为:pList2.jsp
(3)编写pList2.jsp代码
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
Insert title here
商品序号
商品名称
商品图片
商品价格
商品描述
${ps.count}
${vs.pname}

${vs.shop_price }
${vs.pdesc}
(4)运行: http://localhost:8080https://blog.csdn.net/servlet7/search
2.4、MVC设计模式
MVC简述及作用:
MVC是软件开发中经典的设计模式。
作用:
进行业务分离,更好地进行项目的维护。
控制器Controller:Servlet ,控制展示哪个JSP/对业务进行处理
视图View:JSP,进行数据的收集或展示
模型Model:JavaBean,进行数据的封装
Java相关栏目本月热门文章
- 1【Linux驱动开发】设备树详解(二)设备树语法详解
- 2别跟客户扯细节
- 3Springboot+RabbitMQ+ACK机制(生产方确认(全局、局部)、消费方确认)、知识盲区
- 4【Java】对象处理流(ObjectOutputStream和ObjectInputStream)
- 5【分页】常见两种SpringBoot项目中分页技巧
- 6一文带你搞懂OAuth2.0
- 7我要写整个中文互联网界最牛逼的JVM系列教程 | 「JVM与Java体系架构」章节:虚拟机与Java虚拟机介绍
- 8【Spring Cloud】新闻头条微服务项目:FreeMarker模板引擎实现文章静态页面生成
- 9JavaSE - 封装、static成员和内部类
- 10树莓派mjpg-streamer实现监控及拍照功能调试
- 11用c++写一个蓝屏代码
- 12从JDK8源码中看ArrayList和LinkedList的区别
- 13idea 1、报错java: 找不到符号 符号: 变量 log 2、转换成Maven项目
- 14在openwrt使用C语言增加ubus接口(包含C uci操作)
- 15Spring 解决循环依赖
- 16SpringMVC——基于MVC架构的Spring框架
- 17Andy‘s First Dictionary C++ STL set应用
- 18动态内存管理
- 19我的创作纪念日
- 20Docker自定义镜像-Dockerfile
热门相关搜索
路由器设置
木托盘
宝塔面板
儿童python教程
心情低落
朋友圈
vim
双一流学科
专升本
我的学校
日记学校
西点培训学校
汽修学校
情书
化妆学校
塔沟武校
异形模板
西南大学排名
最精辟人生短句
6步教你追回被骗的钱
南昌大学排名
清朝十二帝
北京印刷学院排名
北方工业大学排名
北京航空航天大学排名
首都经济贸易大学排名
中国传媒大学排名
首都师范大学排名
中国地质大学(北京)排名
北京信息科技大学排名
中央民族大学排名
北京舞蹈学院排名
北京电影学院排名
中国戏曲学院排名
河北政法职业学院排名
河北经贸大学排名
天津中德应用技术大学排名
天津医学高等专科学校排名
天津美术学院排名
天津音乐学院排名
天津工业大学排名
北京工业大学耿丹学院排名
北京警察学院排名
天津科技大学排名
北京邮电大学(宏福校区)排名
北京网络职业学院排名
北京大学医学部排名
河北科技大学排名
河北地质大学排名
河北体育学院排名



