Jsp技术

耗尽温柔 提交于 2019-12-17 00:26:05

Jsp技术

Java server pages ----- java服务页面

Servlet技术的延续:替换之前项目中用来展示页面(View)的Servlet

 Jsp 技术   =   html标签 + java代码
 
 
 1、简化开发 (代码的简洁)
 2、避免修改代码重启服务器
 
 展示系统当前时间!!!
 java代码需要进行嵌套(使用脚本 <%= %>)
 <h1><%= new java.util.Date() %></h1>

访问Jsp 
	1、需要将jsp页面部署到服务器中
	2、路径   locahost:8989/项目名称/jsp页面名称
	3、位置   Webroot目录中 和 html等静态资源位置相同。

一、脚本语法

1.1 输出脚本 <%= %> *

将脚本中的内容输出到网页中。

<%= new java.util.Date() %> 相当于 System.out.print(输出控制台)

注意:输出脚本中结尾没有 ;

1.2 声明脚本 <%! %>

变量、方法、类 等等的声明

1.3 普通脚本 <% %> *

脚本中嵌套java代码。 唯一:不能去声明方法。

注意: 脚本 和 html标签/脚本   之间的互相嵌套
<%for(int i=1;i<=10;i++){%>
	<h3><%= new java.util.Date() %></h3>
<%}%>

使用jsp页面输出99乘法表,奇偶行不同颜色。

<%for(int i=1;i<=9;i++){
    for(int j=1;j<=i;j++){
        if(i%2==0){%>
		<font style="color:red"><%=i%>*<%=j%>=<%=i*j%> </font>
		<%}else{%>
		<font style="color:green"><%=i%>*<%=j%>=<%=i*j%> </font>
		<%}
	}%><br/>
<%}%>

二、指令

语法 : <%@可选数值 属性=“属性值” 属性=“属性值” %>

2.1 page
1. import="java.sql.*,java.util.*"         或者书写多个page指令标签
2. pageEncoding="UTF-8"    			       从.jsp到.class过程中的编码
3. contentType="text/html;charset=UTF-8"   输出页面的编码格式
4. session="true"						   true/false  和 Servlet中相同
5. isELIgnored="false"					   是否忽略EL表达式 ***
6. errorPage="错误的提示页面路径"			 本页面发生异常会跳转至错误的提示页面
7. isErrorPage="true" 					   提示页面必须将false改为true

注意: Jsp页面本质上就是一个Servlet,由服务器解析的时候自动生成 .java 和 .class文件

.jsp ----> .java -----> .class 文件

2.2 include 静态包含(源码包含)

一个jsp页面由多个独立页面组成,包含是在本页面中去引入其他页面代码。

	<%@include file="top.jsp"%>   file="另一张jsp页面的路径"

问题:
	相互引用页面会产生代码的冲突。维护成本会增加。
2.3 taglib

三、动作

3.1 include 动态包含(结果包含)

一个jsp页面由多个独立页面组成,包含是在本页面中去引入其他页面的执行结果。

	<jsp:include page="top.jsp"></jsp:include>

在这里插入图片描述

3.2 跳转 (了解)
 <jsp:forward page="页面路径"></jsp:forward>

四、隐含对象 (内置对象)

不需要开发人员手动创建,就可以直接使用的对象。(在脚本中使用!!) 九个必须都记住!!!

*1.request
 	//接收数据			request.getParameter();
 	//作用域   		 request.set/getAttribute();
 	//动态获取项目名称    request.getContextPath()
 2.response
*3.session
 	//作用域相关         session.set/getAttribute();
 4.application (ServletContext)
    //作用域相关         application.set/getAttribute();
 5.config
 6.out
 7.page  相当于 this
 8.exception   在iserrorPage=true”中使用
*9.pageContext
 		9.1 是一个作用域  当前页面
 			pageContext可以操作其他三个作用域 
 			pageContext.setAttribute("key", "value",pageContext.REQUEST_SCOPE);
		*9.2 获取其他八个内置对象
			pageContext.getXXXX();

五、EL表达式

从作用域中获取数据 ${ 作用域.name }

存:	request.setAttribute(String name, Object value);
取: 
	脚本: request.getAttribute(String name);
	EL : ${requestScope.name}

注意: 
	1.el表达式没有数据的展示可能是本身没有数据或者语法书写错误。
	2.如果没有数据el不展示但是脚本会显示null

EL中的作用域都是什么?

脚本中的内置对象作用域: pageContext request session application

EL表达式中获取数据的作用域: pageScope requestScope sessionScope applicationScope

特殊: ${ name } 从小到大进行作用于中name的依次匹配,最终输出作用域范围最小的那一个。

1. 基本类型 + String + Date

2. 自定义类型(对象)
	脚本: <%= ((User)request.getAttribute("u")).getName()%>
	EL  : ${requestScope.u.name}

    注意:  .name  是调用了User类中的 getName()方法
           .  相当于get   首字母由大写转换为小写
           
    //对象中的属性又是自定义对象
    ${requestScope.u.address.city}

3. 支持运算
	算术运算   + - * / %
		${requestScope.u.id  + 1 }
	比较运算   > gt < lt >= ge <= le == eq != ne
	逻辑运算   &&  ||  !
        	${requestScope.flag1 && requestScope.flag2}
        	${!requestScope.flag1}

	empty  空运算 判断作用域中 键name 是否存在
			是否为空   true:false:非空

内置对象 (EL表达式中)

1、  pageContext   可以获取其他内置对象
		
		EL获取项目名称?   
		${pageContext.request.contextPath}

2、  param

		用来接收提交的数据  相当于request.getParamter();
		http://localhost:8989/Jsp_Day2/el2.jsp?name=liuyang
		收数据  ${ param.name }

3、  cookie
		cookie.getName()   cookie.getValue();
		<h3>${cookie}</h3>
 		<h3>${cookie.JSESSIONID}</h3>
 		<h3>${cookie.JSESSIONID.name}</h3>
 		<h3>${cookie.JSESSIONID.value}</h3>
 		
     记录用户名密码?
     	完成登陆操作之后创建两个Cookie对象  username 、 password
     	注意:中文的处理

六、JSTL标签

Jsp 标准标签库

和EL表达式一起使用替换页面中所有的脚本(展示数据用的脚本)

引入标签库 : <%@ taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c” %>

uri : 标签库的资源路径 prefix : 别名 在页面中使用的开头标识。

常用标签

1. 判断相关的标签
    1.1
        <c:if test="EL表达式"></c:if>

        <c:if test='${requestScope.u.name == "liuyang" }'>
                <h1>hello world</h1>
        </c:if>

        没有else的!!!!!

	1.2
		<!-- 用的不多!!! 可以被if替代 -->
  		<!-- 特殊点 如果多个条件都满足 只会执行第一个满足的条件 -->
  		<c:choose>
	  		<c:when test='${requestScope.u.id > 5 }'>
	  			<h1>id 大于 5</h1>
	  		</c:when>
	  		<c:when test='${requestScope.u.id > 6 }'>
	  			<h1>id 大于 6</h1>
	  		</c:when>
  		</c:choose>
	
2. 集合数据的输出
	List/Set 集合
    <!-- for(类型  当前遍历对象:集合){} -->
    <!-- items="当前的集合对象"  var="当前遍历对象"-->
    <c:forEach items="${requestScope.addrs}" var="addr">
        <h5>${addr.city}</h5>
        <h5>${addr.street}</h5>
        <hr/>
    </c:forEach>

	Map 集合
    <c:forEach items="${requestScope.addrs}" var="addr">
        <h5>${addr}</h5>  <!-- Entry   key=value -->
        <h5>${addr.key}</h5>
        <h5>${addr.value.city}</h5>
        <hr/>
    </c:forEach>


	补充: 标签中的属性
	begin="0" end="2"   从哪开始遍历到哪结束遍历   list 顺序   set、map 个数 数量
	step="2"  步伐     隔行展示    3:中间间隔两个
        varStatus="a"      遍历的状态
        <h5>遍历下标:${a.index}</h5>
        <h5>遍历次数:${a.count}</h5>  
        <h5>是否是第一次遍历:${a.first}</h5>
        <h5>是否是最后一次遍历:${a.last}</h5>

JSTL标签的补充

日期

<%@ taglib  uri="http://java.sun.com/jsp/jstl/fmt"  prefix="fmt" %>
    
<fmt:formatDate value="${applicationScope.date}" pattern="yyyy-MM-dd HH:mm:ss"/>

URL重写

cookie禁用了session怎么办? jsp页面中的访问路径需要进行url重写

// action=“/项目名称/资源路径”
context=“项目名称”  value=“资源路径”
<c:url context="${pageContext.request.contextPath}" value="/资源路径"></c:url>

/Jsp_Day2/资源路径;jsessionid=622D6234E21CE7FB4B56DD5758E89443
两张表

用户表 id username realname password sex age

商品表 id pro_name price description

功能:

​ 登陆、注册、验证码

​ 展示所有商品、删除、修改、添加

​ 展示当前时间、安全退出、强制登陆、显示当前登陆用户、模糊搜索

​ 分页!!购买!!

分页

SQL语句的分页 rownum

购物车

1、数据存入对象 全新的对象 VO类 shopitem

2、使用什么集合存储 多个shopitem对象? Map集合 key-value 商品ID – shopitem

3、Map集合应该存在哪个作用域中? session作用域

在这里插入图片描述

在这里插入图片描述

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!