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.普通注释,能被客户端查看源码时看到


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" %>


    九九乘法表


<%-- 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("

").append("基于表达式实现的九九乘法表").append("

"); 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("
"); } return sb.toString(); } %> <%--利用表达式打印输出--%> <%=printTable()%>
<%! 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+"    "); } out.println("
"); } } %>

九九乘法表:基于脚本输出

<% printTable2(out); %>

JSP生命周期

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

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" %>


    欢迎登陆



JSP登陆演示

request对象

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


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


    登陆界面



<%
String userName=request.getParameter("userName");
String password=request.getParameter("password");
if(userName==null||password==null){
    out.print("

"); out.print("请输入用户名和密码"); out.print("

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

getParameter与getParameterValues方法使用


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


    用户选择技能



用户选择

用户名
技能 <%--多选框checkbox 单选框:radio --%> java c语言 c++ php

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


    处理Request Form提交数据



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

%>

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

用户技能

    <% for (String skill : skills) { %>
  1. <% out.print(skill); %>
  2. <% } %>

request对象的其他方法:

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

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()%>
从Session中获取用户名:<%=session.getAttribute("userName")%>
Session过期时间:<%=session.getMaxInactiveInterval()%>秒
重新设置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 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" %>


    测试Exception



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



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


    exception内置对象
    


异常消息为:<%=exception.getMessage()%>
异常消息的字符串表示为:<%=exception.toString()%>

指令与动作

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

<%@ include file = "URL"%>

动作语法:

 

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

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

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

这是一个导航栏,是网页的尾部信息

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

这是一个尾部信息,当前访问时间为 <% LocalDateTime dateTime=LocalDateTime.now(); out.print(dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); %>

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


    这是测试include


<%@include file="seggment/header.jsp"%>

这是body的内容

这是body的内容

这是body的内容

这是body的内容

<%--动作语句--%> <%--flush="true":会自动调用缓冲区--%>

forward动作

语法:


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

param动作

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

登录界面的重定向


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


    Title


<%@include file="seggment/header.jsp"%>

<%@include file="seggment/footer.jsp"%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title



    
    






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


    Title


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

%>

用户名:<%=userName%>

用户密码:<%=password%>

邮箱:<%=request.getParameter("email")%>>

技能:<%=request.getParameter("skill")%>>

你可能感兴趣的:(JavaWeb---jsp基础)