JavaWeb---jsp基础

  • 掌握内置对象
  • 掌握基础语法

JSP全名为:Java Server Pages,是一个简化的Servlet设计,实现了在Java中使用html标签。JSP是一种动态网页技术。

jsp页面元素

jsp由指令、表达式、静态内容、注释、声明、小脚本组成

JSP指令

  • page指令:通常位于JSP顶端,同一个页面可以有多个page指令
  • include指令:将一个外部文件嵌入到当前JSP文件中,同时解析这个页面中的JSP语句
  • taglib指令:使用标签库定义新的自定义标签,在JSP页面中启用定制行为
    JSP文件中的模板
    jsp技术是基于模板的文件,这个模板一般是html,JSP页面需要遵循模板元素,在这个基础之上进行编程。使用Java语言

注释

1.普通注释,能被客户端查看源码时看到

<!--普通html注释-->

2.隐藏注释,只有后台编写代码时能够看见

<%--隐藏注释--%>

3.脚本代码注释(在客户端也不可见)

// 单行注释
 /*
    * 多行注释
    * */

jsp声明

JSP声明指的就是在JSP页面中定义变量或者方法 语法: <%! Java代码 %>
声明方法时定义出返回值,方法前面,参数列表和方法体。

String s="sss";
int add(int a,int b){
return a+b;
}

JSP脚本

JSP脚本指的就是在JSP页面中执行的java代码,因此在脚本块中严格遵循java代码的编写规范,含有分号结束等特征。
语法:<% Java代码 %>
可以利用对象调用输出,在脚本中引用方法,不能对方法再进行方法体的定义声明

<%out.println(s) ;%>

jsp表达式

调用声明中的变量或方法,与脚本最大的区别是:表达式只是一个没有分号结尾的引用表达式,而不能含有java代码。在jsp页面中执行的表达式,会返回到JSP页面中
语法:<%=表达式%>

 x+y=<%= add(10,20)%> 

分别使用表达式和脚本输出一个九九乘法表:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>九九乘法表</title>
</head>
<body>
<div>

    <%--
    1*1=1
    1*2=2 2*2=4
    1*3=3 2*3=6 3*3=9
    --%>
    <%!
        String printTable(){
            StringBuilder sb=new StringBuilder();
            sb.append("<h1>").append("基于表达式实现的九九乘法表").append("</h1>");
            for(int i=1;i<10;i++){
                for(int j=1;j<=i;j++){
                    sb.append(j)
                            .append("*")
                            .append(i)
                            .append("=")
                            .append(i*j)
                    .append(" ");
                }
                sb.append("</br>");
            }
            return sb.toString();
        }
    %>

        <%--利用表达式打印输出--%>
    <%=printTable()%>


</div>


<div>
    <%!
    void printTable2(JspWriter out) throws Exception{
        for(int i=1;i<10;i++){
            for(int j=1;j<=i;j++){
                out.println(j+"*"+i+"="+j*i+"&nbsp;&nbsp;&nbsp;&nbsp;");
            }
            out.println("</br>");
        }
    }
    %>
    <h1>九九乘法表:基于脚本输出</h1>
    <%
    printTable2(out);
    %>
</div>
</body>
</html>

JSP生命周期

编写好jsp页面后,tomcat对jsp进行分析,将jsp转化为servlet,成为一个服务端程序,然后将servlet实时编译为一个class文件,然后以servlet的方式解析执行class文件。
JSP页面只要发生修改,那么JSP引擎都会把源文件重新编译,生成最新的字节码文件。
在这里插入图片描述

JSP内置对象

JSP内置对象是web容器创建的一组对象,不用关键字new就可以使用的对象。
JSP的九个内置对象分别是:application、out、page、config、response、resquest、pageContext、session、exception

JSP的四个域分别是:page域、request域、application域、session域。其中page域的作用范围是当前页,request域的作用范围是当前请求、session域的作用范围是当前会话、application域的作用范围是当前web应用。
page域对应的域对象是pageContext,类型是PageContext,request域对应的域对象是request,类型是HttpServletRequest,session域对应的域对象是session,类型是HttpSession,application域对应的域对象是application,类型是HttpServlet,四个域对象都含有一下三个方法:

  • setAttribute(String key,String value)

  • getAttribute(String key)

  • removeAttribute(String key)

  • out对象
    是jsWriter类的实例,是客户端输出内容常用的对象,常用方法有:

  1. void println() 向客户端打印字符串
  2. void clear() 清除缓冲区的内容, 如果在fl ush之后调用会抛异常。
  3. void clearBuffer() : 清除缓存区内容, 在fl ush之后调用不会抛异常。
  4. void flush() : 将缓冲区内容输出到客户端。
  5. int getBufferSize() : 返回缓冲区字节大小, 如果没有缓冲区, 则为0
  6. int getRemaining() : 返回缓冲区还剩余多少字节可用
  7. boolean i sAutoFlush() : 返回缓冲区满时, 是自动清空还是抛出异常。
  8. void close() : 关闭输出流。

get()与post()


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>欢迎登陆</title>
</head>
<body>

<h1>
    JSP登陆演示
</h1>
<form id="loginForm" method="get" action="doLogin.jsp">
    <div>
    </div>
        <label for="userName">用户名:</label>
        <input id="userName" type="text" name="userName" value=""/>

        <label for="password">用户名密码</label>
        <input id="password" type="password" name="password" value="">
        <input type="submit" value="登陆">


</form>
</body>
</html>

request对象

客户端的请求信息被封装在request对象中,通过这个对象才能了解到客户的需求,然后做出响应。request是
HttpServletRequest类的实例。


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登陆界面</title>
</head>
<body>

<%
String userName=request.getParameter("userName");
String password=request.getParameter("password");
if(userName==null||password==null){
    out.print("<h1>");
    out.print("请输入用户名和密码");
    out.print("</h1>");

}else{
    if("admin".equals(userName)&&"admin".equals(password)){
        out.print("欢迎");
        out.print(userName);
    }else{
        out.print("登陆失败");
    }
}
%>

</body>
</html>

getParameter与getParameterValues方法使用


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>用户选择技能</title>
</head>
<body>

<h2>用户选择</h2>
<form id="skill_form" method="post" action="request_handle.jsp">
    <table>
        <tr>
            <td>用户名</td>
            <td>
                <input type="text" name="userName" id="userName" value="" placeholder="请输入用户名">

            </td>
        </tr>
        <tr>
            <td>技能</td>
            <td>
                <%--多选框checkbox
                单选框:radio
                --%>
                <input type="checkbox" name="skill" value="java"/>java
                <input type="checkbox" name="skill" value="c语言"/>c语言
                <input type="checkbox" name="skill" value="c++"/>c++
                <input type="checkbox" name="skill" value="php"/>php
            </td>
        </tr>
        <tr>
            <td>
                <input type="submit" value="登录">
            </td>
        </tr>
    </table>

</form>

</body>
</html>


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>处理Request Form提交数据</title>

</head>
<body>
<%
    //获取请求的参数值,会产生乱码的问题,因为浏览器的默认编码是ISO-8859-1
    request.setCharacterEncoding("UTF-8");
    String userName = request.getParameter("userName");
    String[] skills = request.getParameterValues("skill");

%>

<p> 用户名:<%out.print(userName);%></p>

<p>用户技能</p>
<ol>
    <%
        for (String skill : skills) {
    %>
    <li>
        <%
            out.print(skill);
        %>
    </li>
    <%
        }
    %>

</ol>
</body>
</html>

request对象的其他方法:

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

response对象

response对象具有页面作用域,即访问一个页面时,该页面内的response对象只能对这次访问有效,其他页面的response对象对当前页面无效。
当有out对象与response对象同时输出时,response对象获得的PrintWriter输出流打印的内容总是优先于内置out对象打印的内容,若要解决这个问题,可以采用out.flush()方法清空out对象的缓冲区

转发与重定向

转发与重定向的区别
重定向:本质上是两次请求。第一次请求发送给客户端后,请求对象不会保存,响应会带回一个url,客户端再依据这个URL再次请求,客户端地址会发生变化
转发:本质上是一次请求,转发后请求对象会保存,地址栏不会发生变化

session对象

session表示客户端和服务器的一次会话,WEB中的session指的是用户浏览某个网站,从进入网站到浏览器关闭所经过的这段时间,也就是用户浏览这个网站所花费的时间
session对象是一个JSP的内置对象
session对象在第一个JSP页面被装载时自动创建,完成会话期管理。
从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这个服务器结束,被称为一个会话。
当一个客户访问一个服务器时,可能会在服务器的几个页面之间切换,服务器应当通过某种办法知道这是一个客户,就需要session对象

session对象常用方法

Session Id号:<%=session.getId()%><br>
从Session中获取用户名:<%=session.getAttribute("userName")%><br>
Session过期时间:<%=session.getMaxInactiveInterval()%>秒<br>
重新设置Session过期时间:<% session.setMaxInactiveInterval(5); %>
session生命周期

1.创建
当客户端第一次访问某个jsp或者Servlet的时候,服务器会为当前会话创建一个SessionId,每次客户端向服务端发
送请求时,都会将此SessionId携带过去,服务端会对此SessionId进行校验。
2.活动:
某次会话当中通过超链接打开的新页面属于同一次会话。
只要当前会话页面没有全部关闭,重新打开新的浏览器窗口访问同一项目资源时属于同一次会话。
除非本次会话的所有页面关闭后再重新访问某个jsp或者Servlet,才会创建新的会话。

注意!!!:原有会话还存在,这个旧的SessionId仍然存在于服务器端,只不过再也没有客户端会携带他然后
交予服务端校验

3.销毁:
Session的销毁只有三种方式:

  • 调用了session.invalidate()方法
  • Session过期(超时)
  • 服务器重新启动

Tomcat默认session超时时间为30分钟

application对象

application对象实现了用户间数据的共享,可存放全局变量。
application开始于服务器的启动,终止于服务器的关闭。
在用户的前后连接或不同用户的连接中,可以对application对象的同一属性进行操作。
在任何地方对application对象属性的操作,都将影响其他用户对此的访问。
application对象是ServletContext类的实例。

application常用方法

设置属性信息:application.setAttribute("city","Xi'An");
获取属性信息:application.getAttribute("city")
获得所有全局属性:Enumeration<String> enumeration = application.getAttributeNames()
获得JSP引擎版本信息:application.getServerInfo()

page对象

page对象就是指向当前JSP页面本身,有点像SE中的this指针,它时java.lang.Object类的实例。常用方法与Object
类中的常用方法完全一致

因此当浏览器访问一个静态JSP资源页面时,JSP页面通过Tomcat中的JSP引擎处理后变为一个java文件,其中是java的Servlet类,java文件的文件名是JSP文件名_jsp.java,再将这个java文件编译为class文件,然后再通过response对象的printwriter将java中的动态内容变为一个静态的网页,这个JSP页面就是一个Page对象。

pageContext对象

pageContext对象提供了对JSP页面内所有的对象及名字空间的访问。
pageContext对象可以访问到本页面所在的session,application的某一属性值。
访问当前JSP页面跳转到另一个页面:pageContext.forward("login.jsp");
当前JSP页面包含另一个JSP页面的body体:pageContext.include("include.jsp")

exception对象

exception对象是一个异常对象,当一个页面在运行过程中发生了异常,就产生这个对象。如果一个JSP页面要应用
此对象,就必须把isErrorPage置为true,否则无法编译。

常用方法如下:
String getMessage()返回描述异常的信息。
String toString()返回关于异常的简短描述信息
void printStackTrace()显示异常及其堆栈
Throwable FillInStackTrace()重写异常的执行堆栈

<%@ page contentType="text/html;charset=UTF-8" language="java"
errorPage="error_page.jsp" %>
<html>
<head>
    <title>测试Exception</title>

</head>
<body>
<%
//若在脚本块里写代码遭成异常,会将错误信息以乱码打印到终端
    //因此使用errorPage="error_page.jsp" 使异常转发到指定页面
    out.print(10/0);
%>
</body>
</html>

<%@ page contentType="text/html;charset=UTF-8" language="java"
isErrorPage="true" %>
<html>
<head>
    <title>exception内置对象</title>
    
</head>
<body>
异常消息为:<%=exception.getMessage()%></br>
异常消息的字符串表示为:<%=exception.toString()%></br>
</body>
</html>

指令与动作

page:是指向当前JSP页面本身,有点像SE中的this指针
include:,是一种静态引入,(大型网站顶部导航栏以及也叫版权所有页面可以采用引入的方式)定义一个可以被包含进其他页面中的jsp页面

<%@ include file = "URL"%>

动作语法:

<jsp:include page="URL" flush="true|false"/> 

flush表示被包含的页面是否要从缓冲区读取

…/代表上级目录
. 或者 ./代表当前目录
/代表根目录(webapp)

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<h1>这是一个导航栏,是网页的尾部信息</h1>

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<h1>这是一个尾部信息,当前访问时间为
<%
    LocalDateTime dateTime=LocalDateTime.now();
    out.print(dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));

%>
</h1>

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>这是测试include</title>
</head>
<body>
<%@include file="seggment/header.jsp"%>
<p>这是body的内容</p>
<p>这是body的内容</p>
<p>这是body的内容</p>
<p>这是body的内容</p>

<%--动作语句--%>
<%--flush="true":会自动调用缓冲区--%>
<jsp:include page="seggment/footer.jsp" flush="true">

</body>
</html>

forward动作

语法:

<jsp:forward page="URL"/>

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

param动作

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

登录界面的重定向


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%@include file="seggment/header.jsp"%>

<form id="loginForm" method="get" action="test_forward.jsp">
    <div>
    </div>
    <label for="userName">用户名:</label>
    <input id="userName" type="text" name="userName" value=""/>

    <label for="password">用户名密码</label>
    <input id="password" type="password" name="password" value="">
    <input type="submit" value="登陆">


</form>

<%@include file="seggment/footer.jsp"%>
</body>
</html>

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<jsp:forward page="test_user.jsp">
    <jsp:param name="email" value="hao123@192.com"></jsp:param>
    <jsp:param name="skill" value="java,c++"></jsp:param>
</jsp:forward>

</body>
</html>


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
request.setCharacterEncoding("UTF-8");
    String userName = request.getParameter("userName");
    String password=request.getParameter("password");

%>

<p>用户名:<%=userName%></p>
<p>用户密码:<%=password%></p>
<p>邮箱:<%=request.getParameter("email")%>></p>
<p>技能:<%=request.getParameter("skill")%>></p>

</body>
</html>
weixin063传染病防控宣传微信小程序系统的设计与实现+springboot后端毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值