JavaEE基础(一)JSP

JSP基础

JSP简介

JSP也是一种可以显示的页面类型,与HTML相似。JSP与HTML的区别就是:

  • JSP是动态页面
  • HTML是静态页面

什么是动态静态?

静态动态的区别就是是否随着时间、地点、用户操作的改变而而改变。

JSP是javaweb的一种技术,也就是JavaEE的一种技术。JavaEE与JavaSE之间最大的区别就是JavaSE是用的CS架构(Client Service),JavaEE用的是BS架构(Browser Service)。后者是使用浏览器作为客户端与服务端通过HTTP进行交互的。

CS架构的不足:

  • 如果软件要升级,那么所有软件都需要升级。例如:QQ、CF
  • 维护麻烦,需要维护每一台客户端软件
  • 每一台客户端主机都要安装客户端软件
  • 总而言之麻烦,但也有不可替代的好处

CS架构的好处:

  • CS更美观
  • 相应更快

BS架构的优点:

  • 服务端升级,客户端无需升级。只需要客服端自己升级即可。
  • 维护简单,只要服务器不崩就不会有麻烦。

JSP显示过程

JSP在编译的过程中会先转换成Java文件再进行运行。这个Java文件就是Servlet(后面会讲),Servlet是JavaEE提供的一种服务类,其可以进行请求的拦截并且进行服务操作。

怎么可以看出是先解释成java生成class后执行的呢?例如使用的tomcat服务器,可以通过以下文件路径找到。
在这里插入图片描述

使用IDEA创建的web项目,由于IDEA会将tomcat复制一份。所以可以在c:/user/.inteliJidea2018.2这些目录中找到这些class与java。
在这里插入图片描述

在访问时,客户端第一次访问JSP页面时会解释成class文件后再执行。所以我们往往打开第一个页面时速度慢,但是再一次访问会快(因为直接访问的class)。

Tomcat服务器

我们的web项目都要放在服务器上才能执行,tomcat是一个轻量级的服务器。我们需要将tomcat嵌入web项目才能运行项目。

Tomcat的文件架构:

  • bin:放可执行文件
  • conf:放配置文件
  • lib:放各种包
  • log:放日志文件(就是出错记录还有其他信息都在日志文件中)
  • temp:临时文件
  • webapps:可执行项目(开发的项目放在这里)
  • work:存放由jsp翻译成的java、class文件

tomcat的默认端口号是8080,有时会冲突,在配置文件中改一下端口号就好了。

JSP生命周期

JSP由四大生命周期,对应Servlet的五大生命周期。

  • 编译阶段:

    • 解析:判断jsp代码有无错误。
    • 翻译:将jsp代码翻译成servlet源码。
    • 编译:编译生成的servlet源码,生成类。
  • 初始化:初始化servlet。(对应servlet的初始化)

  • 服务:调用servlet实例的服务方法。(对应servlet的服务)

  • 销毁:调用servlet对象的销毁函数。

JSP页面元素

JSP是一种Servlet,由JSP的生命周期可知。

  1. 脚本书写(写java代码的地方)

代码定义:

<%
	//写java代码的地方,此处的代码是servlet的执行代码。
%>

代码的定义在编译后的servlet中的**_jspService**函数中,其中定义了java代码与html代码。

html代码使用的是out对象(PrintWriter类的实例)进行输出到页面上的。在servlet中的就是service部分的代码。

  1. 指令书写

代码定义:

<%@ %>
<%-- 例如: --%>
<%@page %>
<%@include %>
<%@taglib %>

以上三个都是指令。

page指令:

<%@page %>

page指令行中的属性:

  • language:指定jsp的脚本使用的语言。

  • import:导入jsp要引用的外部类。

  • pageEncoding:jsp页面的编码格式。

  • contentType:浏览器解析jsp的编码格式。

  1. 注释书写:
<%--在此处书写注释--%>

九大内置对象

​ jsp中直接定义的,不像在servlet中还需要进行类的实例化。

  1. out:进行页面上的输出显示。
  2. pageContext:页面上下文域对象,对应变量可以在真个页面中存储访问。
  3. request:请求域对象,与请求相关的对象。(客户端访问服务端是通过请求完成的)对应变量可以在相应请求中存储访问。
  4. response:与相应相关的对象。(每次客户端访问服务端后,服务端对向客户端相应一下)。
  5. session:会话域对象,对应变量可以在整个会话中存储访问。
  6. application:应用域对象,对应变量在整个项目中都可以存储访问。
  7. config:配置对象。
  8. page:起到jsp对应servlet的this的作用。
  9. exception:只有在错误页面中才能使用该对象。

request对象

request对象方法:
  1. String getParameter(String name);

​ 获取通过form、a标签获取到的数据。根据对应的name获取值。

  1. String[] getParameterValues(String name);

​ 当form中有input类型为checkbox时,这个时一个name多个option,所以获取时只能用获取值数组的形式。

  1. void setCharactorEncoding(String encod);

​ 设置请求的中值的编码格式。

  1. void getRequestDispatcher(String url).forword(request。 respond);

​ 请求转发,收到的请求中的数据原封不动的转发向url。

  1. ServletContext getServerContext();

​ 获取上下文对象。

  1. Cookie[] getCookies() ;

​ 获取客户端的cookie们。

request内容乱码问题
  1. 使用get方式时乱码
  • 将每个变量改变编码。
name = new String(name.getBytes("ios-8859-1"), "utf8");
//                原变量获取格式为ios-8859-1的byte,新变量为utf8格式

tomcat的默认编码时ios-8859-1。

  • 修改server.xml配置文件的编码格式。(在改端口的地方最后加上URIEncoding=“utf-8”)
  1. 使用post方式时乱码

​ 在获取变量之前,使用request的修改编码。

request.setCharacterEncoding("utf-8");

在tomcat8中默认编码改为了utf-8。

response对象及方法

​ 当收到用户请求后会给予用户一个相应。

response对象方法:

  1. void addCookie(Cookie cookie);

​ 服务端向客户端请求中携带cookie。

  1. void setContentType(String Encoding);

​ 设置相应编码。

客户端在接受到服务端的相应,会将信息显示在jsp页面上。响应编码就是在服务端相应客户端浏览器时,按照那种格式将信息进行翻译并显示。

例如:

response.setContentType("text/html; charset=utf-8");

就是告诉客户端,我用的时html格式解析显示的。其Encoding时MIME格式。

值得注意的时:服务端与客户端之间的交流是依靠Http协议进行网络传输的。

  1. void sendRedirect(String url);

​ 重定向到url页面。

重定向与请求转发的区别

重定向请求转发
地址栏是否改变改变不改变
是否保留上次收到请求时的数据不保留保留
请求的次数21

在这里插入图片描述

在这里插入图片描述

可以从以上看出两者的区别。

session对象

​ 在讲session对象之前不得不提一下与session对象类似的存在于客户端的域对象,Cookie。

cookie对象

​ **Cookie对象存在于客户端浏览器,并且cookie对象时服务端产生的,然后发送给客户端由客户端进行存储。**并且在服务端中并没有cookie内置对象,所以必须显示new一个。

例如:

<!--在doGet或doPost函数中-->
Cookie cookie1 = new Cookie("name", "zs");
Cookie cookie2 = new Cookie("age", 29);
reoponse.addCookie(cookie1);
response.addCookie(cookie2);



<!--在jsp中接收获取cookie-->
Cookie[] cookies = request.getCookies();

说白了cookie就是一种键值对的数据结构(key:value)。

cookie方法:

  1. String getName();获取键名。
  2. String getValue();获取值。
  3. void setMaxAge(int time);设置最大生存时间,过了时间cookie失效。

值得注意的时:在客户端域服务端建立连接后服务端会根据session的sessionId生成一个Cookie,name为JSessionId(sessionId的值等于JSessionId)。也就是说在建立连接后使用request.getCookies必会有一个sessionId的cookie。

​ 在自动登录时,其实就是判断SESSIONID与JSESSIONID是否相同。相同就说明这个用户不是第一次登录了,直接自动登录。(第一次登录会创建一个SESSIONID=JSESSIONID)当cookie失效后,再一次登录时没有cookie了就会再次产生一个连接,生成一个新的SESSIONID与新的JSESSIONID。(当session时间长了会自动销毁,所以不用担心cookie失效后新session会使服务端爆炸)。

如果没有对cookie设置MaxAge,那默认保存在浏览器缓存中,当关闭浏览器就会清除。

session对象

​ 每个用户都会产生一个session,session的JSESSIONID与cookie的SESSIONID保证了不同用户访问服务端时之间互不影响。

session存在于服务端。

什么时会话?

​ 当你使用浏览器点进系统后,直到关闭浏览器。这是一次会话。(不关闭浏览器再次进入系统仍是同一次会话)
在这里插入图片描述

session方法:

  1. String getID();获取JSESSIONID。
  2. boolean isNew();判断用户是否是第一次访问。
  3. void invalidate();使session失效。
  4. void setMaxInactiveInterval(int time);设置最大非活动时间。(最大非活动时间:用户在该时间内不动就会使得session失效。也就是退出登录了。)
  5. void setAttribute(key,value);session也是一个域对象,可以往其中设置属性。
  6. Object getAttribute(key);根据key获取值。得到值需强转一下,才能得到所需要的类型。

application对象

​ 可以获取当前项目的所有信息。

  1. String getContextPath();获取虚拟路径。
  2. String getRealPath(String contextPath);获取绝对路径。

四大范围对象

对象作用域
page当前页面有效
request当前请求有效
session当前会话有效
application当前项目有效

以上四对象作用域从高到低,作用域依次增加。

既然都是范围对象,所以都有一下两函数:

  1. void setAttribute(String name, Object value);
  2. Object getAttribute(String name);
  3. void removeAttribute(String name);

在使用这几个对象时,作用域越小越好(开销少)。

对象作用域
page当前页面有效
request当前请求有效
session当前会话有效
application当前项目有效

以上四对象作用域从高到低,作用域依次增加。

既然都是范围对象,所以都有一下两函数:

  1. void setAttribute(String name, Object value);
  2. Object getAttribute(String name);
  3. void removeAttribute(String name);

在使用这几个对象时,作用域越小越好(开销少)。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值