JavaWeb学习--JSP

动态与静态

动态,并不是动感的效果,而是网页会处理用户请求并反馈,会随着时间的变化做出相应的改变,比如我们看到的天气预报,打开页面就是当日的天气。
动态网页是运行在服务端的,根据不同用户,不同时间返回不同的网页。
静态网页不是随时改变的,用于唯一url,每个网页文件都是独立的

Tomcat目录结构

tomcat三个核心:
(1)Web容器—处理静态页面;
(2)catalina — 一个servlet容器-----处理servlet;
(3)还有就是JSP容器,它就是把jsp页面翻译成一般的servlet。
Tomcat 服务器是一个开源的轻量级Web应用服务器,在中小型系统和并发量小的场合下被普遍使用,是开发和调试Servlet、JSP 程序的首选。
在Tomcat目录结构有不同用处:
目录结构一般我们创建的网页在webapps中
在Tomcat/webapps下的每个项目文件可能会有一个WEB-INF文件,是Java的WEB应用的安全目录,客户端无法访问,只有服务端可以访问。

WEB-INF文件目录:

  • Web.xml项目部署文件
  • classes文件夹存放字节码文件(*.class)
  • lib文件夹,存放jar包

一般Tomcat端口默认8080,如果和其他程序发生冲突我们可以找到conf文件找到server.xml
修改端口
在这里插入图片描述


JSP

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

动态网站开发技术对比:

  • Jsp: Java平台,安全性高,适合开友大型的,企业级的weD业用任厅。
  • Asp.net:.Net平台,简单易学。但是安全性以及跨平台性差。
  • Php:简单,高效,成本低开发周期短,特别适合中小型企业的Web应用开发。(LAMP : Linux+ Apache+ MySQL+PHP )

JSP页面元素的构成:

  1. 注释
  2. 声明
  3. 指令
  4. 静态内容
  5. 表达式
  6. 小脚本

jsp指令

1、page指令

语法:<%@ page 属性1=“属性值” 属性2=“属性值”……属性n=“属性值”%>

属性描述默认值
language指定JSP页面使用的脚本语言java
import通过该属性来引用脚本语言使用的类文件
contentType用来指定JSP页面所采用编码方式text/html IOS-8859-1

2、include 页面包含

指令语法

<%@ include file=“URL”%>

动作语法:<%@include page=“URL” flush=“true/false”/>
page表示要包含页面 flush表示包含的页面是否从缓冲区读入

区别:
在这里插入图片描述jsp:include动作在请求期间被执行,而include指令在编译期页面间被执行

3、taglib 引入标签库

JSP注释

在JSP页面的注释:

  • HTML格式的注释:<–html–>//客户端可见(查看源代码)
  • JSP注释:<%–jsp–%>//客户端不可见
  • JSP脚本注释://单行 /**/多行 //客户端不可见

JSP脚本

<%
	out.println("大家好")
%>

JSP基础语法

<%! Java代码%>

<%!
	String s = "zhang";
	int add(int x,int y){
		return x+y;
	}
%>

<%! =表达式%> //主要表达式后不写分号

你好<%=s%>
x+y=<%=add(1,2)%>

根据上面代码可知我们在页面显示:你好zhang x+y=3


生命周期

JSP生命周期就是从创建到销毁的整个过程,类似于servlet生命周期,区别在于JSP生命周期还包括将JSP文件编译成servlet。

解析阶段

Servlet容器解析JSP文件代码,如果有语法错误,就会向客户端返回错误信息

翻译阶段

Servelet容器把JSP文件翻译成Servelet源文件

编译阶段

Servelet容器编译Servelet源文件,生成servelet

初始化阶段

加载与JSP对应的Servelet类,创建其实例,并调用它的初始化方法

运行时阶段

调用与JSP对应的Servelet实例的服务方法

销毁阶段

调用与JSP对应的Servelet实例的销毁方法,然后销毁Servelet


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


jsp语法小练习:

页面中打印九九乘法表:
java代码版:

//java语句内置
<%!
    String printMultiTable() {
        String s ="";
        for (int i = 1; i <= 9; i++) {
            for (int j = 1; j <= i; j++) {
                s+=i+"*"+j+"="+(i*j)+"&nbsp;&nbsp;&nbsp;&nbsp;";
            }
            s += "<br/>";
        }
        return s;
    }
%>
<%= printMultiTable() %>//表达式

jsp脚本版:

<%!
    void print(JspWriter out)throws IOException {
        for (int i = 1; i <= 9; i++) {
            for (int j = 1; j <= i; j++) {
                out.print(i+"*"+j+"="+(i*j)+"&nbsp;&nbsp;&nbsp;&nbsp;");
            }
            out.print("<br/>");
        }
    }
%>
<%print(out);%>

JSP状态管理-Cookie

Cookie:是Web服务器保存在客户端的一系列文本信息
典型应用一:判定注册用户是否已经登录网站
典型应用二:“购物车”处理

作用:

  • 对特定对象跟踪
  • 保存用户浏览记录与习惯
  • 简化登录
    安全风险:容易泄露用户信息

Cookie创建与使用

创建Cookie对象
写入对象
读取对象

Cookie cookie = new Cookie(String key,Object value);
response.addCookie(newCookie);
Cookie[] cookies = request.getCookies();

在这里插入图片描述

JSP内置对象

  • out
  • request
  • response
  • session
  • application
  • 不常用:
    – Page
    – PageContext
    – exception
    – config

out

室友情商好低(个别)

<%
    out.print("<h2>静夜思</h2>");
%>
缓冲区大小:<%=out.getBufferSize()%>byte<br/>
缓冲区剩余大小:<%=out.getRemaining()%>byte<br/>
是否自动清空缓冲区:<%=out.isAutoFlush()%><br/>

在这里插入图片描述


GET与POST

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

GET:以明文的方式通过URL提交数据,数据在URL中可以看到。提交的数据最多不超过2KB。安全性较低但效率比post方式高。适合提交数据量不大,安全性不高的数据。比如∶搜索、查询等功能。

POST: 将用户提交的信息封装在HTML HEADER内。适合提交数据量大,安全
性高的用户信息。比如∶注册、修改、上传等功能。


request对象

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

在这里插入图片描述
在这里插入图片描述
这里需要知道,对于一个表单我们要知道其属性的用法:

表单的数据提交的方式method/http请求数据的方式有两种:(写在中)
​get提交:会将用户的信息显示在url地址栏中,不安全,最大长度不能超过255个字符
post提交:不会将用户的数据显示在url地址栏中,安全,提交数据量大

 <form>中action属性:指数据提交到的路径地址
 <input />中type属性的值:

- ​ text(文本类型)

- ​ password(密码类型)

- ​ checkbox(复选框)

- ​ radio(单选框)

- ​ submit(表单数据的提交)

- ​ reset(重置数据)

- 表单轮廓outline: 0/none;(取消轮廓)
outline:5px soild red;

例子:

<form action="index.jsp" method="get" class="login">
  <p>login</p>
  <input name="account" placeholder="用户名" type="text">
  <input type="password" name="password" placeholder="密码">
  <input type="submit" class="btn" value="登录">
</form>

response对象

response对象包含了响应客户请求的有关信息,但在JSP中很少直接用到它。它是HttpServletResponse类的实例。response对象具有页面作用域,即访问一个页面时,该页面内的response对象只能对这次访问有效,其它页面的response对象对当前页面无效。常用方法如下:

在这里插入图片描述使用PrintWriter生成的对象打印的信息总是先于out

<%
    out.print("<h1>这是out对象输出</h1>");
    PrintWriter outer = response.getWriter();
    outer.print("<h2>这是outer(PrintWriter)对象输出");
%>

在这里插入图片描述
当然我们可以使用flush方法来解决这个问题

<%
    out.print("<h1>这是out对象输出</h1>");
    out.flush();
    PrintWriter outer = response.getWriter();
    outer.print("<h2>这是outer(PrintWriter)对象输出");
%>

在这里插入图片描述


请求转发与请求重定向

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

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

重定向∶你先去了A局,A局的人说:“这个事不归我们管,去B局”,然后,你就从A退了出来,自己乘车去了B局。
转发∶你去了A局,A局看了以后,知道这个事情其实应该B局来管,但是他没有把你退回来,而是让你坐一会儿,自己到后面办公室联系了B的人,让他们办好后,送了过来

如果我们在表单中action里填写response.jsp,在response中调用重定向方法response.sendRedirect()方法给request.jsp,此时在request使用表达式得不到用户名和密码。

response.jsp

<%
	response.sendRedirect("request.jsp");
%>

request.jsp

用户名:<%=request.getParameter("account")%>
<br/>
密码:<%=request.getParameter("password")%>
<hr/>

显示空,且地址栏会变

如果使用转发在response中使用

request.getRequestDispatcher(“request.jsp”).forward(request,response);

显示request内容地址栏不变(response.jsp)


session

session表示客户端和用户端的一次会话,Web中的session指的是用户在浏览某个网站时,从进入网站到浏览器关闭所经过的这段时间,也就是用户浏览这个网站所花费的时间

session对象是HttpSession类实例

在这里插入图片描述

session生命周期

创建:

当客户端第一次访问某个jsp或者Servlet时候,服务器会为当前会话创建一个SessionId,每次客户端向服务端发送请求时,都会将此SessionId携带过去,服务端会对此SessionId进行校验。

活动:

  • 某次会话当中通过超链接打开的新页面属于同一次会话。
  • 只要当前会话页面没有全部关闭,重新打开新的浏览器窗口访问同一项目资源时属于同一次会话。
  • 除非本次会话的所有页面都关闭后再重新访问某个Jsp或者Servlet将会创建新的会话。
    注意原有会话id依然存在,只是旧的Session仍然存在于服务端,只不过再也没有客户端会携带它然后交予服务器校验

销毁:

三种方法:
1.调用session.invalidate()方法
2.Session过期(超时)
3.服务器重新启动

设置Session超时

  1. session.setMaxInactiveInterval
  2. 在web.xml配置:
<session-config>
	<session-tionout>
	分钟
	</session-timeout>
</session-config>

application

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

常用方法:
在这里插入图片描述


Page

page对象就是指向当前JSP页面本身,有点像类中的this指针,它是java.lang.Object类的实例。常用方法如下:

在这里插入图片描述


pageContext

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

在这里插入图片描述

config

config对象是在一个Servlet初始化时,JSP引擎向它传递信息用的,此信息包括
Servlet初始化时所要用到的参数(通过属性名和属性值构成)以及服务器的有关信息(通过传递一个ServletContext对象),常用方法如下:

在这里插入图片描述

exception

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

在这里插入图片描述

Session与Cookie对比

在这里插入图片描述
cookie保存对象大小有限制

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值