Servlet案例7:jsp技术及案例
jsp运行原理:
根据jsp文件创建java文件(servlet),并编译运行
第一次访问时会被翻译成servlet后执行
jsp三个指令:
1.page指令:页面翻译运行的属性的配置(通常使用默认)
language="java" 可以嵌入的语言
contentType="text/html; charset=UTF-8" 设置servlet的response.setContentType内容
pageEncoding="UTF-8" 当前jsp文件的编码
session="true" 默认session可以直接使用
import="java.util.*" 导入java包
errorPage="xxx.jsp" 如果java代码有错,跳转到某个新页面
注意这里的错误不是404错误,而是代码错误,如果要配置404错误跳转的页面,需要在web.xml中配置

isErrorPage="true" 是否是由于错误跳转后的页面
2.include指令:可以将其他的jsp页面包含到另一个jsp页面中
<%@ include file ="地址" %>
3.taglib指令:在jsp页面中引入标签库
<%@taglib uri="标签库地址" prefix="前缀"%>
jsp内置对象:
需要特别强调的2个对象
1.out对象:作用:在客户端页面输出内容
三种方法:
1.<% out.write("hello world");%>
2.<% response.getWriter().write("hello world");%>
3.<%="hello world"%>
本质上后两者都是转化成out对象
1,3写入out缓冲区,2写入response缓冲区
由于tomcat会从response缓冲区获得内容,所以out缓冲区内容会被刷到response缓冲区
于是先输出的是2,但是设置缓冲区(默认8kb)buffer=0kb,则按顺序输出
2.pageContext对象:页面上下文对象
是一个域对象,范围是当前页面
域对象方法setAttribute等和request,session域类似
范围可以设置
//使用pageContext向request域存数据
//request.setAttribute("name", "zhangsan");
//pageContext.setAttribute("name", "sunba");
//pageContext.setAttribute("name", "lisi", PageContext.REQUEST_SCOPE);//request域
//pageContext.setAttribute("name", "wangwu", PageContext.SESSION_SCOPE);//session域
//pageContext.setAttribute("name", "tianqi", PageContext.APPLICATION_SCOPE);//application域
取出
<%=request.getAttribute("name") %>
<%=pageContext.getAttribute("name", PageContext.REQUEST_SCOPE)%>
特有的方法:findAttribute
<!-- findAttribute会从小到大搜索域的范围中的name -->
<!-- page域<request域<session域<application域 -->
<%=pageContext.findAttribute("name") %>
获得其他对象
<%
pageContext.getRequest();
pageContext.getOut();
%>
静态包含和动态包含:
静态:<%@include file="地址" %>
合成一个页面,再进行翻译成java文件
动态:<jsp:include page="地址"/>
两个jsp文件翻译成java文件,编译运行
运行阶段调用方法include
请求转发:
<jsp:forward page="资源"/>
转发后地址不变
接下来做一个案例:
动态显示商品列表
数据库准备:
CREATE DATABASE web;
USE web;
CREATE TABLE `product` (
`pid` VARCHAR(50) 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`)
)
添加多条数据,这里略
对应类:
package domain;
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;
}
}
servlet:
package 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 domain.Product;
import utils.DataSourceUtils; public class ProductListServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//准备所有商品数据,存入List
QueryRunner runner = new QueryRunner(DataSourceUtils.getDataSource());
List<Product> productList = null;
String sql = "select * from product";
try {
productList = runner.query(sql, new BeanListHandler<Product>(Product.class));
} catch (SQLException e) {
e.printStackTrace();
}
//将数据存到request域,转发给jsp文件
request.setAttribute("productList", productList);
request.getRequestDispatcher("/product_list.jsp").forward(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
用到的连接池工具类(注意c3p0-config.xml的配置):
package utils; import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement; import javax.sql.DataSource; import com.mchange.v2.c3p0.ComboPooledDataSource; public class DataSourceUtils { private static DataSource dataSource = new ComboPooledDataSource(); private static ThreadLocal<Connection> tl = new ThreadLocal<Connection>(); // 直接可以获取一个连接池
public static DataSource getDataSource() {
return dataSource;
} // 获取连接对象
public static Connection getConnection() throws SQLException { Connection con = tl.get();
if (con == null) {
con = dataSource.getConnection();
tl.set(con);
}
return con;
} // 开启事务
public static void startTransaction() throws SQLException {
Connection con = getConnection();
if (con != null) {
con.setAutoCommit(false);
}
} // 事务回滚
public static void rollback() throws SQLException {
Connection con = getConnection();
if (con != null) {
con.rollback();
}
} // 提交并且 关闭资源及从ThreadLocall中释放
public static void commitAndRelease() throws SQLException {
Connection con = getConnection();
if (con != null) {
con.commit(); // 事务提交
con.close();// 关闭资源
tl.remove();// 从线程绑定中移除
}
} // 关闭资源方法
public static void closeConnection() throws SQLException {
Connection con = getConnection();
if (con != null) {
con.close();
}
} public static void closeStatement(Statement st) throws SQLException {
if (st != null) {
st.close();
}
} public static void closeResultSet(ResultSet rs) throws SQLException {
if (rs != null) {
rs.close();
}
} }
jsp页面中的内容:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.*" %>
<%@ page import="domain.*" %>
......
......
<% //获得集合List<Product>
List<Product> productList = (List<Product>)request.getAttribute("productList");
if(productList!=null){
for(Product product : productList){
out.write("<div class='col-md-2' style='height:250px'>");
out.write("<a href='product_info.htm'>");
out.write("<img src='"+product.getPimage()+"' width='170' height='170' style='display: inline-block;'>");
out.write("</a>");
out.write("<p><a href='product_info.html' style='color: green'>"+product.getPname()+"</a></p>");
out.write("<p><font color='#FF0000'>商城价:¥"+product.getShop_price()+"</font></p>");
out.write("</div>");
}
} %>
web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>WEB7</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<description></description>
<display-name>ProductListServlet</display-name>
<servlet-name>ProductListServlet</servlet-name>
<servlet-class>servlet.ProductListServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ProductListServlet</servlet-name>
<url-pattern>/productList</url-pattern>
</servlet-mapping>
</web-app>
这里运用了简单的MVC三层架构
注意:访问/product_list.jsp将会没有内容
访问/productList查询数据库转发后才会有内容
Servlet案例7:jsp技术及案例的更多相关文章
- Servlet组件之 jsp 技术
JSP 简称java服务器页面(java server page),jsp和servlet实现了我们的开发需求.对于jsp技术我们首先需要知道他的组成 HTML+java+jsp内置对象=jsp ...
- JSP(8)—EL案例和JSTL案例
1.EL案例 el.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" ...
- Servlet,jsp,JSP技术 ,JSP编程
一.Servlet 思考 1 浏览器可以直接打开JAVA/class文件吗? 不可以 2浏览器可以打开HTML.JS 文件吗? 可以 3 JAVA程序可以生成HTML文件吗?可以的,用IO流. 4 ...
- Servlet请求头response应用简单案例
Servlet请求头response应用简单案例:访问AServlet重定向到BServlet,5秒后跳到CServlet,并显示图片: AServlet package cn.yzu; import ...
- Java基础-零拷贝技术应用案例
Java基础-零拷贝技术应用案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 零拷贝技术在Hadoop生态圈中很多组件得到应用,典型的比如kafka组件,它就很成功的应用了零拷贝 ...
- 01 Servlet & Jsp 技术概述
Servlet 介绍 servlet 是运行在web服务器或应用服务器上的java程序, 它是一个中间层, 负责连接来自web浏览器或其他http客户端的请求和HTTP服务器上的数据库或应用程序. 为 ...
- java的JSP技术
java的JSP技术 [toc] 1.JSP简介 Jsp技术是用来开发java web的页面显示的,所有MVC模型里面的视图层,所以视图层的开发 jsp不是编程语言,三个英文是java server ...
- Java Web之JSP技术
JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术.JSP这门技术的最大的特点在于,写jsp就像在写html,但它相比htm ...
- Jsp技术总结
这节我们总结一下Jsp的相关技术. 1. 什么是JSP JSP即Java Server Pages,它和servlet技术一样,都是sun公司定义的一种用于开发动态web资源的技术.该技术的最大特点在 ...
随机推荐
- python装饰器补漏
以前写过一篇装饰器文章,觉得少了点东西,今天特来补上,也就是带参数的装饰器,上篇文章写的不严谨 def logger(logs=""): def outer(f): def inn ...
- python 函数的名称空间及作用域
一:名称空间 1:什么是名称空间: 名称空间即:储存名字与值的内存地址关联关系的空间 2.名称空间的分类: 内置名称空间:存储器自带的一些名称与值的对应关系,如:print,len,max等; 生命周 ...
- Django 学生信息 添加 功能 遇到的问题.
1 添加 班级信息时的问题 (grade为外键) 原因是 grade 必需接收 一个 实例, 而我交是一个 str字符串, if request.method == 'POST': data = { ...
- phpcms的一些问题 乱码,安装
一.乱码:我这的网站出现的乱码情况:后台栏目名乱码,迁站后更新缓存,再更新栏目,内容,前台都乱码. 找了半天原因,经过本地测试,没问题,一上线就出现问题,不同点就是线上的数据库版本是mysql5.5, ...
- java基础 ----- 循环结构
循环的结构特点 : 循环条件 循环操作 ----- while 循环 来个小例子,实现打印50 份shij 1.确定循环条件和循环操作 2.套用while语法写出代码 3.检查循环能 ...
- 随笔 | 分布式版本控制系统Git的安装与使用
作业要求来自https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2097 GitHub远程仓库的地址https://github.com/W ...
- 【bug小记】应用跳转白屏
tv端项目 测试那边反馈我们的应用跳转到别的应用,再跳转回来会出现白屏的情况. 其实这个原因很简单,就是系统内存不足了把我们的app进程销毁了 所以再回到我们的应用的时候需要重新绘制,而这个" ...
- gd_t , bd_t 结构分析
在分析板级初始化函数board_init_f 和 board_init_r 之前,先来看一下在uboot中颇为重要的 gd_t, bd_t 结构 bd_t 所对应的定义bd_info 在 arch/a ...
- elementui上传文件
<el-form-item label="上传附件"> <transition name="fade"> <el-upload r ...
- RNA提取和建库流程对mRNA-Seq的影响
RNA提取和建库流程对mRNA-Seq的影响 已有 10460 次阅读 2014-8-14 14:21 |个人分类:转录组测序|系统分类:科研笔记|关键词:转录组测序,RNA-Seq,,链特异性RNA ...