javaweb之jsp

177 阅读2分钟

jsp

什么是jsp

在很多动态网页中,绝大部分内容都是固定不变了,只有局部内容需要动态产生和改变,为了弥补Servlet的缺陷,SUN公司在Servlet的基础上推出了jsp。

jsp的本质就是一个Servlet,运行时会自动编译为java文件

jsp脚本

声明脚本

声明脚本,用于声明全局变量/方法

声明的全局变量/方法,会被定义在当前将被生成的Servlet类的全局变量里,方法之外类之内

<%!
String name;
%>

脚本段

在脚本段中书写java代码,且代码生成在service方法里

 <%
 //在这里写java代码,这里的java代码会自动生成在Servlet的service方法里
 %>

表达式脚本

把表达式进行运算,并把结果打印到页面上

<%=
21+32
%>

jsp指令

<%@ 指令名称 %>

page指令

pageEncoding 编码方式

language 目前仅支持java

import 导入jar包

errorPage 页面报错后,指定报错页面

isErrorPage 是否使用错误页面

<%@ language="java" %>

include

把指定文件中的信息包含到当前页面中

<%@include file="jsp文件路径" %>

tablib

用于引入,其他标签库

<%@taglib prefix="前缀" url="标签库" %>

jsp内置标签

jsp:useBean

useBean 用于代替页面里使用对象

 <jsp:useBean id="" class="类路径" scope="request"></jsp:useBean>

jsp:setProperty

给对象属性赋值

<jsp:setProperty name="对象名" property="属性名" value="属性值"></jsp:setProperty>

getProperty

获取对象属性

<jsp:getPeroperty name="对象名" property="属性名" value="属性值"></jsp:getPeroperty>

forWard

请求转发跳转

<jsp:forward page="/index.jsp" ></jsp:forward>

element(不常用)

用于在jsp写html标签

<jsp:element name="a" >
</jsp:element>

attribute (不常用)

设置元素的属性值

<jsp:element name="a">
  <jsp:attribute name="href">http://www.baidu.com</jsp:attribute>
</jsp:element>

范围对象

范围对象一般是是用于一定范围内的数据共享

HttpSerletRequest 请求

HttpSession 会话对象

ServletContext 上下文对象

Session

会话对象,一次会话,多次请求,通过session在请求之间共享数据。

public class SessionDemo extends  HttpServlet{
    public void doGet(HttpServletRequest req,HttpServletResponse res){
       dopost(req,res);
    }
    public void dopost(HttpServletRequest req,HttpServletResponse res){
        HttpSession session=req.getSession();
        session.setAttribute("属性名","属性值");
        session.getAttribute("属性名");
    }
} 

ServletContext

上下文对象,只要程序运行就在程序中

public class contextDemo extends HttpServlets{
    public void doGet(HttpServletRequest req,HttpServletResponse res){
       dopost(req,res);
    }
    public void dopost(HttpServletRequest req,HttpServletResponse res){
        //直接获取
        getServletCoontext()
     //通过request获取
    req.getServletContext()
    //通过session获取
    req.getSession().getServletContext()
    
    //属性值设置和获取

     context.setAttribute("属性名","属性值");
     context-getAttrbibute("属性名");
    }
    
}

jsp九大内置对象

request 请求对象

response 响应对象

session 会话对象

pageContext 页面上下文对象,进行当前页面数据共享

application 这个application就是ServletContext

config 这个是ServletConfig Servlet的配置对象

out 输出流 == response.getWriter().writer(String)

page 当前类对象

exception 异常对象(只有在page指令isErrorPage为true时才可以使用)

EL表达式

表达式语言

语法:${} 作用就是代表输出标识符所代表的值

使用${}来进行输出值

el表达式里还支持使用运算符:比如关系运算符,三目运算符

 <!-- 替换表达式 -->
 ${21+32}
 <!-- 获取共享数据 -->
 ${requestScope.属性名}
 <!-- 获取集合中的数据(list表达式获取集合中的数据必须将集合存储在范围对象内) -->
 <% List list=new ArrayList(); list.add(1);list.add(2);request.setAttribute("list",list);%>
${list[1]}

如果el表达式不支持的话可以尝试加入page指令isElignored=false

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>

EL表达式内置对象

requestScope 请求对象

sessionScope 会话对象

applicationScope 上下文对象

pageScope 当前页面上下文对象

param 参数对象

JSTL

jstl是jsp的标签库

jstl一般是与el表达式配合使用,所以需要设置page 指令 isELIgnored="false" maven配置

使用jstl需要以这样的方式导包

 <dependency>
            <groupId>org.glassfish.web</groupId>
            <artifactId>jstl-impl</artifactId>
            <version>1.2</version>
            <exclusions>
                <exclusion>
                    <groupId>javax.servlet</groupId>
                    <artifactId>servlet-api</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>javax.servlet.jsp</groupId>
                    <artifactId>jsp-api</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>javax.servlet.jsp.jstl</groupId>
                    <artifactId>jstl-api</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

jstl核心标签

< c:out >

输出标签,相当与<%= %>

属性 value(必须) 输出的值

  default(可有) 默认输出

  escapeXml(可有) 是否转换特殊字符(值为true/false)
<c:out value="哈哈哈"></c:out>

<c:set>

用于定义变量或者属性的名称

属性 var 属性/变量名称

 value 值

 scope(可选,默认为page) 范围变量
<c:set var="names" value="狱中" scope="page"></c:set>

<c:out value="${names}"></c:out>

<c:if>

用于条件判断 属性 test="判断语句"

<c:if test="${21>20}">成年了</c:if>

<c:choose>

选择标签,相当于java中的switch语句,通常配合<c:when></c:when>(相当于switch的case)和 <c:otherwise></c:otherwise>(相当于switch的default)使用

<c:choose>
    <c:when test="${a < 20}">大于</c:when>
    <c:when test="${a>18}">小于</c:when>
    <c:otherwise>没有这个选项</c:otherwise>
</c:choose>

<c:forEach>

遍历标签

属性: items 要被循环的信息可以是数组,java集合等

var 当前被遍历对象的别名

begin 起始下标

end 结束洗标

step 每次迭代的步长
<c:forEach begin="0"  end="10" step="2" var="num" >${num}</c:forEach>

<c:forToken>

截取字符串

属性 items 目标字符串

dalims 以x切割

var 切割之后字符串的别名

<c:forTokens items="112哈哈哈2哈哈哈" delims="2" var="str">${str}</c:forTokens>

<c:remove>

删除属性/变量

 属性

   varname 要删除的属性名/变量名

   scope 要删除的作用域,默认是page

<c:remove varname="name" scope="application"></c:remove>

<c:import>

引入标签,用于导入动态或者静态文件

属性: 
  url="文件路径"
  
  charEncoding="utf-8" 引入文件的字符编码

   context="names" 使用相对路径访问context资源时,context用来指定这个资源的名称

   scope 范围变量

   var 存储所引入文本的变量
<c:import var="data" url="http://www.baidu.com" />
<c:out value="${data}" />