JSP基础预习

JSP基础预习

(IDEA新建web项目可参考IDEA创建Web项目详细过程
(之后右键发现无新建jsp文件可参考此博客此博客
以及一些建项目可能遇到的问题

简介

全名 Java Server Pages,其根本是一个简化的Servlet设计,实现了在Java中使用html标签。Jsp是一种动态网页技术标准也是JavaEE的标准。Jsp与Servlet一样,在服务器端执行。

常用动态网站开发技术对比

  1. Jsp:Java平台,安全性高,适合开发大型的,企业级的Web应用程序。(如hadoop)
  2. Asp.net: .Net平台,简单易学。但安全性及跨平台性差。
  3. Php: 简单高效,成本低开发周期短,适合中小企业的Web应用开发。

Jsp页面元素构成

  1. 指令

    • page指令:通常位于jsp页面的顶端,同一个页面可以有多个page指令。
    • include指令:将一个外部文件嵌入到当前JSP文件中,同时解析这个页面中的JSP语句。
    • taglib指令:使用标签库定义新的自定义标签,在JSP页面中启用定制行为。

    page指令

    在这里插入图片描述

    JSP注释

    1. html注释: 客户端可见

      <%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
      <!DOCTYPE html>
      <html>
      <head>
          <title>Hello World</title>
      </head>
      <body>
      <h1><!--Hello World!-->
      </h1>
      <br/>
      <hr>
      </body>
      </html>
      

      网页显示:

      在这里插入图片描述

      查看源代码时:
      在这里插入图片描述

    2. JSP的注释:<%–html注释–%> 客户端不可见

      <%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
      <!DOCTYPE html>
      <html>
      <head>
          <title>Hello World</title>
      </head>
      <body>
      <h1><%--Hello World!--%>
      </h1>
      <br/>
      <hr>
      </body>
      </html>
      

      网页显示:在这里插入图片描述

      查看源代码时:在这里插入图片描述

    3. JSP脚本注释: //单行注释 /* 多行注释 */ 客户端不可见

      <%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
      <!DOCTYPE html>
      <html>
      <head>
          <title>Hello World</title>
      </head>
      <body>
      <% /*Hello World!*/ %>
      <% //Hello World! %>
      <br/>
      <hr>
      </body>
      </html>
      

      网页显示:在这里插入图片描述

      查看源代码:

      在这里插入图片描述

JSP脚本

语法:<% Java代码 %>

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
    <title>Hello World</title>
</head>
<body>
<%
    out.println("大家好");
%>
<hr>
</body>
</html>

网页显示:

在这里插入图片描述

JSP的声明

在JSP页面中定义变量或方法。

代码:<%! Java代码%>

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
    <title>Hello World</title>
</head>
<body>
<%!
    String s="张三";
    int add(int x,int y) {
        return x+y;
    }
%>
<hr>
</body>
</html>

JSP表达式

在JSP页面中执行的表达式

语法:<%= 表达式 %> //表达式不以分号结束

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
    <title>Hello World</title>
</head>
<body>
<%!
    String s="张三";
    int add(int x,int y) {
        return x+y;
    }
%>
<hr>
你好,<%= s %>
 x+y=<%= add(5,10) %>
</body>
</html>

在这里插入图片描述

JSP页面的生命周期

用户发出请求index.jsp

在这里插入图片描述

jspService(方法被调用来处理客户端的请求。对每一个请求,JSP引擎创建一个新的线程来处理该请求。(多线程处理方式)如果多个用户同时请求该JSP文件,则JSP引擎会创建多个线程。每个用户对应一个线程。多线程方式大大降低对系统的资源需求,提高系统并发量及响应时间。但要注意多线程编程带来的同步问题,由于该Servlet始终驻于内存,所以响应时间很快。

当JSP页面发生改变之后,JSP引擎会重新编译,字节码文件更新。

打印九九乘法表

表达式:

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
    <title>Hello World</title>
</head>
<body>
<%! String printjiujiu() {
  String s="";
  for(int i=1;i<=9;i++) {
      for(int j=1;j<=i;j++) {
          s+=i+"*"+j+"="+(j*i)+"&nbsp;&nbsp;&nbsp;&nbsp;";
      }
      s+="<br>";
  }
  return s;
}
%>
<h1>九九乘法表</h1>
<hr>
<%= printjiujiu()%>
</body>
</html>

脚本(内置out对象):

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
    <title>Hello World</title>
</head>
<body>
<%! void printjiujiu(JspWriter out) throws Exception{
  for(int i=1;i<=9;i++) {
      for(int j=1;j<=i;j++) {
          out.println(i+"*"+j+"="+(j*i)+"&nbsp;&nbsp;&nbsp;&nbsp;");
      }
      out.println("<br>");
  }
}
%>
<h1>九九乘法表</h1>
<hr>
<% printjiujiu(out);%>
</body>
</html>

JSP内置对象

简介

web容器创建的一组对象,不使用new就可以使用的内置对象。(如out对象进行输出)

九大内置对象

  1. out

    JspWriter类的实例,是向客户端输出内容常用的对象。

    常用方法

    1. void printlin():打印字符串
    2. void clear():清除缓冲区内容,如果在flush之后会抛异常。
    3. void clearBuffer():类上,但在flush之后不会抛异常。
    4. void flush():将缓冲区内容输出到客户端。
    5. int getBufferSize():返回缓冲区字节数的大小,如不设缓冲区则为零。
    6. int getRemaining():返回缓冲区可用剩余大小。
    7. boolean isAutoFlush():返回缓冲区满时,是自动清空还是抛异常。
    8. void close():关闭输出流。
  2. request

    客户端的请求被封装到request对象中,通过它才能了解客户的需求,然后做出响应。它是HttpServletRequest类的实例。request对象具有请求域,即完成客户端的请求之前,该对象一直有效。

    在这里插入图片描述

    <%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
    <!DOCTYPE html>
    <html>
    <head>
        <title>Hello World</title>
    </head>
    <body>
    <h1>用户注册</h1>
    <hr>
    <form action="dologin.jsp" name="loginform" method="post">
        <table>
            <tr>
                <td>用户名</td>
                <td><input type="text" name="username"></td>
            </tr>
            <tr>
                <td>密码</td>
                <td><input type="checkbox" name="favorite" value="read">读书</td>
        		<td><input type="checkbox" name="favorite" value="music">音乐</td>
        		<td><input type="checkbox" name="favorite" value="movie">电影</td>
        		<td><input type="checkbox" name="favorite" value="Internet">上网</td>
            </tr>
            <tr>
                <td colspan="2"><input type="submit" name="登录"></td>
            </tr>
        </table>
    </form>
    
    </body>
    </html>
    
    //dologin内容
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
        用户名:<%= request.getParameter("username")%>
        喜好 :<% String[] f=request.getParameterValues("favorite");
              for(int i=0;i<f.length;i++) {
                  out.println(f[i]);
              }
        %>
    </body>
    </html>
    
  3. response

    在这里插入图片描述

  4. session

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

    session对象

    • session对象是一个JSP内置对象。
    • session对象在第一个JSP页面被装载时自动创建,完成会话期管理。
    • 从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这个服务器结束,称为一个对话。
    • 当一个客户访问一个服务器时,可能会在服务器的几个页面之间切换,服务器应当通过某个方法知道这是一个客户,就需要session对象。
    • session对象时HttpSession类的实例。

    常用方法

    在这里插入图片描述

    生命周期

    • 创建

      当客户端第一次访问某个JSP或Servlet时,服务器会为该会话创建一个SessionId,每次客户端向服务端发送请求时,会将SessionId携带过去,服务器对其检验。

    • 活动

      某次对话中通过超链接打开的新页面属于同一次会话

      只要当前会话页面没有全部关闭,重新打开新的浏览器窗口访问同一项目资源时属于同一次会话

      除非本次会话的所有页面都关闭后再重新访问某个JSP或Servlet将会创建新的对话。(原有会话还存在,旧SessionId存在于服务端。不过没有客户端携带他然后让服务端检验)

    • 销毁

      1. 调用session.invalidate()方法。
      2. Session过期(超时)。
      3. 服务器重启。
  5. application

    application对象实现了用户间数据的共享,可存放全局变量。

    开始于服务器的启动,终止于服务器的关闭。

    在用户的前后连接或不同的用户之间的连接中,可以对application对象的同一属性进行操作。

    服务器的启动和关闭决定了application对象的生命。

    是ServletContext类的实例。

    在这里插入图片描述

  6. page

    在这里插入图片描述

  7. pageContext

    • pageContext对象提供了对JSP页面内所有的对象及名字空间的访问
    • pageContext对象可以访问到本页所在的session,也可以取本页面所在的application的某一属性值。
    • pageContext对象相当于页面中所有功能的集大成者。
    • pageContext对象的本类名也叫pageContext。

    在这里插入图片描述

  8. exception

    exception对象是一个异常对象,当一个页面在运行过程中发生了异常,就产生这个对象。如果一个JSP页面要应用此对象,就必须把isErrorPage设为true,否则无法编译。他实际上是java.lang.Throwable的对象,常用方法如下:

    在这里插入图片描述

  9. config

    在这里插入图片描述

web程序的请求响应模式

用户发出请求(request)

服务器给用户响应(response)

在这里插入图片描述

例如:

在这里插入图片描述

缓冲区

  • Buffer缓冲区域用来保存临时数据。

IO输出最原始的是一个字节一个字节输出,效率太差。

缓冲区可以实现一起输出。

get和post区别

form name=“regForm” action=“动作” method=“提交方式”>

  1. get:以明文方式通过URL提交数据,数据在URL中可见。提交的数据最多不超过2kb.安全性较低但效率比post高。适合提交数据量不大,安全性不高的数据。如:搜索,查询
  2. post:将用户提交的信息封装到HTML HEADER内。适合提交数据量大,安全性高的用户信息。如:注册,修改,上传
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
    <title>Hello World</title>
</head>
<body>
<h1>用户登录</h1>
<hr>
<form action="dologin.jsp" name="loginform" 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 colspan="2"><input type="submit" name="登录"></td>
        </tr>
    </table>
</form>

</body>
</html>

在这里插入图片描述

post不会显示

请求转发与请求重定向

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

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

Javabean

  • 简介

    Javabeans就是符合某种特定的规范的java类。使用javabeans的好处是解决代码重复编写,减少代码冗余,功能区分明确,提高代码维护性。

    在这里插入图片描述

    在这里插入图片描述
    快捷键可参考:IDEA自动生成Java Bean——构造方法和get、set方法

  • JSP动作

    在这里插入图片描述

  • JSP中如何使用javabeans

    1. 像使用普通java类一样,创建javabean实例。

      public class users {
          private String username;
          private String password;
          public users() {
              
          }
          public String getname() {
              return username;
          }
          public String getpassword() {
              return password;
          }
          public void setname(String username) {
              this.username=username.
          }
          public void setpassword(String password) {
              this.password=password;
          }
      }
      /*
      	然后在jsp导入:<%@ page import="路径" %>
      	<%
      		users user =new users();
      		user.setname("...");
      		user.setpassword("...");
      	%>
      	之后在body中使用get方法即可获取
      */		
      
    2. 在JSP页面中通常使用jsp动作标签使用javabean。

      • useBeans

        在这里插入图片描述

        java类名应为全名,即包括包名。

        <jsp:useBean id="myusers" class="com.po.users" scope="page"/>
            用户名:<%= myusers.getname();
        	密码: <%= myusers.getpassword();
        /*返回:
        	用户名:null
        	密码: null
        */
        
      • setProperty

        在这里插入图片描述

        1. 当property="*"时(根据表单匹配所有属性):

               <form name="loginForm" action="dologin.jsp" method="post">
                   <table>
                   	<tr>
                   		<td>用户名:</td>
                   		<td><input type="text" name="username" value=""/></td>
                   	</tr>
                   	<tr>
                   		<td>密码:</td>
                   		<td><input type="password" name="password" value=""/></td>
                   	</tr>
                   	<tr>
                   		<td colspan="2" align="center"><input type="submit" value="登录"/></td>
                   	</tr>
          
               //dologin.jsp:
            
               <jsp:useBean id="myusers" class="com.po.users" scope="page"/>
               //  自动匹配
               <jsp:setProperty name="myusers" propert="*"/>
               用户名:<%=myusers.getname() %>
               密码:<%=myusers.getpassword() %>
          
        2. 当property="JavaBean属性名时"时(根据表单匹配部分属性):

          <jsp:setProperty name="myusers" propert="username"/>
          //密码无值
          
        3. 使用value跟表单无关,手工赋值。

          <jsp:setProperty name="myusers" propert="username" value="lisi"/>
          <jsp:setProperty name="myusers" propert="password" value="123456"/>
          //设置用户名,密码。表单值无效。
          
        4. 通过URL传参,给属性赋值

          <!--form处需改变-->
          <form name="loginForm" action="dologin.jsp?mypass=123456" method="post">
          <jsp:setProperty name="myusers" propert="password" param="mypass"/>
          <!--password为123456,同时用户名为null-->
          
      • getProperty

        在这里插入图片描述

  • JSP四个作用域范围

    在这里插入图片描述

    <!-- scope为request时,表单提交后使用<a href="test.jsp"></a>-->
    <!-- 不能获得用户名和密码(这是重定向),但使用以下代码-->
    <%
    	request.getRequestDispatcher("test.jsp").forward(request,response);
    %>
    <!-- 可以获得(这是内部转发,属于同一次请求),而page只在当前页面有效-->
    
  • Model 1简介

    • Model 1模型出现前,整个Web应用的情况:几乎全部由JSP页面组成,JSP页面接受处理客户端请求,对请求处理后直接做出响应。

      弊端:在界面层充斥着大量的业务逻辑代码和数据访问层的代码,Web程序的可扩展层和可维护性非常差。

      javabean的出现可以使jsp页面中使用javabean封装的数据或调用javabean的业务逻辑代码,大大提高了程序的可维护性。

      在这里插入图片描述

JSP状态管理

http协议的无状态性

无状态指当浏览器发送请求给服务器时,服务器响应客户端请求。但当同一个浏览器再次发送请求给服务器时,服务器不知道他是刚才的浏览器。

简单来说,就是服务器不会记住你。

保存用户状态的两大机制

  • session

  • cookie

    是web服务器保存在客户端的一系列文本信息。

    • 例一:判断注册用户是否已登陆网站,保存登录信息。
    • 例二:”购物车“的处理。

    作用:

    • 对特定对象追踪
    • 保存用户网页浏览记录和习惯
    • 简化登录

    安全风险:易泄漏用户信息

JSP中创建和使用cookie

在这里插入图片描述

  • 常用方法

    在这里插入图片描述

  • code实现

    <%
    	//首先判断用户是否选择记住登陆状态
    	String[] isUseCookie=request.getParameterValues("isUseCookie")//引号中是用户界面是否保存的按钮的名字
    	if(isUseCookie!=null&&isUseCookie.length>0) {
            //把用户名和密码保存在cookie里
            String username=request.getParameter("username");
            String password=request.getParameter("password");
            Cookie usernameCookie=new Cookie("username",username);//键值对
            Cookie passwordCookie=new Cookie("password",password);
            usernameCookie.setMaxAge(864000);
            passwordCookie.setMaxAge(864000);//最大生存期限
            response.addCookie(usernameCookie);
            response.addCookie(passwordCookie);
        }
        else {
            Cookie[] cookies=request.getCookies();
            if(cookies!=null&&cookies.length>0) {
                for(Cookie c:cookies) {
                    if(c.getName().equals("username")||c.getName().equals("password")) {
                        c.setMaxAge(0);//设置Cookie失效
                        response.addCookie(c);//重新保存
                    }
                }
            }
        }
    %>
    

    获取:

    <%
    	String username="";
    	String password="";
    	Cookie[] cookies=request.getCookies();
        if(cookies!=null&&cookies.length>0) {
            for(Cookie c:cookies) {
                if(c.getName().equals("username")) {
                    username=c.getValue();
                }
                if(c.getName().equals("password")) {
                    password=c.getValue();
                }
            }
        }
    %>
    //username和password获取到了
    

    中文转码:

    引入java的java.net.*

    使用 request.setCharacterEncoding(“utf-8”);

    URLEncoder.encode(… , “utf-8”);

    URLDecoder.decode(… , “utf-8”);

  • session和cookie对比

    在这里插入图片描述

指令和动作

include

  • 指令语法:<%@ include file=“URL”%>

  • 动作语法:<jsp:include page=“URL” flush=“true|false”/> page为要访问的页面,flush为被包含页面是否从缓冲区读取。

  • 区别:

    在这里插入图片描述

forward动作

  • 语法:<jsp:forward page=“URL”/>

    等同于request.getRequestDispatcher("/url").forward(request,response);

param动作

  • 语法:<jsp:param name=“参数名” value=“参数值”>

    常常与jsp:forward一起使用,作为其子标签。

    <jsp:forward page="user.jsp">
    	<jsp:param value="admin@123.net" name="email"/>
    </jsp:forward>
    //添加电子邮箱的值,也可在此更改表单提交的值
    

    本文参考了慕课:JAVA遇见HTML-JSP篇

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值