Jsp技术

Jsp技术

Java Server Pages — java服务页面

页面中直接使用 HTML标签 + Java代码 , 简化现有Servlet开发中VIEWJsp过于繁琐的步骤。

展示系统当前时间

1. 创建页面    xxx.jsp

2. 代码的书写
	<html>
        <head></head>
        <body>
            <h1>系统当前时间:<%= new java.util.Date() %></h1>
        </body>
    </html>

3. 比较与Servlet
	1. 简化 Html标签+Java代码
	2. 修改完代码不再需要去重启服务器,直接刷新页面
	3. 在项目中的存放路径和原有的html位置相同,
		访问路径 : localhost:8989/Jsp_Day1/first.jsp

一、脚本

1、普通脚本 <% %>

脚本中书写一般的java代码

2、声明脚本 <%! %>

对于成员变量,类,函数的声明。 特殊:函数,剩下都建议直接使用普通脚本。

3、输出脚本 <%= %>

类似于打印语句, 将java代码输出在页面中。

使用Jsp页面输出99乘法表,同时保证奇偶行颜色不一样。

二、指令

2.1 page <%@page 属性=”属性值“ %>
 1. import="包1,包2"  							注意:或者可以书写多个page指令标签    
 2. pageEncoding="utf-8"
 3. contentType="text/html; charset=utf-8"
     xxx.jsp  --->  xxx_jsp.java ---> xxx_jsp.class
     
     pageEncoding="utf-8"    jsp 向 .java 转换时的编码格式设置    
     
     contentType="text/html; charset=utf-8"            
         :class 文件向浏览器输出页面的编码格式
     response.setContentType("text/html; charset=utf-8");

	本质上将jsp页面就是一个servlet类
	
 4. session="true"   默认都是true  只有在不需要的情况下会手动修改成false
        request.getSession(true/false);

 5. isELIgnored="false"     当前页面是否忽略EL表达式   不忽略
 6. isErrorPage="true"       当前页面为错误页面 
 7. errorPage="错误页面的路径" 发生错误后会跳转至错误页面
2.2 include 包含 (源码包含)

一个页面中可以去引入其他页面的显示结果共同展示。

<%@ include  file="其他页面的路径" %>         jsp/html

注意: 如果包含页面中出现了相同的方法或变量会存在命名的冲突。

2.3 taglib

使用标签库 需要引入标签库资源。

三、动作

<jsp:include page=“页面路径”> (结果包含) 建议使用的包含形式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ovPeXWy8-1594711265606)(E:\JavaWeb\Jsp\笔记\包含的区别.png)]

Jsp页面中需要跳转 同时使用request作用域进行数据的传递

<jsp:forward page=“跳转的页面路径”

跳转是一次请求,可以使用request作用域传递数据,地址栏不发生改变。

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

在jsp页面中 , 普通脚本和输出脚本中不需要创建就可以使用的对象。

1. request *
		request作用域相关的方法
		request.getContextPath();  获取当前项目名称	
2. response
		知道是一个内置对象,用处不大		
3. session *
		作用域相关操作
4. application *
		就是Servlet中的ServletContext 作用域 一个项目(应用)
		
5. config       Servlet中的一些初始化信息参数
6. out          输出流
7. exception    只能在错误页面中使用 isErrorPage="true"
8. page			相当于java中的this 指代当前jsp页面
9. pageContext *
		1. 作用域 : 一个页面
            注意:不仅仅可以去操作属于自己的作用域,还可以通过参数进行其他作用域的操作。
            pageContext.setAttribute("name", "value",pageContext.SESSION_SCOPE);
            pageContext.getAttribute("name", pageContext.APPLICATION_SCOPE);
            // REQUEST_SCOPE   SESSION_SCOPE    APPLICATION_SCOPE
		2. pageContext.getXXX 方法
			获取其他八个隐含对象。

五、EL表达式

本质: 简化脚本(输出脚本),从作用域中获取数据,在页面中进行展示。

语法: ${作用域.name}

存数据:作用域.setAttribute(String name,Object value);

作用域对比
	Java程序   :   pageContext  、 request  、 session  、 application
	EL表达式取值:   pageScope  / requestScope / sessionScope / applicationScope
	
	
展示数据:
	EL表达式如果没有从作用域中获取数据则不会进行任何结果的显示。
	脚本+Java代码会展示  null
    
    
获取数据
	1.八种基本类型+String
	
	2.用户自定义类型(对象类型)
		脚本+Java代码 :<%= ((User)request.getAttribute("user")).getId() %>
    	EL表达式: ${requestScope.user.id}

		注意: requestScope.user.id
		       .id   是调用了实体类用 getID() 方法       . 就相当于get关键字
		       
	3. 支持运算
		3.1 算数运算   + - * / %
        3.2 比较运算   >(gt)  >=(ge)  <(lt) <=(le)  ==(eq)  !=(ne)
        3.3 逻辑运算   &&  ||3.4 空运算     empty
    			是否为空   空:true  非空:false

EL表达式中的内置对象

1.pageContext
    <%=request.getAttribute("name") %>  动态获取项目名称
	EL表达式中  request 不等于 requestScope   只是跟作用域相关的操作有一定的关联性
	${pageContext.request}    获取request对象
	${pageContext.request.contextPath}  EL动态获取项目名称
	
2.cookie
	new Cookie(String name,String value);
	${cookie}   --->  网站中所有cookie
	${cookie.name}  cookie对象地址
	${cookie.name.name}  name数据
	${cookie.name.value} value数据
	
3.param  接收数据
	修改 ---> 将数据默认进行填充
	<a href="${pageContext.request.contextPath}/pm/update.jsp
        ?username=xiaohong&password=123&age=12">修改</a>
        
    数据的接收  
    ${param.username}
	age:<input type="text" name="age" value="${param.age}"/><br/>

六、JSTL标签

Jsp标准标签库

Jstl标签 + EL表达式 在Jsp页面中进行数据的展示,目的为了完全替换用来展示的脚本。

1. 引入标签库
	<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    uri:标签库的资源路径
    perfix : 标签库的标识  约定俗成: c
2. 使用   进行数据的展示
	2.1 有条件的判断展示
		<c:if test="EL表达式">
		</c:if>      
        注意: 没有else标签的存在
        
    2.2 集合的数据展示
    	List、Set 集合
            for(泛型 当前遍历对象:集合){}
            for(泛型 var:items){}
            items="EL表达式"
            var="当前遍历的数据对象"
            <c:forEach items="需要遍历的集合对象" var="当前遍历的数据对象 user">
                ${user.id}
            </c:forEach>
        
        Map 集合
        	var: 当前对象   key=value   Entry对象
        	entry.key
        	entry.value
        	
        users:Map集合	
        <c:forEach items="${requestScope.users}" var="user"  >
			<h4>${user}</h4>
			<h4>${user.key}</h4>
			<h4>${user.value}</h4>
			<h4>${user.value.id}</h4>
			<hr/>
		</c:forEach>
		
        其余forEach中的属性:
        	和集合类型是没有任何关系
        	开始下标 :  begin="1"   
            结束下标 :  end="1"    集合中开始遍历的下标   0~n
        	步幅    :   step="2"
            遍历状态 :  varStatus="u"
            	${u.index} 遍历下标  
            	${u.count} 当前遍历的次数 
            	${u.first} 是否是第一次遍历
                ${u.last}  是否是最后一次遍历
<c:url> 路径重写
		避免cookie禁用而seesion失效的问题
		JSESSIONID cookie的传输问题
		 
		 action=/项目名称/资源路径”
		 ${pageContext.request.contextPath}/cookie
		 <c:url context="${pageContext.request.contextPath}" value="/cookie"></c:url>
		 /Jsp_Day2/cookie;jsessionid=E6141A92E5CF759DE45576E607EC4362 
		 
action=<c:url context="${pageContext.request.contextPath}" value="/cookie"></c:url>
<%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>  
<fmt:formatDate value="${requestScope.date}" pattern="yyyy-MM-dd HH:mm:ss"/>

功能

用户的 登录 和 注册

​ user表 字段 id username realname age password sex

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

product 商品表 id name price message

展示系统当前时间、展示当前登录用户、安全退出

搜索: 按名称、价格、描述

提升:

​ 购买、分页

yyyy-MM-dd HH:mm:ss"/>




### 功能

> 用户的 登录 和 注册
>
> ​    user表 字段  id username realname age password sex
>
> 展示所有的商品、添加商品、修改商品、删除
>
>    product 商品表  id name price message
>
> 展示系统当前时间、展示当前登录用户、安全退出
>
> 搜索: 按名称、价格、描述
>
> 提升:
>
> ​	购买、分页



















  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值