jsp基本介绍

一、介绍
1.定义:用于开发动态web资源地1技术,jsp实际上就是servlet
jsp = html + jsp
2.
html:静态内容
servlet:适合编写java逻辑代码,不是和写界面显示部分
jsp:适合编写输出动态内容,但是不适合编写java逻辑
3.原理:将jsp页面先翻译成.java代码,然后在将.java代码编译成.class
三、基础语法
1.html标签
2.
a)<% %> 小脚本,里面填写Java代码
b)<%=  %> 表达式,相当于out.print();
c)<%! %>:表示将里面的代码,翻译到类的里面,也就是可以将变量变成全局变量,还可以声明方法和静态块
3.jsp的注释:
jsp注释:<%--注释的内容--%> :安全
网页注释:<!--注释内容共-->:不安全
四、jsp的三个指令
1.<%@ page import ="所要导入的包名"%>
注:
1)
 import java.lang.*;
 import javax.servlet.*;
 import javax.servlet.http.*;
 import javax.servlet.jsp.*;
 2)session默认值是true,不需要我们去开启
 errorPage:表示如果页面有错误,就跳转到指定资源
 isErrorPage:是否创建throwable对象,默认是false
 contextType:等同于response.setContextType("text/html;charset=utf-8");

2.Inclue
1).静态包含:把其他资源包含到前页面中
<%@ include file ="/其他页面的名称.jsp"%>
2)动态包含:
<jsp:include page="/其他页面的名称.jsp"></jsp:include>
3)区别:
  1.翻译的时间段不同
  静态:翻译时就把两个文件合并
  动态:不会合并文件,当代码执行到include时,才包含1另一个文件的内容
 注:使用原则就是能用静态的就不用动态的

 3.taglib
  1)作用:在jsp页面中导入jstl标签库。替换jsp中的java代码片段。
  这里我们需要导入jar包
  a)jstl.jar standard.jar
  b)https://mvnrepository.com/
 格式:
 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
五、jsp的六个动作
<jsp:include>动态包含
<jsp:forward>请求转发
<jsp:param>设置请求参数

<jsp:useBean>创建一个对象
<jsp:setProperty>给指定的对象属性赋值
<jsp:getProperty>取出指定对象的属性值
1.jsp动作标签---转发
携带参数相当于,在网址后面进行拼接:
/2.jsp?username=ws&passowrd=123
注:转发的同时还可以携带请求的参数,不要在<jsp:forward动作中间加注释(会编译出错)
2.代码:
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- 测试pageContext域 -->
<%
  pageContext.setAttribute("page", "pageContex");
%>
<jsp:forward page="/2.jsp">
<jsp:param value="ws" name="username"/>
<jsp:param value="123" name="password"/>
</jsp:forward>
</body>
</html>

2.jsp中的代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!--获取pageContext域中的内容  -->
<%=
/*该域对象,只在本页面有效,出了页面获取不到  */
pageContext.getAttribute("page")
%>

<!-- 获取转发中的参数 
request.getAttribute("")是保存在参数中,
 不是保存在域中
-->
<%=request.getParameter("username") %>
<%=request.getParameter("password") %>
六、九个内置对象
1.request
2.response
3.session
4.application
5.exception
6.page--表示当前servlet实例this
7.config
8.out
9.pageContext--表示当前页面域对象
 1.查看pageContext中的方法
    public void fun(PageContext pageContext) {
        //强大的pageContext可以获取任何域对象
        //从小到大
        pageContext.getRequest();
        pageContext.getSession();
        pageContext.getServletContext();


        //强大的方法(el表达式,就依赖这个方法)
        //这个方法可以搜索所有域对象,用key去取值
        //按域的大小,从小到大,进行搜索,找到为止,找到就输出对应的value
        //request  session context 这个顺序搜索
        pageContext.findAttribute("key");

    }
    2.测试域中的查找顺序
    <%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
/*一般系统方法中,需要一个int参数,一般会是常量  */
/*向pageContext域中添加一对键值对  */
/* 只要有pageContext,就能向各个域中添加值,
   参数三,表示对应域的常量 */
   pageContext.setAttribute("p", "pageContext",PageContext.PAGE_SCOPE);
   pageContext.setAttribute("p", "request",PageContext.REQUEST_SCOPE);
   pageContext.setAttribute("p", "session",PageContext.SESSION_SCOPE);
   pageContext.setAttribute("p", "appliction",PageContext.APPLICATION_SCOPE);

%>
<%=
/*从小到大找的  */
 pageContext.findAttribute("p")
%>
</body>
</html>
七、el(expression language表达式
1.定义:表达式语言,要简化jsp中java代码开发,他不是一种开发语言,而是jsp中获取数据的一种规范
2.功能
el表达式能获取存在4个作用域中的数据 
${u} 相当于 pageContext.findAttribute("u");
el获取对于null这样的数据,在页面中表现为空字符串
代码:
4.jsp:测试把对象存到域对象中是否能获取
<%@page import="com.lanou3g.Address"%>
<%@page import="com.lanou3g.User"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<!--域中保存对象,使用el表达式获取  -->
  <%
     User user = new User();
    user.setUsername("ws");
    user.setPassword("123");
    //添加地址对象
    Address address = new Address();
    address.setCity("zh");
    user.setAddress(address);

    out.print(user.getAddress());
    request.setAttribute("u", user);
  %>
  <!--相当于调用了username方法,前提是,必须有get方法  -->
  <!-- 如果我user对象中,有个属性,也是个对象 -->
 ${u.username }
 <!--javabean导航  -->
 <!--通过条用get方法获取的,直接 点使用
   -->
${u.address.city}

<!--使用中括号,[]获取值  -->
<!--使用[]要加引号(单双都行)  -->
<!--如果域中保存的是个集合,怎么获取  -->

${u["username"] }
${u['username'] }
<%-- ${u[username] } --%>

</body>
</html>
5.jsp
测试:空字符串和没有元素的集合
<%@page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<!--使用el表达式,判断empty 空值 -->
<%
   String str1 = null;
   request.setAttribute("str1", str1);

   String str2 = "";
   request.setAttribute("str2", str2);

   ArrayList list1 = new ArrayList();
   list1.add("aaaa");
   ArrayList list2 = new ArrayList();
   request.setAttribute("list1", list1);
   request.setAttribute("list2", list2);
   ArrayList list3 = null;
   request.setAttribute("list3", list3);
%>
<!--判断是否为空  只要没有值就返回true-->
${empty str1 }
${empty str2 }
<!-- 判断集合中指向空 和 不添加值,返回啥  -->
${empty list1[0] }
${empty list2}
${empty list3}
<!--支持三木运算符  -->
${empty list3 ? "我是前面的":"我是后面的" }

<br>
</body>
</html>
八、测试隐式对象可以直接在el表达式中使用
<%
   pageContext.setAttribute("p", "pageContext",PageContext.PAGE_SCOPE);
   pageContext.setAttribute("p", "request",PageContext.REQUEST_SCOPE);
   pageContext.setAttribute("p", "session",PageContext.SESSION_SCOPE);
   pageContext.setAttribute("p", "appliction",PageContext.APPLICATION_SCOPE);

%>

${pageScope.p }
${requestScope.p }
${sessionScope.p }
${applicationScope.p }
8.jsp:pageContext代表对象,使用方法
<!-- 容错性强,并且域没有改值,什么都不显示,不会显示null -->
${www }
<!--el表达式中的pageContext就真的代表对象,可以使用方法  -->

<form action="${pageContext.request.contextPath }/9.jsp" method="post"><br>
<input type="text" name="username"><br>
<input type="checkbox" name="hobby" value="唱歌">唱歌
<input type="checkbox" name="hobby" value="篮球">篮球<br>
<input type="submit"  value="提交">
</form>

9.jsp
<%
  response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");

  %>
<!--用el表达式,获取表格参数  -->
<!--就相当于调用getParameter()方法  -->
${param.username }
${paramValues.hobby[0] }
${paramValues.hobby[1] }
<!--取请求头  -->
${header["User-Agent"] }<br>
<!--取cookie中的值  -->
${cookie.JSESSIONID.value }
九、JSTL(JavaServerPages Standard Tag Library)表达式
1.jsp标准标签库
2.JSTL的作用
使用JSTL实现JSP页面中逻辑处理。如判断、循环等。
注:使用JSTL需要在JSP页面添加taglib指令 添加核心库
3.通用标签: set、 out、 remove
代码:
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
     <!-- 指令,导包 -->
    <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
 <!-- 声明一个变量,默认是放在page域中, -->
<!--scope可以选择存放在哪个域中  -->
   <c:set var="num" value="10" scope="session"></c:set>
   <!-- 直接输出到网页上, -->
   <c:out value="${num }" default="aaaa"></c:out><br>
   ${num }

   <!--删除  -->
   <c:remove var="num"/>
   ${num }

11.jsp:if choose条件标签
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <!--声明变量  -->
    <c:set var="n" value="10"></c:set>
    <!--逻辑表达式 if choose -->
    <c:if test="${n<5}">
     aaaaa
    </c:if>

    <c:if test="${n>5 }">
     bbbb
    </c:if>

    <c:choose>
        <c:when test="${n==5 }">5</c:when>
        <c:when test="${n==10 }">10</c:when>
        <c:otherwise>mm</c:otherwise>
    </c:choose>

</body>
</html>
12.jsp:循环
<%@page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
 ArrayList<String> list = new ArrayList();
list.add("aaaa");
list.add("bbbb");
list.add("cccc");
list.add("dddd");
request.setAttribute("list", list);
%>

<!-- 循环 循环增量-->
<!--itmes,代表你要遍历的容器 var表示容器中保存的对象 -->
<c:forEach items="${list }" var ="l" step="1">
${l}<br>
</c:forEach>
<%

%>

</body>
</html>
3.13.jsp:值,索引,计数,第一个元素 最后一个元素 
<%@page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
   <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
ArrayList<String>list = new ArrayList();
list.add("aaaa");
list.add("bbbb");
list.add("cccc");
list.add("dddd");
request.setAttribute("list", list);
%>
<table border="1">
<tr>
<th></th>
<th>索引</th>
<th>计数</th>
<th>第一个元素</th>
<th>最后一个元素</th>
</tr>
<c:forEach items="${list }" var="l" varStatus="vs" >
<tr>
<th>${l }</th>
<th>${vs.index }</th>
<th>${vs.count }</th>
<th>${vs.first }</th>
<th>${vs.last }</th>
</tr>
</c:forEach>
</table>

</body>
</html>
十、MVC
代码的设计模式(编写代码)
    1.Model1模式
     jsp + javaBean<jsp:useBean/>  模式

    2.Model2模式(模拟MVC模式)
    jsp(尽量写页面和展示数据) + servlet(逻辑处理) + javaBean(实体类)  模式
    M:Model(数据模型)
    V:View(视图界面)
   C:Controller(控制器)

这里写图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值