美文网首页
Javaweb _ Jsp

Javaweb _ Jsp

作者: 老北瓜 | 来源:发表于2020-05-11 15:07 被阅读0次

    javaweb简介
    静态网页与动态网页
    静态网页
    表现形式:网页中内容是固定,不会更新
    技术: Html + CSS

    动态网页
    表现形式:网页中的内容通过程序动态显示的,自动更新。

    技术: Html ,CSS, 数据库, 至少一门高级语言(Java,C#,php), Javascript,XML等。主流的动态网页脚本技术(Jsp / Asp.net / Php) image.png

    安装tomcat
    ...


    image.png

    /work 可以删除不影响使用

    可以手动创建一个jsp动态页面

    在 webapps中新建一个项目 image.png image.png

    WEB-INF目录结构
    1, WEB-INF是java的web应用的安全目录,客户端访问不到,只有服务端可以访问的目录。
    2,web.xml,项目部署文件 (配置默认启动页面... )
    3,classes文件夹,防止 *.class文件。
    4,lib文件夹,存放jar包。

    使用idea 创建一个 javaweb项目,详细过程来这
    https://www.cnblogs.com/xinruyi/p/9360282.html

    项目虚拟路径: 默认的就是项目名。 也可以修改,我就不修改。

    Jsp基础语法

    Jsp页面元素
        静态内容,注释, 声明,小脚本,表达式,指令。

    Jsp指令
       page指令 jsp文件第一行的
       include指令
       taglib指令

    Jsp注释

    <!-- 这个是html 注释,客户端查看源码可以看见-->
    
    <%--这里是jsp的注释, 客户端查看源码不可见--%>
    
    <% Jsp的脚本注释
    // 单行注释
    /**
      *  多行注释
      */
    在客户端中也看不见
     %>
    

    Jsp脚本
    在JSP页面中执行的java代码。
    <% java代码 %>

    Jsp声明
    在Jsp页面中定义变量或者方法。
    <%! java 代码 %>

    Jsp表达式
    在Jsp页面中执行的表达式
    <%= 表达式+ %>

    <%-- Created by IntelliJ IDEA. --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title></title>
    </head>
    <body>
    <h1>这是我的第一个 jsp 页面</h1>
    
    <!-- 这个是html 注释,客户端查看源码可以看见-->
    
    <%--这里是jsp的注释, 客户端查看源码不可见--%>
    
    <%-- Jsp声明  --%>
    <%!
        String s = "小明";
    
        int add(int x, int y) {
            return x + y;
        }
    %>
    
    <%-- Jsp 脚本 --%>
    <%
        out.print("这里是Jsp的脚本");
    %>
    <br>
    
    <%-- Jsp表达式 --%>
    你好哇,<%= s %>
    <br>
    3+7 = <%= add(3, 7) %>
    </body>
    </html>
    

    Jsp页面声明周期

    image.png
    JspService()方法被调用来处理客户端的请求。对于每一个请求,Jsp引擎创建一个新的线程来处理该请求。如果多个同时请求Jsp文件,就创建多个线程,对应每个客户端。以多线程方式执行可以大大降低对系统的资源需求,提高系统的并发量及响应时间。多线程也会带来同步问题,由于该Servlet一直在内存,响应很快。
    每次请求都会Jsp重新编译字节码文件。

    使用 Jsp 声明 和 Jsp表达式生成一个九九乘法表

    <%-- Created by IntelliJ IDEA. --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title></title>
    </head>
    <body>
    
    <h1>九九乘法表</h1>
    <hr>
    <%-- Jsp 声明 一个方法--%>
    <%!
        String result = "";
        String exec() {
            for (int i = 1; i <= 9; i++) {
                for (int j = 1; j <= i; j++) {
                    result += i + " * " + j + " = " + (i * j) + "&nbsp; &nbsp; &nbsp; &nbsp;";
                }
                result += "<br>";
            }
            return result;
        }
    %>
    <%= exec() %>
    
    </body>
    </html>
    

    Jsp内置对象 image.png

    客户端向web服务器发送 request,
    web服务器向客户端发response.

    request对象
    客户端的请求信息被封装在request对象中,通过它才能了解客户的需求,然后做出响应,在完成客户端的请求之前,该对象一直有效。

    request传递参数

    <%--
      Created by IntelliJ IDEA.
      User: admin
      Date: 2020/5/8
      Time: 17:48
      To change this template use File | Settings | File Templates.
    --%>
    
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>request对象</title>
    </head>
    <body>
    
    <form action="reg.jsp" method="post">
        <table>
            <tr>
                <td>名字</td>
                <td><input type="text" name="username"></td>
            </tr>
            <tr>
                <td>爱好</td>
                <td>
                    <input type="checkbox" value="read" name="favorite">读书
                    <input type="checkbox" value="movie" name="favorite">电影
                    <input type="checkbox" value="sport" name="favorite">运动
                </td>
            </tr>
            <tr>
                <td><input type="submit" value="提交"></td>
            </tr>
        </table>
    </form>
    <br>
    <br>
    
    <%-- 通过 URL 传递参数  --%>
    <a href="reg.jsp?username=李四">通过URL传递参数</a>
    
    </body>
    </html>
    

    reg.jsp文件

    <%-- 解决中文乱码问题,要跟传递参数的 requests.jsp 页面中的编码一致。--%>
    <% request.setCharacterEncoding("UTF-8");%>
    
    用户名:<%= request.getParameter("username") %>
    <br>
    爱好: <%
        if (request.getParameterValues("favorite") != null) {
            String[] favorites = request.getParameterValues("favorite");
            if (favorites.length != 0) {
                for (int i = 0; i < favorites.length; i++) {
                    out.println(favorites[i]);
                }
            }
        }
    %>
    

    如果request传递参数过程中出现中文乱码问题。是因为前后台编码不统一,可以修改 tomcat/conf/server.xml 标签 加入

    <Connector ......... URIEncoding="UTF-8"/>
    

    request对象常用的方法:

    请求体的MIME类型:   <%= request.getContentType()  %>
    协议类型及版本号:   <%= request.getProtocol() %>
    服务器主机名:       <%= request.getServerName() %>
    服务器端口号:       <%= request.getServerPort() %>
    请求文件的长度:      <%= request.getContentLength() %>
    请求客户端的IP地址: <%= request.getRemoteAddr()%>
    请求的真实路径:     <%= request.getRealPath("requests.jsp") %>
    请求的上下文路径:   <%= request.getContextPath() %>
    

    response对象
    response对象包含了响应客户请求的有关信息,在Jsp中很少使用到它。有作用于,访问一个页面时,response对象只能对这次访问有效。
    常用方法:

    <%
        response.setContentType("text/html;charset=utf-8"); // 设置响应的MIME类型
    
        out.println("<h1>response内置对象</h1>");
        out.println("<hr>");
        out.flush();
    
        PrintWriter writer = response.getWriter();
        writer.println("这个是response对象生成的输出流outer对象");
    
        response.sendRedirect("reg.jsp");   // 请求重定向
    %>
    

    请求重定向 :
       客户端行为,response.sendRedirect(),从本质上讲等同于两次请求,前一次的请求对象不会变保存,地址栏的url会改变。

    请求转发:
       服务器行为, request.getRequestDispatcher(“xx.jsp”).forward(req,resp);是一次请求,转发后请求对象会保存,地址栏的url不会改变。

    缓冲区
    Buffer,就是内存的一块区域用来保存临时数据。

    out对象
    out对象是JspWriter类的实例,事项客户端输出内容常用的对象。
    常用方法

    void println() :   向客户端打印字符串
    void clear():    清除缓冲区内容, 如果在 flush()之后调用会抛出异常。
    void clearBuffer():   清除缓冲区内容。
    void flush():    将缓冲区内容输出到客户端
    int getBufferSize():    返回缓冲区字节数大小,如不设置缓冲区 = 0;
    int getRemaining() :   返回缓冲区还剩下多少
    boolean isAutoFlush():   返回缓冲区满时,是自动清空还是抛出异常。
    void close():   关闭输出流。
    

    get 与 post区别
    表单的两种提交方式 , get 与 post
    1, get 以明文的方式通过url 提交数据,数据在 url 中可以看到,安全性脚底,效率高,适合提交数量不大,安全性不高的数据 , 如 搜索, 查询等。
    2,post:将用户提交的信息封装在HTML Header内,适合提交数据量大,安全性高的用户信息, 如 注册,上传等。
    分别使用 get 和 post 请求方式简单模拟登录过程

    <%-- Created by IntelliJ IDEA. --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>登录</title>
    </head>
    <body>
    
    <h1>登录</h1>
    
    <form action="login.jsp" method="get">
        <table>
            <tr>
                <td>用户名</td>
                <td>
                    <input type="text" name="username">
                </td>
            </tr>
            <tr>
                <td>密码</td>
                <td><input type="password" name="password"></td>
            </tr>
            <tr>
                <td><input type="submit" value="提交"></td>
            </tr>
        </table>
    </form>
    </body>
    </html>
    
    image.png

    如果使用post 就不会出现用户名和密码的明文。

    session

    在服务器的内存中保存着不同用户的session.
    1,session表示客户端与服务器的一次会话
    2,Web中的session指的是用户在浏览某个网站时,从进入网站到浏览器关闭所经过的这段时间,也就是用户浏览这个网站所花费的时间。
    3,从上述定义中可以看到,session实际上是一个特定的时间概念。

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Session_Page1</title>
    
    </head>
    <body>
    <h1> Jsp内置 Session对象</h1>
    <hr>
    
    <%
    
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日-HH:mm:ss");
    //    设置 Session 创建时间
        Date date = new Date(session.getCreationTime());
        session.setAttribute("name", "张三");
        session.setAttribute("age", "21");
        session.setAttribute("sex", "男");
    
        session.setMaxInactiveInterval(10);  // 设置session会话有效期 10 秒钟
    %>
    
    创建 Session的时间 是 <%= sdf.format(date)%> <br>
    Session 的id 是 <%= session.getId()%> <br>
    Session 中的user 是 <%= session.getAttribute("name")%> <br>
    
    <a href="session_page2.jsp" target="_blank">跳转到Session_Page2页面</a>
    </body>
    </html>
    

    jsp2

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Session_Page2</title>
    
        Session的id :  <%=  session.getId() %> <br>
    
        <%-- 当 session 过期之后, 获取到的 SessionId 为新值,一干属性也为 null--%>
        作为参数传递的session 包含  <%
        String[] names = session.getValueNames();
        for (int i = 0; i < names.length; i++) {
            out.print(names[i] + "&nbsp; &nbsp;");
        }
    %>
    </head>
    <body>
    
    </body>
    </html>
    

    session的生命周期

    创建 : 当客户端第一次访问jsp时, 服务器会创建一个sessionid,每次客户端访问服务器时都会携带这个sessionId,服务器会对这个SessionId进行校验。

    活动: 通过超链接打开新的页页面属于同一会话;当前页面没有全部关闭,打开新的窗口访问同一项目属于同一会话;如果全部关闭重新访问会产生新的会话,原有的会话依然存在于服务端,只是不会再被使用。

    销毁 1, session.invalidate()方法 ; 2, session超时 ; 3, 服务器重启。

    application对象

    application 对象实现了用户间数据的共享,可存放全局变量。
    application开始于服务器的启动,终止与服务器的关闭。
    在不同时间或不同用户之间的连接中,可以对application的同一属性进行修改。
    常用方法 :

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Application内置对象</title>
    </head>
    <body>
    
    <%
        application.setAttribute("city", "北京");
        application.setAttribute("postCode", "10000");
    
    %>
    application 设置的 city = <%= application.getAttribute("city") %> <br>
    application 设置的 属性都有 <%
        Enumeration<String> attr = application.getAttributeNames();
    
        while (attr.hasMoreElements()) {
            out.print(attr.nextElement() + "&nbsp;&nbsp;");
        }
    %>  <br>
    
    JSP的引擎保本 <%= application.getServerInfo() %>
    </body>
    </html>
    

    page对象

    类似 Object

    pageContext内置对象
    pageCountext 对象体用了对JSP页面内所有的对象及名字空间的访问
    pageContext对象可以访问到本页所在的session,也可以取本页面所载的application的某一属性值
    pageContext相当于页面中所有功能的集大成者。
    常用方法:

    <body>
    
    <h1>pageContext常用方法:</h1>
    
    通过 pageContext 获取 Session  <%= pageContext.getSession().getId() %> <br>
    
    跳转页面 forward: <%
        /* 跳转到新页面之后,地址栏上的地址不会发生变化   */
        pageContext.forward("../login.jsp");
    %>
    
    include的使用: <%
        pageContext.include("include.jsp");
    %>
    </body>
    

    Config对象
    config对象是在一个Servlet初始化时,Jsp引擎向他传递信息用的,包含Servlet初始化时需要用的参数以及服务器的有关信息。

    常用方法:<br>
     <%
         /* 返回含有服务器相关信息的ServletContext对象*/
         ServletContext servletContext = config.getServletContext();
    
         /* 返回初始化参数的值*/
         config.getInitParameter(String name) ;
    
         /* 返回 Servlet初始化所需所有参数的枚举*/
         Enumeration<String> initParameterNames = config.getInitParameterNames();
     %>
    

    Exception对象
    测试异常类 , 需要在 顶部 天津爱 errorPage = "xxxx.jsp",表示要处理异常的类。

    <%@ page contentType="text/html;charset=UTF-8" language="java" errorPage="Exception.jsp" %>
    <html>
    <head>
        <title>异常测试类</title>
    </head>
    <body>
    <%
        System.out.println(100 / 0);   // 产生异常 ,一个算数异常
    %>
    </body>
    </html>
    

    处理异常类: 需要注意在顶部添加 isErrotPage =“true”,表示为处理异常的类。

    <%@ page contentType="text/html;charset=UTF-8" language="java"  isErrorPage="true" %>
    <html>
    <head>
        <title>Exception内置对象</title>
    </head>
    <body>
    
    <h1>Exception内置对象</h1>
    
    打印异常信息 :<%= exception.getMessage() %> <br>
    
    异常的完成信息 <%= exception.toString()%>
    </body>
    </html>
    

    相关文章

      网友评论

          本文标题:Javaweb _ Jsp

          本文链接:https://www.haomeiwen.com/subject/zdaxnhtx.html