初学者——JSP

JSP工作原理简述:

当请求的时候,网络容器会将jsp解析,这个时候一个jsp就相等于一个servlet(这个servlet是网络容器写的),网络容器打包发布项目的时候,就会将 jsp发布成一个类,里面所有的东西都会变成Java代码,然后通过servlet实例中的jspService方法,把内容返回。
在这里插入图片描述

一句话总结:Java里面写html。

jsp:是动态页面。

JSP小脚本

在这里面<% %>写就是告诉解析器我这里面的是Java代码

<%= “sds”%>相当于out.write(“sds”)

举例:

<%
    if (3>4){
  %>
 <div style="width: 100px;height: 100px;background-color: #f15c00"><%="显示第一个代码块" %></div>
<%
     }else {
  %>
<div style="width: 100px;height: 100px;background-color: aqua"><%="显示第二个代码块" %></div>
<%
    }
  %>
jsp中重定向和转发的区别和使用

创建一个index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>

<%   out.print(session.getAttribute("name"));%>
</tbody>
</table>
  </body>
</html>

当转发上述jsp时

使用request.getRequestDispatcher或者session都可以拿到内容

做法如下:

req.setAttribute("name","haha");
 //通过转发,可以用session和request都可以      req.getRequestDispatcher("index.jsp").forward(req,resp);
 或者
HttpSession session = req.getSession();
session.setAttribute("name","haha");
req.getRequestDispatcher("index.jsp").forward(req,resp);    
结果:haha

当重定向到上述jsp时

可以使用session,不能使用request。

因为重定向其实相当于发起了两次请求,而request是当前用户本次请求,重定向时它把内容放在第一次请求,而在第二次请求中什么内容也没有,因此在jsp中拿不到值。

session只要链接没断开,就可以拿到内容。

//使用重定向到jsp中时需要session才能过去拿到值
        HttpSession session = req.getSession();
        session.setAttribute("name","haha");
        resp.sendRedirect("index.jsp");

HTML页面和jsp页面的区别

HTML页面是[静态页面],也就是事先由用户写好放在服务器上,固定内容,不会变,由web服务器向客户端发送,如平时上网看的网页大部分都是基于[html语言]的。

JSP页面是由JSP容器执行该页面的Java代码然后实时生成的[动态页面],可动态更新页面上的内容。

传给jsp和传给html区别:
传给html,因为它是静态页面只能通过js解析json来处理内容;

传给jsp,是因为jsp是动态页面,可动态更新页面内容。

EL表达式

主要目的是为了得到一个值,至于从哪里得到,不是重点,可以放在jsp里任何一个标签里,但是不能放在JSP小脚本里,在EL表达式中 {} 里一定得出一个值 。

EL表达式获取内容的过程

 如:${3>4}    获得的值结果为false
    ${"aa"}   获得字符串aa 

EL表达式,是可以获得很多位置上的内容的,但是我们要注意一些点:EL表达式获取数据的顺序是从小到大的顺序来获取的。

page—> request—> session —> application

page: 当前用户,当前页面(不常用)
request:当前用户,本次请求
session:当前用户,没有退出之前(本次链接没有关闭前)application:所有用户,任何时候(服务器没有退出之前),JSP的一个内置对象,一般只有全局性的配置,全局性的统计才有可能放daoapplication中做。

 加了**Scope描述之后,它就去这个域去拿,不加就是按顺序拿,
 scope---存储域
 如${sessionScope.list} 
JSTL

JSTL 是一个标签库。

JSTL 依托结合EL表达式来做的,因为EL表达式是可以放置在html标签内部;

EL表达式和JSTL都是对小脚本的封装,EL表达式封装是取值过程,而JSTL 标签库封装的是流程控制过程。

需要导入的包:jstl-1.2.jar (版本任意)

设置lib库:以常用的c包为例(c是核心)

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

f包---->格式化包

fn包----->函数支持包

sql包---->数据库支持包

xml包---->解析xml

prefi——>前置名,一般不用改

简单的使用

 set加一个值给进来  remove删掉
<c:set value="ddd" var="name" scope="page"></c:set>
<c:remove var="name"></c:remove>
    <c:out></C:out>  相当于  ${out }

c标签的分支

<c:if test="${3>4}">
     <div>fdsa</div>
   </c:if>

//choose选择, when判断,第一个成立后面when不选择,所有的when不成立执行otherwise。
   <c:choose>
     <c:when test="${3>4}">
       <div>hhhhh</div>
     </c:when>
     <c:otherwise>
       <div>yyyyy</div>
     </c:otherwise>
   </c:choose>
   

c标签的循环

属性:

items :要被循环的信息 默认值无

begin:开始的元素(0=第一个元素,1=第二个元素) 默认值 0 end :最后一个元素(0=第一个元素,1=第二个元素) 默认值 Last element
step :每一次迭代的步长 默认值 1
var :代表当前条目的变量名称 默认值 无
varStatus :代表循环状态的变量名称 默认值 无

   <c:forEach items="${list}" var="item" varStatus="status">
     <div>当前是第 ${status.count} 个用户,用户名: ${item.username}</div>
   </c:forEach>

9大内置对象:(常用的是前6个)

  out:输出对象,负责向页面输出一行内容
  request:请求对象,就是请求到本页面的请求体
  response:向前端返回数据的工具
  session:就是HTTPSession,当前会话对象
  application:特指当前应用
  page:当前页面(object)
  \pageContext:高级容器,是所有JSP的容器,也叫所有JSP的最高管理者    内置对象生成器,基本上所有内置对象都是从它里面拿出来的除了request,response那些
  config: 配置信息对象
  exception:当且仅当这个JSP发生错误异常的时候,这个对象才会出现
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值