我是靠谱客的博主 典雅硬币,这篇文章主要介绍jsp入门学习,现在分享给大家,希望可以做个参考。

文章目录

      • jsp基础
        • 1、jsp入门
        • 2、JSP中java脚本
        • 3、JSP与Servlet分工案例
        • 4、JSP原理
        • 5、JSP注释
      • Cookie
        • 1、Cookie入门
        • 2、Cookie的生命
        • 3、Cookie的路径
        • 4、Cookie的域
      • HttpSession
        • Httpsession入门
          • 1、HttpSession概述
          • 2、HttpSession的作用
        • HttpSession案例介绍
          • 1、一
          • 2、二
        • HttpSeesion原理
        • session最大不活动时间
        • URL重写
      • 验证码
      • JSP指令
        • page指令
        • pageContext对象
        • include和taglibzhiling
          • 1、include
          • 2、taglib
      • JSP动作标签
      • JavaBean
        • 1、JavaBean的规范
        • 2、内省
        • 3、JSP中与JavaBean相关的标签
      • EL
        • 1、EL入门
        • 2、EL11个内置对象
        • EL函数库(由JSTL提供的)
        • EL自定义函数库
      • JSTL
        • JSTL标签库
        • `core --> c标签!`
          • `out和set`
          • `remove`
          • `url`
          • `if:对应java中if语句`
          • `choose:对应java中if/else if /else`
          • `forEach`
          • fmt(格式化库)
      • 自定义标签
        • 自定义标签入门
        • 标签体内容
        • 标签属性

jsp基础

1、jsp入门

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2、JSP中java脚本

  • <% %>:代码片段,用于定义0到N条java语句(方法内能放什么,他就能放什么)
  • <%= %>:java表达式,用于输出,用于输出一条表达式(或变量)的结果。response.getWriter().print( … );这里可以放什么,他就可以放什么
  • <%! %>:声明,用来创建类成员变量和成员方法,类中可以放什么,他就可以放什么

3、JSP与Servlet分工案例

在这里插入图片描述

4、JSP原理

在这里插入图片描述

5、JSP注释

复制代码
1
2
<%-- ... --%>
  • 当服务器把jsp编译成java文件已经忽略了注释部分!

Cookie

1、Cookie入门

在这里插入图片描述

  • response.addCookie()向浏览器保存Cookie
  • request.getCookies()获取浏览器归还的Cookie

2、Cookie的生命

  • Cookie的maxAge:Cookie的最大生命,即Cookie可以保存的最大时长,以秒为单位
    • cookie.setMaxAge(60)表示这个Cookie会被浏览器保存到硬盘60秒
  • maxAge>0:浏览器会把Cookie保存到客户机的硬盘上,有效时间为maxAge的值决定
  • maxAge<0:Cookie只会在浏览器的内存中存在,当用户关闭浏览器时,浏览器进程结束,同时Cookie也就被删除了;
  • maxAge=0:浏览器会马上删除这个Cookie

3、Cookie的路径

  • Cookie的path,能把Cookie带回服务器的Cookie的path,相当于,Cookie当前的访问路径包含Cookie的默认path,就可以在访问路径时将Cookie带回服务器

在这里插入图片描述

4、Cookie的域

在这里插入图片描述

HttpSession

Httpsession入门

1、HttpSession概述
  • HttpSession是由JavaWeb提供的,用来会话跟踪的类,session是服务器端的对象,保存在服务器端!
  • HttpSession是Servlet的三大域值对象之一(request、session、application(ServletContext))
  • HttpSession底层依赖Cookie、或是URL重写!、
2、HttpSession的作用

在这里插入图片描述

  • HttpSession session = request.getSession();

HttpSession案例介绍

1、一
  • a.jsp
复制代码
1
2
3
4
5
<h1>保存Session</h1> <% session.setAttribute("aaa", "AAA"); %>
  • b.jsp
复制代码
1
2
3
4
5
6
<h1>获取Session</h1> <% String s = (String)session.getAttribute("aaa"); %> <%= s %>
2、二

在这里插入图片描述

在这里插入图片描述

  • login.jsp
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<h1>登录</h1> <% /* 读取名为uname的Cookie 如果为空显示:"" 如果不为空显示Cookie的值 */ String uname=""; Cookie[] cs = request.getCookies(); //获取reques的所有Cookie if(cs != null){ //如果存在Cookie for(Cookie c : cs){ // 遍历Cookie if("uname".equalsIgnoreCase(c.getName())){ // 查找名为uname的Cookie uname = c.getValue();// 获取Cookie的值 } } } %> <% String message = ""; String msg = (String)request.getAttribute("msg"); if(msg != null){ message = msg; } %> <font color="red"><b><%=message %></b></font> <form action="/JspWebS/LoginServlet" method="post"> <%--把cookie中的用户名显示到用户文本框中 --%> 用户名: <input type="text" name="userName" value="<%=uname%>"/><br/> 密 码: <input type="password" name="password"/><br/> <input type="submit" value="提交"/> </form>
  • LoginServlet
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
public class LoginServlet extends HttpServlet { @Override public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /** * 获取表单数据 */ // 处理中文问题 request.setCharacterEncoding("UTF-8"); // 获取 String username = (String)request.getParameter("userName"); String password = (String)request.getParameter("password"); /** * 校检用户名和密码是否正确 */ if(!"admin".equalsIgnoreCase(username)) { // 登录成功 /** * 把用户名保存到Cookie,发送客服端浏览器 * 当再次打开login.jsp时,login.jsp会读取request中的Cookie,把它显示到用户文本框中 */ Cookie cookie = new Cookie("uname" , username); cookie.setMaxAge(60*60); //设置cookie生命时长为1hour response.addCookie(cookie); //保存cookie /** * 如果成功 保存到session中 * 冲定向到succ1.jsp */ HttpSession session = request.getSession(); // 获取session session.setAttribute("username", username); // 向session域中保存用户名 response.sendRedirect("/JspWebS/session1/succ1.jsp"); }else {// 登录失败 /** * 如果失败 保存错误信息到request域中 * 转发到login.jsp中 */ request.setAttribute("msg", "用户名或密码错误");// RequestDispatcher rs = request.getRequestDispatcher("/session1/login.jsp"); //转发器 rs.forward(request, response); // 转发 } }
  • succ1.jsp
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
<% String username = (String)session.getAttribute("username"); if(username == null){ /* * 向request中保存错误信息,转发到login.jsp中 */ request.setAttribute("msg", "您还没有登录,请不要冒充领导!"); request.getRequestDispatcher("/session1/login.jsp").forward(request, response); return; } %> 欢迎欢迎,热烈欢迎,欢迎<font color="green"><b><%=username %></b></font>领导指导工作

HttpSeesion原理

在这里插入图片描述

session最大不活动时间

在这里插入图片描述

URL重写

在这里插入图片描述

验证码

在这里插入图片描述

JSP指令

page指令

  • 语法:<%@ page language=“java” … %>

  • pageEncoding:他指定当前jsp页面编码,只要不说谎,就不会有乱码,在服务器要把jsp编译成.java时需要使用PageEncoding

  • contentType:他表示添加一个响应头,Context-Type,等同于response.setContentType(“text/html;caharset=utf-8”)

  • 如果两个属性只提供了一个,那么另一个的默认值已为设置的那一个

  • 如果两个属性都没有设置,那么默认值为iso

  • import : 导包! 可以出现多次

  • errorPage:当前页面如果抛出异常,那么要转发到哪一个页面,由errorPage来指定

  • isErrorPage:它指定当前页面是否为处理错误的页面!当前属性为true时,这个页面会设置状态码为500,而且这个页面可以使用9大内置对象中的exception;

  • 复制代码
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <error-page> <error-code>404</error-code> <location>/error/errorPage.jsp</location> </error-page> <error-page> <error-code>500</error-code> <location>/error/errorPage.jsp</location> </error-page> <error-page> <exception-type>java.lang.RuntimeException</exception-type> <location>/index.jsp</location> </error-page>
  • autoFlush:指定jsp的输出流缓冲区满时,是否自动刷新,默认为true,如果为false,那么缓冲区满时抛出异常!

  • buffer:指定缓冲区大小,默认为8kb,通常不需要修改!

  • isELIgnored:是否忽略EL表达式,默认为false,不忽略,即支持!

  • 没啥用的属性:

    • language:指定当前jsp编译后的语言类型,默认值为java
    • info:信息!
    • isThreadSafe:当前jsp是否支持并发访问
    • session:当前页面是否支持session,如果为false,那么当前页面就没有session这个内置对象了
    • extend:让jsp生成的servlet去继承属性指定的类

pageContext对象

在这里插入图片描述

  • 域对象功能
  • 代理其他域对象功能
  • 获取其他内置对象

在这里插入图片描述

在这里插入图片描述

include和taglibzhiling

1、include
  • 静态包含
    • 与RequestDispatcher的include()的功能很相式
    • <%@include file="" %>他是在jsp编译成java文件时完成的,他们共同生成一个java(就是一个servlet)文件,然后在生成一个*.class文件 (运行前执行)(两个jsp文件)
    • 与RequestDispatcher的include() ,包含和被包含是两个servlet,即有两个*.class,他们只是把相应的内容在运行时合并!(运行时) (<jsp:include >)(动态包含)
    • 作用:把页面分解了,使用包含的方式组合在一起,这样一个页面中不变的部分,就是一个独立的jsp,而我们只需要处理变化的页面
2、taglib
  • 导入标签库
    • 两个属性:
      • prefix:指定标签库在本页面中的前缀,有开发人员自己创建
      • url:指定标签库的位置
      • <%@taglib prefix=“x” url=”“/struts-tags” %> 前缀的用法<x:text >

JSP动作标签

在这里插入图片描述

JavaBean

1、JavaBean的规范

  • 必须有默认的构造器
  • 提供set/get方法,如果只有get方法,那么这个属性只是只读属性
  • 属性:有get/set方法的成员,还可以没有成员,只有get/set方法,属性名称有get/set方法来决定,而不是成员名称!
  • 方法名称满足一定的规范,那么他就是属性,boolean类型的属性值,它的读方法可以是is开头,也可以是get开头!

2、内省

  • 内省 –> BeanInfo –> 属性描述符 –> 属性的get/set对应的Method –> 可以反射了!

  • commos-beanutils,它是依赖内省完成的!
    在这里插入图片描述

3、JSP中与JavaBean相关的标签

在这里插入图片描述

EL

1、EL入门

  • EL是jsp内置的表达式语言

    • jsp2.0开始,不让使用java脚本,而使用EL表达式和动态标签来代替java脚本
    • EL替代的是<%= … %>,也就是说EL只能做输出
  • EL表达式来读取四大域

    • ${xxx},全域查找xxx属性,如果不存在输出空字符串,而不是null

    • 指定域获取属性

    • 复制代码
      1
      2
      ${pageScope.xxx}、${requestScope.xxx}、${sessionScope.xxx}、${applicationScope.xxx}

2、EL11个内置对象

在这里插入图片描述

  • param:对应参数,它是一个Map,其中Key参数名,vaule是参数值,适用于单值参数

  • paramValues:对应参数,它是一个Map,其中Key参数名,vaule是参数值,适用于多值参数

  • 复制代码
    1
    2
    3
    4
    5
    6
    7
    8
    <%-- map.key这是EL的语法 map['key']也可以操作map --%> ${param.username } </br> ${paramValues.hobby[0] }</br> ${paramValues.hobby[1] }</br>
  • header:对应请求头,他是一个Map,其中Key表示头名称,value是单个头值,适用于单值请求头

  • headerValues:对应请求头,他是一个Map,其中Key表示头名称,value是多个头值,适用于多值请求头

  • 复制代码
    1
    2
    ${header ['User-Agent'] }
  • initParam:获取<context-param>内的参数

  • 复制代码
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <context-param> <param-name>xxx</param-name> <param-value>XXX</param-value> </context-param> <context-param> <param-name>yyy</param-name> <param-value>YYY</param-value> </context-param>
  • 复制代码
    1
    2
    ${initParam.xxx}
  • cookie:Map<String , Cookie>类型,其中key是cookie的name,value是Cookie对象;

  • 复制代码
    1
    2
    ${cookie.username.value}
  • 复制代码
    1
    2
    ${cookie.JSESSIONID.value }
  • pageContext:他是PageContext类型!

  • 复制代码
    1
    2
    ${pageContext.request.contextPath }
  • 复制代码
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <body> ${pageContext.request.scheme }</br> ${pageContext.request.contextPath } </br> <a href="${pageContext.request.contextPath }/el/b.jsp">点击这里</a> <form action="${pageContext.request.contextPath }/cookie/a.jsp" method="post"> <input type="submit" value="xxx"/> </form> </body>

EL函数库(由JSTL提供的)

在这里插入图片描述

EL自定义函数库

在这里插入图片描述

JSTL

JSTL标签库

在这里插入图片描述

  • core --> c标签!

    • out和set
      • 输出

        • value:可以是字符常量,也可以是EL表达式

        • default:当要输出的内容为null,会输出default指定的值

        • escapeXml:默认值为true,表示转义

        • 复制代码
          1
          2
          <c:out value="${code }"></c:out></br>
      • 设置

        • var:变量名

        • Value:变量值,可以使EL表达式

        • scope:域,默认为page,可选值:page、request、session、application

        • 复制代码
          1
          2
          3
          <c:set var="it" value="itcast" scope="request"></c:set> <c:out value="${it }"></c:out>
  • remove
    • :删除域变量

      • var:变量名

      • scope:如果不给出scope,表示删除所有域中的该名称的变量,如果指定了域,那么只删除该域中的变量

  • url
      • value:指定一个路径,他会在路径前面自动添加项目名

        • 执行结果:/JspWebJSTL/out/a.jsp
      • 字标签:,用来给url后面添加参数

        • 复制代码
          1
          2
          3
          4
          <c:url value="/out/a.jsp"> <c:param name="username" value="张三"/><%-- 可以对参数进行url编码--%> </c:url>
      复制代码
      1
      2
    • 执行结果:/JspWebJSTL/out/a.jsp?username=%SDFG%ASDFGHJ%ASDFG

    • var:指定变量名,一旦添加了这个属性,那么url标签就不会输出到页面,而是把生成的url保存到域中

      • scope:它与var一起使用,用来保存到指定的域中
  • if:对应java中if语句
    • - … 当test值为true 是才执行标签体内容
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hUAdb2nC-1615722428374)(jsp.assets/image-20200527174116541.png)]
  • choose:对应java中if/else if /else
    • 复制代码
      1
      2
      3
      4
      5
      6
      7
      8
      <c:choose> <c:when test="">...</c:when> <c:when test="">...</c:when> <c:when test="">...</c:when> ... <c:otherwise>...</c:otherwise> </c:choose>
    复制代码
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    - ```java //等同于 if(...){ }else if(...){ }else if(...){ }else if(...){ }else{ }
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JPnPLuMo-1615722428375)(jsp.assets/image-20200527174405976.png)]
  • forEach
    • 计数方式

      • 属性

        • var:循环变量
        • begin:设置循环变量从几开始
        • end:循环变量到几结束
      • step:设置步长,等同于java中的i++,i+=2 ,step默认为1

        • 复制代码
          1
          2
          3
          4
          <c:forEach var="i" begin="1" end="10"> ${i} </c:forEach>
      复制代码
      1
      2
      3
      4
      for(int i = 1 ; i <= 10 ; i++){ System.out.println(i); }
      • 用来输出数组、集合!

        • 属性

          • items:指定要循环谁,它可以是一个数组或一个集合
          • var:把数组或集合中的每个元素赋值给var指定的变量
        • 复制代码
          1
          2
          3
          4
          <c:forEach items="${str }" var="strs"> ${strs}</br> </c:forEach>
        • 复制代码
          1
          2
          3
          4
          for(String strs : str){ System.out.println(strs); }
    • 循环状态

      • 可以使用varStatus来创建循环状态变量

      • 循环状态变量的属性

        • count:循环元素的个数
        • index:循环元素的下标
        • first:是否为第一个元素
        • last:是否为最后一个元素
        • current:当前元素
      • 复制代码
        1
        2
        3
        4
        <c:forEach items="${list }" var="ele" varStatus="vs" > ${vs.index } ${vs.count } ${vs.first } ${vs.last } ${vs.current }</br> </c:forEach>
  • fmt(格式化库)
    • 格式化日期

      • 复制代码
        1
        2
        <fmt:formatDate value="" pattern=""></fmt:formateDate>
        • value:指定一个Date类型的变量
        • pattern:用来指定输出的模板!例如:yyyy:MM:dd HH:mm:ss:SSS
    • 格式化数字

      • 复制代码
        1
        2
        <fmt:formatNumber value="${num1 }" pattern="0.00"></fmt:formatNumber>
      • 保留小数点后两位,他会四舍五入,如果不足两位,以0补位

      • 复制代码
        1
        2
        <fmt:formatNumber value="${num1 }" pattern="#.##"></fmt:formatNumber>
      • 保留小数点后两位,他会四舍五入,如果不足两位,不补位

自定义标签

自定义标签入门

  • 步骤:

    • 标签处理类(标签也是一个对象,那么就需要先有类)
    • tld文件,它是一个xml文件
    • 页面中使用<%@ taglib%>来指定文件的位置
  • 标签处理类

    • 在这里插入图片描述
  • 配置tld文件

    • 在这里插入图片描述
  • 页面中指定tld文件位置
    -在这里插入图片描述

标签体内容

  • empty:无标签体内容

  • JSP:jsp2.0已经不在支持这个类型!表示标签体内容可以是:java脚本,可以是标签,可以是EL表达式

  • scriptless:EL表达式,也可以是其他标签,也可以是字符串

  • tagdependent:标签体内容不会被执行,而是直接赋值标签处理类!

  • 复制代码
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class MyTag3 extends SimpleTagSupport{ @Override public void doTag() throws JspException, IOException { Writer out = this.getJspContext().getOut();// 获取当前jsp页面的输出流 out.write("*****************</br>"); this.getJspBody().invoke(out);// 执行标签体的内容,把结果写在指定的流中,即页面上 out.write("</br>*****************"); } }
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#### 不执行标签下面的内容 - 在标签处理类中的doTag()中使用SkipPageException()来结束 - Tomcat会调用标签处理类的doTag(),然后Tomcat会得到SkipPageException - ```java public class MyTag4 extends SimpleTagSupport { @Override public void doTag() throws JspException, IOException { this.getJspContext().getOut().print("只能看的见我,后面的都看不到!"); throw new SkipPageException(); // 抛出这个异常后,本标签后面的内容,将看不到! } }

标签属性

  • 步骤:

    • 给标签处理类添加属性

      • 为标签处理类添加属性!属性至少需要一个set方法,这个set方法会在doTag()之前被Tomcat执行!所在的doTag()中就可以使用属性。

      • 复制代码
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        15
        16
        17
        18
        19
        20
        public class MyTag5 extends SimpleTagSupport { private boolean test; /** * 这个方法会由tomcat调用,并且在doTag()之前 * @param test */ public void setTest(boolean test) { this.test = test; } @Override public void doTag() throws JspException, IOException { if(test) { /** * 执行标签体 */ this.getJspBody().invoke(null);//如果传递的输出流为null,表示使用的就是当前页面的out! } } }
    • 在tld文件中对属性进行配置

      • 复制代码
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        <tag> <name>mytag5</name> <tag-class>cn.itcast.tag.MyTag5</tag-class> <body-content>scriptless</body-content> <attribute> <name>test</name> <!-- 指定属性名 --> <required>true</required> <!-- 指定属性是否为必须的 --> <rtexprvalue>true</rtexprvalue> <!-- 指定属性是否可以使用EL --> </attribute> </tag>

      /**
      * 这个方法会由tomcat调用,并且在doTag()之前
      * @param test
      /
      public void setTest(boolean test) {
      this.test = test;
      }
      @Override
      public void doTag() throws JspException, IOException {
      if(test) {
      /
      *
      * 执行标签体
      */
      this.getJspBody().invoke(null);//如果传递的输出流为null,表示使用的就是当前页面的out!
      }
      }
      }

      复制代码
      1
      2
      3
      4
    • 在tld文件中对属性进行配置

      • 复制代码
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        <tag> <name>mytag5</name> <tag-class>cn.itcast.tag.MyTag5</tag-class> <body-content>scriptless</body-content> <attribute> <name>test</name> <!-- 指定属性名 --> <required>true</required> <!-- 指定属性是否为必须的 --> <rtexprvalue>true</rtexprvalue> <!-- 指定属性是否可以使用EL --> </attribute> </tag>

最后

以上就是典雅硬币最近收集整理的关于jsp入门学习的全部内容,更多相关jsp入门学习内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部