【javaWeb】第44天——jsp&el&jstl

回顾:
jsp:
cookie:
浏览器端会话技术
由服务器产生,生成key=value形式,通过响应头(set-cookie)返回给浏览器,保存在浏览器端
下次访问的时候根据一定的规则携带cookie,通过请求头(cookie)携带给服务器.
常用方法:
构造:
new Cookie(String key,String value)
写回:
response.addCookie(Cookie c)
获取:
Cookie[] = request.getCookies();
cookie的api:
getName():获取cookie的名称
getValue():获取cookie的值
setMaxAge(int 秒数);持久化
若int为0;删除此cookie(前提必须路径一致)
setPath(String path):设置cookie的路径
若访问的链接的路径中包含cookie的path,则携带
注意:
cookie不能跨浏览器
cookie不支持中文

session:
服务器端的会话技术
浏览器访问服务器的时候,服务器会获取jsessionid,
若获取不到:
服务器创建一个session,保存用户数据,将该session的jsessionid通过响应返回给浏览器
若获取到:
服务器拿着这个jessionid去session池中查找有无此session
若查找不到:
服务器创建一个session,保存用户数据,将该session的jsessionid通过响应返回给浏览器
若查找到:
拿过来直接使用,将该session的jsessionid通过响应返回给浏览器
常用方法:
获取一个session
request.getSession();

session域对象:
    xxxAttribute()
    生命周期:
        创建:java程序中第一次使用request.getsession方法的时候
        销毁:
            服务器非正常关闭
            session超时
                默认时间
                手动设置时间
            手动删除★
                session.invalidate();
域对象:
    ServletContext:共享的数据
    HttpServletRequest:一次请求的数据
    HttpSession:私有的数据

/
jsp/el/jstl
案例1-在页面中展示所有商品信息,不要使用jsp的脚本
技术分析:
jsp/el/jstl
/
jsp:
java 服务器页面
作用:
将内容的生成和信息的展示相分离
运行在服务器端,本质上就是一个serlvet,产生的java文件和class保留在tomcat的word目录下.
jsp脚本:
<%..%> java代码片段
<%=..%> 输出表达式 相当于out.print();
<%!…%> 声明成员
jsp的指令
作用:声明jsp页面的一些属性和动作
格式:
<%@指令名称 属性=”值” 属性=”值”%>
jsp指令的分类:
page:主要声明jsp页面的一些属性
include:静态包含.
taglib:导入标签库
注意:
一个页面中可以出现多个指令
指令可以放在任意位置,一般都放在jsp页面最上面.
///
page指令:
重要属性:3个
contentType:设置响应流的编码,及通知浏览器用什么编码打开.设置文件的mimetype
pageEncoding:设置页面的编码
import:导入所需要的包
contentType和pageEncoding联系:
若两者都出现的时候,各自使用各自的编码
若只出现一者,两个都使用出现的这个编码
若两者都不出现,使用服务器默认的编码 tomcat7使用的iso-8859-1
了解属性:
language:当前jsp页面里面可以嵌套的语言
buffer:设置jsp页面的流的缓冲区的大小
autoFlush:是否自动刷新
extends:声明当前jsp的页面继承于那个类.必须继承的是httpservlet 及其子类
session:设置jsp页面是否可以使用session内置对象
isELIgnored:是否忽略el表达式
errorPage:当前jsp页面出现异常的时候要跳转到的jsp页面
isErrorPage:当前jsp页面是否是一个错误页面
若值为true,可以使用jsp页面的一个内置对象 exception
include指令:
静态包含,就是将其他页面或者servlet的内容包含进来,一起进行编译运行.生成一个java文件.
格式:
<%@include file=”相对路径或者是内部路径” %>
例如:
<%@include file=”/jsp/include/i1.jsp” %>

    路径:
        相对路径:
            ./或者什么都不写 当前路径
            上一级路径  ../
        绝对路径:
            带协议和主机的绝对路径
            不带协议和主机的绝对路径
                /项目名/资源

        内部路径:
            不带协议和主机的绝对路径去掉项目名
                请求转发 静态包含 动态包含

taglib指令:导入标签库  
    格式:
         <%@taglib prefix="前缀名" uri="名称空间" %>
    若导入之后
        <前缀名:标签 .. >
    例如:
        <c:if test="">输出内容</c:if>
///     

jsp的内置对象:★★★(9大内置对象)
在jsp页面上可以直接使用的对象
内置对象 类型
out JspWriter
request HttpServletRequest
response HttpServletResponse
session HttpSession

    exception       Throwable

    page            Servlet(this)
    config          ServletConfig
    application     ServletContext

    pageContext     PageContext
jsp的域对象:理解
    application     整个项目
    session         一次会话
    request         一次请求
    pageContext     一个页面
pagecontext作用:理解
    1.域对象
        xxxAttribute()
    2.操作其他域对象
        方法:
            xxxAttribute(...,int scope);
                scope取值:
                    APPLICATION_SCOPE 
                    SESSION_SCOPE 
                    REQUEST_SCOPE 
                    PAGE_SCOPE 
    3.获取其他的内置对象
        getXxx()
        注意:
            getRequest():获取request内置对象
    4.便捷查找,
        findAttribute(String key):
            依次从pagecontext,request,session,application四个域中,查找相应的属性,若查找到了返回值,且结束该次查找
            若查找不到,返回一个null

jsp的动作标签
:请求转发 相当于java中 request.getRequestDispatcher(..).forward(..);

:动态包含
就是将被包含页面或者servlet的运行结果包含到当前页面中.

/
el:
jsp的内置表达式语言,从jsp2.0开始.
用来替代<%=..%>
作用:
1.获取域中数据 ★
2.执行运算 ★
3.获取常见的web对象
4.调用java的方法
格式:
${el表达式}

获取域中数据:★
注意:★
若属性名中出现了”.”|”+”|”-“等特殊符号,需要使用scope获取
例如:
requestScope[arr.age] r e q u e s t S c o p e [ “ a r r . a g e ” ] 获 取 简 单 数 据 {pageScope|requestScope|sessionScope|applicationScope.属性名}
以后经常使用:
:pageContext,request,session,application,,, 属 性 名 : 依 次 从 p a g e C o n t e x t , r e q u e s t , s e s s i o n , a p p l i c a t i o n 查 找 指 定 属 性 , 若 查 找 到 返 回 值 , 结 束 该 次 查 找 若 查 找 不 到 , 返 回 ” ” 获 取 复 杂 数 据 获 取 数 组 中 的 数 据 {域中的名称[index]}
获取list中的数据
[index]map 域 中 的 名 称 [ i n d e x ] 获 取 m a p 中 的 数 据 {域中的名称.键名}
javabean导航
javabean:
java语言编写的一个可重用的组件,
狭义上来说就是我们编写的一个普通的java类 例如:User Person
javabean规范:
1.必须是一个公共的具体的类 public class
2.提供私有的字段 private String id;//id称之为字段
3.提供公共访问字段的方法 get|set|is方法
public String getId(){..}
一旦有公共的方法之后,get|set|is之后的内容,将首字母小写,将这个东西称之为bean属性
id就是一个bean属性
4.提供一个无参的构造器
5.一般实现序列化接口 serializable

    ${域中javabean名称.bean属性}

//
执行运算:
四则运算 关系(>..) 逻辑(&& ||)
注意:
+:只能进行加法运算,字符串形式数字可以进行加法运算.
empty:判断一个容器的长度是否为0(array set list map),还可以判断一个对象是否为空
${empty 域中的对象名称}
三元运算符
//
el的内置对象(了解)
11个
pageScope
requestScope
sessionScope
applicationScope

    param
    paramValues

    header
    haederValues

    initParam

    cookie★

    pageContext★
注意:
    除了pagecontext其余对象获取的全是map集合

了解:和参数相关的el内置对象
    param
    paramValues

了解:和请求头相关的el内置对象
    header
    haederValues

了解:和全局初始化参数相关的el内置对象
    initParam

cookie内置对象:
    ${cookie} 获取map{key=Cookie}
        例如:创建cookie
            Cookie c=new Cookie("username","tom");
        通过${cookie}获取相当于   
            {username=new Cookie("username","tom")}
        相当于map的key是cookie的键
        map的value是当前cookie

    若项获取名称username的cookie的value值(获取tom)
        ${cookie.username.value}--javabean导航
    注意:
        java中Cookie的api
            getName():获取cookie的名称
            getValue():获取cookie的value值
        我们称name和value是cookie的bean属性

    使用cookie内置对象:
        ${cookie.给cookie起名字.value}

    例如:
        获取jsession的值
        ${cookie.JSESSIONID.value}

pageContext:获取不是map集合,相当于jsp的pageContext内置对象
        在jsp页面中获取项目名
        ${pageContext.request.contextPath}

/
/
jsp注释:
html注释
注释的内容只在页面上看不到 java代码和html源代码都有
java注释
只在java代码中存在
jsp注释 <%– –%>
只在jsp页面中存在,翻译成java文件之后就没有了
///
///
jstl:
jsp标准的标签库语言
apache的
用来替代java脚本
使用步骤:
1.导入jar包 (jstl.jar和standard.jar)
2.在页面上导入标签库
<%@taglib prefix=”” uri=”“%>

        例如:
            <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
jstl的分类:
    core:核心类库 ★
    fmt:格式化|国际化
    xml:过时了
    sql:过时了
    函数库:很少使用
core:掌握
    ★c:if
    ★c:forEach

    c:set 往域中设置值
    c:choose c:when c:otherwise 分支

★c:if 判断
    <c:if test="${el表达式}">满足的时候输出的内容</c:if>
    例如:
        <c:if test="${3>4 }">
            3大于4
        </c:if>
        <c:if test="${3<=4 }">
            3不大于4
        </c:if>
        //
★c:forEach 循环
    格式1:
         <c:forEach begin="从那里开始" end="到那里结束" step="步长" var="给变量起个名字" varStatus="循环状态变量">
            ${i }--${vs.count }--${vs.current }<br>
         </c:forEach>

        varStatus:用来记录循环的状态
            常用的属性:
                count:记录次数
                current:当前遍历的内容
    例如:
        <c:forEach begin="1" end="20" step="2" var="i" varStatus="vs">
            ${i }--${vs.count }--${vs.current }<br>
        </c:forEach>

    格式2:
        <c:forEach items="${el获取域中的容器}" var="n">
            ${n }
        </c:forEach>

        例如:
            //遍历list
            <c:forEach items="${list }" var="n">
                ${n }
            </c:forEach>

            //遍历map
             <c:forEach items="${map }" var="en">
                ${en.key }-- ${en.value }<br/>
              </c:forEach>

扩展:
c:set 和 c:choose
函数库:
//
案例1-步骤分析:
1.数据库和表
create database day12;
use day12;
create table product(
id int primary key auto_increment,
pname varchar(20),
price double,
pdesc varchar(20)
);

    insert into product values (null,'电视机',3200,'液晶曲面大电视');
    insert into product values (null,'韭菜盒子',3,'味重请小心食用');
    insert into product values (null,'益达',10,'韭菜伴侣');
    insert into product values (null,'十三香',12,'守义牌');

    新建一个项目
        导入jar包:
            驱动 dbutils c3p0 jstl
        导入c3p0配置文件 和工具类
        实体类:
                private int id;
                private String pname;
                private double price;
                private String pdesc;
2.index.jsp中添加一个连接
    <a href="/day1201/findAll">展示所有商品</a>
3.FindAllServlet:
    调用ProductService.findAll() 返回一个集合 List<Product>
    将list放入request域中
    请求转发到product_list.jsp
4.ProductService.findAll() 调用dao.findAll()
5.dao.findAll()  使用beanListHandler()
6.在product_list.jsp展示所有商品
    使用 c:forEach
    使用javabean导航获取里面的数据

/
案例2-重写登录案例
需求:
在页面上填写用户名和密码及验证码,点击提交,先校验验证码是否一致.若一致后再去找数据库.顺便记住用户名
技术:
表单
验证码
servlet
request
session
cookie
步骤分析:
1.数据库和表
create table user(
id int primary key auto_increment,
username varchar(20),
password varchar(20)
);
2.创建一个项目
包结构
jar包
工具类和配置文件
3.表单 login.jsp
4.表单提交 loginServlet
loginServlet:
获取验证码(从前台传过来和session中)
判断两个验证码是否一致
若不一致:
填写错误信息,请求转发到login.jsp
若一致:获取用户名和密码
调用userService的getuserbyusernameandpassword 返回值 User user
判断user是否为空
若为空:填写错误信息,请求转发到login.jsp
若不为空:
继续判断是否勾选了记住用户名
若勾选:
创建cookie 将用户名放入cookie写回浏览器
将user对象放入session中
页面重定向 index.jsp 展示 xxx:欢迎回来





上午回顾:
jsp:
作用:
将内容的生成和信息的展示相分离
jsp脚本:
jsp的指令:
作用:声明jsp页面的一些属性或者动作
格式:
<%@指令名 属性=值 属性=值%>
page:
重要属性:
import
pageEncoding:
contentType:

        了解:
            isErrorPage:一旦值为true 可以使用jsp的一个内置对象 exception
    include:静态包含,就是将被包含页面或者servlet的所有内容复制过来一起编译运行,只生成一个java文件
    taglib:导入标签库
jsp的内置对象:
    out
    request
    response
    session

    exception

    page
    config
    application

    pageContext
jsp的域对象:
    pageContext
    request
    session
    application

    pageContext的使用:
        1.域对象 xxxAttribute()
        2.操作其他域对象 xxxAttribute(..,int scope)
        3.获取其他的内置对象 getXxx()
        4.便捷查找  findAttribute(String key):依次从小到大
jsp的动作标签
    jsp:forward 请求转发
    jsp:include 动态包含 是将被包含页面或者servlet运行的结果包含进来

el: jsp内置的表达式语言
用来替代 <%=…%>
作用:
注意:
若属性名中出现一些特殊符号 “.”等等
必须使用: Scope[]1. 域 S c o p e [ “ 属 性 名 ” ] 1. 获 取 域 中 的 数 据 获 取 简 单 数 据 {域Scope.属性名}
${域中的属性名}:依次从小到大

        获取复杂数据
            数组和list
                ${域中的容器名称[index]}
            map
                ${域中的容器名称.键名}
        javabean导航
            ${域中的bean名称.bean属性}
    2.执行运算
        注意:
            +:加法运算
            empty:判断一个容器的长度是否为0,还能判断一个对象是否为空
                ${empty 域中的对象}
                ${not empty 域中的对象}
            三元运算符
    3.获取常见的web对象
    4.调用java的方法
///
el内置对象(11个)
    cookie:
        ${cookie.cookie的key.value}
    pageContext
        ${pageContext.request.contextPath}://动态获取项目名

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
东南亚位于我国倡导推进的“一带一路”海陆交汇地带,作为当今全球发展最为迅速的地区之一,近年来区域内生产总值实现了显著且稳定的增长。根据东盟主要经济体公布的最新数据,印度尼西亚2023年国内生产总值(GDP)增长5.05%;越南2023年经济增长5.05%;马来西亚2023年经济增速为3.7%;泰国2023年经济增长1.9%;新加坡2023年经济增长1.1%;柬埔寨2023年经济增速预计为5.6%。 东盟国家在“一带一路”沿线国家中的总体GDP经济规模、贸易总额与国外直接投资均为最大,因此有着举足轻重的地位和作用。当前,东盟与中国已互相成为双方最大的交易伙伴。中国-东盟贸易总额已从2013年的443亿元增长至 2023年合计超逾6.4万亿元,占中国外贸总值的15.4%。在过去20余年中,东盟国家不断在全球多变的格局里面临挑战并寻求机遇。2023东盟国家主要经济体受到国内消费、国外投资、货币政策、旅游业复苏、和大宗商品出口价企稳等方面的提振,经济显现出稳步增长态势和强韧性的潜能。 本调研报告旨在深度挖掘东南亚市场的增长潜力与发展机会,分析东南亚市场竞争态势、销售模式、客户偏好、整体市场营商环境,为国内企业出海开展业务提供客观参考意见。 本文核心内容: 市场空间:全球行业市场空间、东南亚市场发展空间。 竞争态势:全球份额,东南亚市场企业份额。 销售模式:东南亚市场销售模式、本地代理商 客户情况:东南亚本地客户及偏好分析 营商环境:东南亚营商环境分析 本文纳入的企业包括国外及印尼本土企业,以及相关上下游企业等,部分名单 QYResearch是全球知名的大型咨询公司,行业涵盖各高科技行业产业链细分市场,横跨如半导体产业链(半导体设备及零部件、半导体材料、集成电路、制造、封测、分立器件、传感器、光电器件)、光伏产业链(设备、硅料/硅片、电池片、组件、辅料支架、逆变器、电站终端)、新能源汽车产业链(动力电池及材料、电驱电控、汽车半导体/电子、整车、充电桩)、通信产业链(通信系统设备、终端设备、电子元器件、射频前端、光模块、4G/5G/6G、宽带、IoT、数字经济、AI)、先进材料产业链(金属材料、高分子材料、陶瓷材料、纳米材料等)、机械制造产业链(数控机床、工程机械、电气机械、3C自动化、工业机器人、激光、工控、无人机)、食品药品、医疗器械、农业等。邮箱:market@qyresearch.com

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值