JSP学习笔记:简介,内置对象,JavaBean

一、jsp简介

1、jsp三大指令

page指令:<%@page 属性=”” %>,位于jsp页面顶端,可以有多个

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

taglib指令:标签库

include
include指令:<%@include file="date.jsp"%>
include动作:<jsp:include page="url" flush="true|false"/>

page:要包含的页面,
flush:被包含的页面是否从缓冲区读取

include指令与include动作的区别:
diff_between_includeCommand_includeAction

forward动作<jsp: forward page="url"/>
等同于:request.getRequestDispatcher("/url").forward(request,response);

param动作<jsp:param name="参数名" value="参数值">
常与一起使用,作为其的子标签:

<jsp:forward page="user.jsp">
    <%--用<jsp:param "></jsp:param>添加参数--%>
    <jsp:param name="email" value="11111111@163.com"></jsp:param>
</jsp:forward>
2、jsp注释
  • html的注释
  • jsp的注释
    <%– jsp注释 –>(客户端不可见)
  • jsp脚本注释:
    //单行
    /* */ 多行
3、jsp脚本
4、jsp声明变量或方法
5、jsp表达式

<%=表达式 %> ps:不可;分号结束

6、jsp页面的生命周期

jsp_life_cycle.png

二、jsp内置对象

* 九大内置对象:*out,request,response,session,application,Page,pageContext,exception,config

out


    <%
        out.println("<h2>静夜思</h2>");
        out.println("床前明月光<br>");
        out.println("疑是地上霜<br>");
        out.flush();
        /*out.clear();会抛出异常*/
        out.clearBuffer();//这里不会抛出异常
        out.println("举头望明月<br>");
        out.println("低头思故乡<br>");
    %>

    缓冲区大小:<%= out.getBufferSize()%>byte<br>
    缓冲区剩余大小:<%= out.getRemaining()%>byte<br>
    是否自动清空缓冲区:<%= out.isAutoFlush()%><br>

request


    <%
        request.setCharacterEncoding("utf-8");//解决post中文乱码问题,但无法解决getget解决需要直接Tomcat配置文件
        request.setAttribute("password","123456");//设置属性密码
    %>
    用户名:<%= request.getParameter("username")%><br>
    爱好:
    <%
        if(request.getParameterValues("favorite") != null){  //这里需要判断为不为空,jsp这里不能将String数组看为Boolean
            String[] favorites = request.getParameterValues("favorite");
            for (int i = 0; i < favorites.length; i++) {
                out.println(favorites[i] + "&nbsp;&nbsp;&nbsp;");
            }
        }
        String realPath = request.getRealPath("requset.jsp");%><br>

    密码:
    <%=request.getAttribute("password")%><br>

    请求体的MIME类型:
    <%=request.getContentType()%><br>

    协议类型和版本号:
    <%=request.getProtocol()%><br>

    服务器主机名:
    <%=request.getServerName()%><br>

    服务器端口号:
    <%=request.getServerPort()%><br>

    请求文件长度:
    <%=request.getContentLength()%><br>

    请求的客户端地址:
    <%=request.getRemoteAddr()%><<br>

    请求的真实路径:
    <%=request.getRealPath("requset.jsp")%><br>

    请求的上下文路径:
    <%=request.getContextPath()%>

response


    <%
        response.setContentType("text/html;charset=utf-8");
        out.println("<h1>response内置对象</h1>");
        out.println("<hr>");
        //out.flush();
        /* 因为getWrite获得的输出流对象会先于内置对象out输出,
        所以要先清空缓冲区,使out强制输出,否则结果会是先输出outer
        再输出out*/

        PrintWriter outer = response.getWriter();
        outer.println("大家好,我是response生成的输出流outer");
    //  response.sendRedirect("login.jsp");//重定向
    //  response.sendRedirect("request.jsp");
        request.getRequestDispatcher("request.jsp").forward(request,response);//转发
    %>

请求转发和请求重定向的区别:

redirectAndTransmit.PNG

session
HttpSession的实例,周期:在第一个jsp页面被加载时自动创建,即浏览器连接到服务器开始,关闭浏览器离开这个服务器结束,在服务器的几个页面之间切换,服务器应当知道这是一个客户,就可以用session对象


    <%
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年mm月dd日 HH:mm:ss");
        Date d = new Date(session.getCreationTime());
        session.setAttribute("username","pinnuli");
        session.setAttribute("password","123456");
        session.setAttribute("age",20);
    //  session.setMaxInactiveInterval(10);

    //设置session最大生成期限,单位秒,也可在web.xml中设置session-timeout

    %>
    Session创建时间:
    <%=sdf.format(d)%><br>

    Session的ID:
    <%=session.getId()%><br>

    Session中获取属性值:
    <%=session.getAttribute("username")%><br>

    Session保存的属性数组:
    <%
        String[] names = session.getValueNames();
        for(int i=0; i<names.length; i++){
            out.println(names[i] + "&nbsp;&nbsp;");
        }
    //        session.invalidate();//销毁当前会话,每次刷新一次页面就会新建一个session
    %><br>
    <%--测试不同页面是否同一个session--%>
    <a href="session_page2.jsp">跳转到session_page2</a>

application
实现用户间数据的共享,可存放全局边变量,相当于java的静态变量


    <%
        application.setAttribute("city","广州");
        application.setAttribute("postcode","510000");
        application.setAttribute("email","guangzhou@163.com");
    %>
    所在城市:<%=application.getAttribute("city")%><br>
    所有属性:
    <%
        Enumeration attributes = application.getAttributeNames();
        while (attributes.hasMoreElements()){
            out.println(attributes.nextElement() + "&nbsp;&nbsp;");
        }
    %><br>

    jsp(serviet)引擎名和版本号:<%=application.getServerInfo()%><br>

page、pageContext

    <h3>page:</h3>当前page页面的字符串描述:<%=page.toString()%><br><br>

   <h3>pageContext:</h3>用户名:从session中获取属性-<%=pageContext.getSession().getAttribute("username")%><br>

    <%--跳转到其他页面--%>
   <%--<%
       pageContext.forward("out.jsp");
   %>--%>
    include方法,包含其他页面:
        <%
            pageContext.include("out.jsp");
        %>

exception


    异常消息:<%=exception.getMessage()%><br>
    异常的字符串描述:<%=exception.toString()%>

三、jsp使用Javabean

1. Javabean的设计原则
  • 必须是公有类
  • 必须包含无参构造方法
  • 属性私有
  • 用getter()和setter()进行封装

例如:


public class Students{
    private String name;
    private int age;

    public  Students(){

    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

}
2. 存取Javabean有关的jsp动作元素

在jsp页面中使用Javabeans:

方法一:像使用普通java类一样,创建Javabean实例
方法二:在jsp页面中通常使用jsp动作标签使用javabean,常用的动作标签:userBeans、setProperty、getProperty

  • <jsp:useBeans>

在jsp页面中实例化或者在指定范围内使用Javabean:

<jsp:useBeans id="标示符" class="java类名" scope="作用范围"/>

scope属性:指定Javabean的作用范围
page:当前页面,重定向和转发都无效
request:可通过HttpRequest.getAttribute()取得Javabean对象,重定向无效,转发有效
session:可通过HttpSession.getAttribute()取得Javabean对象,同个会话有效
application:可通过application.getAttribute()取得Javabean对象,不同会话都有效

例如:

    <jsp:useBean id="myUsers" class="com.po.Users" scope="application"></jsp:useBean>
    用户名:<jsp:getProperty name="myUsers" property="username"></jsp:getProperty>
    密码:<jsp:getProperty name="myUsers" property="password"></jsp:getProperty>

也可使用内置对象获取:

    用户名:<%=((Users)application.getAttribute("myUsers")).getUsername()%>
    密码: <%=((Users) application.getAttribute("myUsers")).getPassword()%>

  • <jsp:setProperty>
    根据表单自动匹配所有属性:
    <jsp:setProperty name="myUsers" property="username"></jsp:setProperty>

    根据表单匹配部分属性:
    <jsp:setProperty name="myUsers" property="username"></jsp:setProperty>

    与表单无关,通过手工赋值给属性:
    <jsp:setProperty name="myUsers" property="password" value="hahahaha"></jsp:setProperty>

    通过url传参数给属性赋值:
    <jsp:setProperty name="myUsers" property="password" param="testparam"></jsp:setProperty>
  • <jsp:getProperty>
    使用getProperty获取属性值:
    <jsp:getProperty name="myUsers" property="username"></jsp:getProperty>

参阅:
慕课网:JAVA遇见HTML——JSP篇

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值