jsp----2021-08-24


Java Server Pages
jsp是(Java Server Pages):java服务器页面。基本上告别html,写jsp。jsp书写在html代码中。
是sun公司设计的一种动态网页技术。

模板:

<%--
  Created by IntelliJ IDEA.
  User: name
  Date: ${DATA}
  Time: ${TIME}
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<html>
  <head>
    <base href="<%=basePath%>">
    <title>$Title$</title>
  </head>
  <body>
  $END$
  </body>
</html>

jsp三种脚本

<%! %>声明脚本。 只能书写声明语句。并且声明的成员变量,成员方法 ,内部类。
<%= %> 输出: 替代out.print();
<% %> java代码片段。 会被翻译servcie方法中。在java代码片段中,能书写的内容,参考,方法里面语句。并且多个 java代码片段,可以组合一起去使用

<html>
<head>
    <base href="<%=basePath%>">
    <title>$Title$</title>
</head>
<body>

<%--静态引入--%>
<%@include file="logo.jsp" %>

hello web

<%--声明脚本,只能书写声明语句; 并且声明的成员变量,成员方法,内部类--%>
<%!
    String name = "Hello jsp";

    public static void test() {
        System.out.println("HelloWorld");
    }

    static {
        test();
    }
%>

<%--表达式,输出表达式的内容到界面,翻译成out.print()--%>
<%=name%>
<br>

<%--小脚本,java代码片段--%>
<%
    int a = 10;
    for (int i = 0; i < 10; i++) {
        out.print(i);
    }
%>
</body>
</html>

logo.jsp:

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

<h1>
    这是logo界面
</h1>

jsp注释

jsp集合了java,html,在jsp中可以书写html注释,java注释,还可以嵌入jsp自己的注释。

<%--jsp注释  既可以注释java内容,也可以注释html内容--%>
<!--html注释 可以在浏览器中看到-->

java注释:只能修饰java代码。单行: // 多行: /* / 文档: /* */

jsp指令:page 和 include

写法:
<%@ 指令名 key=value key=value %>.

page:

idea 默认
<%@ page contentType=“text/html;charset=UTF-8” language=“java” %>

在这里插入图片描述
在这里插入图片描述
include:静态引入jsp

<%–静态引入–%>
<%@include file=“logo.jsp” %>

taglib:
taglib指令主要是在页面上引入其他已经定义好的标签或者函数。
在taglib指令中的属性:
uri:是当前标签对应的Java代码封装之后的名称空间,唯一
prefix:它是当前在页面上可以使用的标签的前缀。

jsp作用域:

jsp作用域有4个,分别是(范围从小到大):
page(pageContext),范围是当前页面
request(request),范围是一次请求(一次请求可以包含多个界面)
session(session),范围是一次会话(一次会话可以包含多次请求)
application(application),范围是整个应用(一个应用包含多个会话)
…………………………………………

请求转发与重定向

    //请求转发--把请求继续交给服务器的另一个资源
    //服务端的行为,客户端不知情,客户端还是只发送了一次请求,客户端浏览器地址没有变化
    request.getRequestDispatcher("third.jsp").forward(request,response);

    //重定向--让客户端重新发送请求到服务器上的另一个资源
    //客户端的行为,发送了两次请求,客户端的浏览器地址栏发生变化
    response.sendRedirect("third.jsp");

index.jsp:

<html>
<head>
    <base href="<%=basePath%>">
    <title>$Title$</title>
</head>
<body>
<%
    pageContext.setAttribute("name", "zhangsan");//往page作用域中存入数据(大小仅限于当前界面)
    out.print(pageContext.getAttribute("name"));//获取数据,根据key获取value
    out.print(pageContext.findAttribute("name"));//从page,request,session,application依次查找

%>

<a href="newPage.jsp">跳转</a>
</body>
</html>

newPage.jsp:

<html>
<head>
    <base href="<%=basePath%>">
    <title>$Title$</title>
</head>
<body>
<%
    request.setAttribute("gender","女");//向request作用域中存入数据
    session.setAttribute("user","Rose");//向session作用域中存入数据
    application.setAttribute("name","Alex");//向application作用域中存入数据

    String gen =(String)request.getAttribute("gender");
    Object name = pageContext.getAttribute("name");
    out.print("request:" + gen);//女
    out.print("page:" + name); //null

    //请求转发--把请求继续交给服务器的另一个资源
    //服务端的行为,客户端不知情,客户端还是只发送了一次请求,客户端浏览器地址没有变化
//    request.getRequestDispatcher("third.jsp").forward(request,response);

    //重定向--让客户端重新发送请求到服务器上的另一个资源
    //客户端的行为,发送了两次请求,客户端的浏览器地址栏发生变化
    response.sendRedirect("third.jsp");


%>
</body>
</html>

third.jsp:

<html>
<head>
    <base href="<%=basePath%>">
    <title>third</title>
</head>
<body>
<%
    String gen =(String)request.getAttribute("gender");
    out.print("request:" + gen);//女
    out.print("<br>");

    String user = (String)session.getAttribute("user");
    out.print("session:" + user);
    out.print("<br>");

    String name = (String)application.getAttribute("name");
    out.print("application:" + name);
%>

</body>
</html>

jsp内置对象

这9个内置对象,可以在JSP翻译之后的对应的Java源代码的service方法中找到:
·HttpServletRequest request 请求—容器对象
·HttpServletResponse response 响应
·HttpSession session session 容器对象(会话内使用)
·ServletContext application 表示当前项目对象(全局的)—容器对象
·ServletConfig config 专门获取当前这个Servlet(jsp)的配置信息
·Object page = this 它表示的是当前这个JSP页面对象(翻译之后就是一个Servlet程序,这个page本身就是一个Servlet,但是由于在翻译之后赋值给了Object类型,导致不能使用使用Servlet中的功能)。后期把它当作(jsp)第四个容器使用。------不建议使用
·PageContext pageContext 它表示的是当前jsp页面的上下文。它的主要功能之一就是可以获取到JSP页面上的其他八个内置对象。
·Throwable exception 主要是表示当前JSP页面上的异常信息的----必须该页面标记了是错误页面。 通过 exception.getMessage();
·JspWriter out 它相当于我们在Servlet中使用的response.getWrite();

jsp标签:

jsp页面可以嵌入java代码实现业务逻辑。但是后期开发中很少在jsp中书写java代码。在jsp中提供了一些内置的标签,可以帮助我们减少java代码。直接书写,不需要导入任何东西。
jstl 本身是一个标签库–jsp
struts2—框架。里面提供了标签库–jsp

核心思想:尽量在jsp中少写java代码,有很技术替代java. 例如:el jstl jsp

jsp:useBean

javabean对象在java中如何描述:
属性私有,并且对每个属性,有getter setter 方法。
要求需要无参的构造方法,并且是public
User user =new User();
user.setUserName;
user.getUserName;

jsp:useBean
jsp:setProperty
jsp:getProperty
它们三个合起来可以操作一个Java对象,并且可以给这个对象的属性设置值或者取出某个对象的属性值。

<%--相当于
    User user = new User();
    request.setAttribute("user",user);
--%>
<jsp:useBean id="user" class="com.hisoft.javabean.User" scope="request"/>

<%--相当于
    user.setUsername("李四");
--%>
<jsp:setProperty name="user" property="username" value="李四"/>

<%--相当于
    out.print(user.getUsername());
--%>
<jsp:getProperty name="user" property="username"/>

jsp:include标签—动态引入其他页面

<%--动态引入其他界面,tomcat会把页面都翻译成java文件--%>
<jsp:include page="logo.jsp"/>

jsp:forward标签

<%--相当于
    request.getRequestDispatcher("third.jsp").forward(request,response);
--%>
<jsp:forward page="third.jsp"></jsp:forward>

jsp获取sql

<%
    UserDao userDao = new UserDao();
    List list = userDao.executeQueryForList();
    for (int i = 0; i < list.size(); i++) {
        User user = (User)list.get(i);
        out.print(user.getUsername()+user.getId()+user.getPassword()+user.getBirthday());
    }
%>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

单眼皮女孩i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值