javaweb学习笔记01-jsp、Tomcat、JSP9大内置对象

JavaWeb

1、JSP(动态网页)

1.1.1静态,动态区分

1.不用和是否有“动感”混为一谈

2.是否随时间,地点,用户操作的改变而改变

动态网页:需要使用到服务端脚本语言就(JSP)

1.1.2架构

CS:Client Server

CS不足:

a. 如果软件升级,那么全部软件都需要升级

b. 维护麻烦:需要维护每一台客户端软件

c.每一台客户端都需要安装客户端软件

BS:Browser Server

客户端可以通过浏览器直接访问服务端

注意:BS和CS各有优劣

1.1.3 Tomcat解压后目录

bin:可执行文件(startup.bat shutdown.bat)

conf:配置文件(server.xml)

lib:tomcat以来的jar文件

temp:临时文件

webapps:可执行的项目(将我们开发的项目放入该目录)

work:存放有jsp翻译成的java,以及编辑成的class文件(jsp->java->class)

1.1.4 配置Tomcat

a. 配置jdk(必须配置JAVA_HOME)

b.配置catalina_home(大小写无所谓)

双击bin/startup.bat启动Tomcat常见错误:

​ 1.可能与其他服务的端口号冲突。Tomcat端口号默认8080(此端口号较为常见,容易冲突),建议修改此端口号(8888)

修改端口号:在配置文件修改

1.1.5 访问Tomcat

默认访问路径:D:\java\tomcat\apache-tomcat-8.5.47\webapps\ROOT

修改默认访问路径:设置默认访问界面。D:\java\tomcat\apache-tomcat-8.5.47\webapps\host-manager\WEB-INF\ 下的web.xml中welcom-file-list

常见状态码

200:一切正常

300/301:页面重定向(跳转)

404:资源不存在

403:权限不足(如果访问a目录,但是a目录设置不可见)

500:服务器内部错误(代码有误)

新建一个web项目必须有的文件:

WEB-INF目录下的文件:

1.web.xml

2.classees目录:放置字节码文件

3.lib:三方依赖库(jia包)

jsp:就是在HTML中嵌套java代码 用<% java代码 %>

1.1.6虚拟路径

将web项目配置到webapps以外的目录

a.方式一

在D:\java\tomcat\apache-tomcat-8.5.47\conf\server.xml中

<Engine defaultHost="localhost" name="Catalina">
  <Realm className="org.apache.catalina.realm.LockOutRealm">
    <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
  </Realm>

    <!--Host 中设置虚拟路径appBase(路径) name(名字)-->
  <Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">
      
       <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" 
               pattern="%h %l %u %t &quot;%r&quot; %s %b" 
               prefix="localhost_access_log" 
               suffix=".txt"
       />

      <!--在其中添加Context标签(区分大小写)docBase:实际路径,path:虚拟路径(绝对路径或者相对路径)-->
      <!--相对路径/Servlet2.5Project1 相对于D:\java\tomcat\apache-tomcat-8.5.47\webapps-->
      <!--访问/Servlet2.5Project1 
		相当于访问D:\java\tomcat\apache-tomcat-8.5.47\wtpwebapps\Servlet2.5Project1-->
      <Context docBase="D:\java\tomcat\apache-tomcat-8.5.47\wtpwebapps\Servlet2.5Project1" 							path="/Servlet2.5Project1" 
            reloadable="true" 
            source="org.eclipse.jst.jee.server:Servlet2.5Project1"
       />
      
  </Host>
</Engine>

​ 缺点:配置完后,需要重启

b.方式二

​ 在D:\java\tomcat\apache-tomcat-8.5.47\conf\Catalina\localhost下建立 项目名.xml写入 当项目名是ROOT时 可以直接访问项目名.jsp

<Context docBase="D:\java\tomcat\apache-tomcat-8.5.47\wtpwebapps\Servlet2.5Project1" 							path="/Servlet2.5Project1" 
            reloadable="true" 
            source="org.eclipse.jst.jee.server:Servlet2.5Project1"
       />

​ 注意:不重启Tomcat也可以访问

1.1.7 虚拟主机

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6KeVzp6F-1608624299823)(C:\Users\陈思源\AppData\Roaming\Typora\typora-user-images\image-20201220165346406.png)]

通过WWW.test.com访问本机

a.conf/server.xml中

修改defaultHost
<Engine defaultHost="localhost" name="Catalina">
<Host appBase="D:\java\tomcat\apache-tomcat-8.5.47\wtpwebapps\Servlet2.5Project1" autoDeploy="true" name="www.test.com" unpackWARs="true">
  <!--在其中添加Context标签(区分大小写)docBase:实际路径,path:虚拟路径(绝对路径或者相对路径)-->
  <!--相对路径/Servlet2.5Project1 相对于D:\java\tomcat\apache-tomcat-8.5.47\webapps-->
  <!--访问/Servlet2.5Project1 
	相当于访问D:\java\tomcat\apache-tomcat-8.5.47\wtpwebapps\Servlet2.5Project1-->
  <Context docBase="D:\java\tomcat\apache-tomcat-8.5.47\wtpwebapps\Servlet2.5Project1" 							path="/" 
   />
</Host>

b.C:\Windows\System32\drivers\etc中hosts文件。增加映射

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XGuSElt9-1608624299824)(C:\Users\陈思源\AppData\Roaming\Typora\typora-user-images\image-20201220165857260.png)]

网站默认端口是:80

端口默认是80时不用加端口

结果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Fod1ucuK-1608624299827)(C:\Users\陈思源\AppData\Roaming\Typora\typora-user-images\image-20201220170629304.png)]

流程:

​ www.test.com->hosts找映射关系->server.xml找Engine的defaultHost->通过“/”映射到"D:\java\tomcat\apache-tomcat-8.5.47\wtpwebapps\Servlet2.5Project1"

1.1.7 JSP执行流程

​ 客户端给服务端发送请求->第一次访问:服务端将jsp翻译成java,再将java编译成class文件 第二次访问:直接访问class文件(如果服务端代码修改了,将会在访问时重新翻译、编译)

jsp->java(Servlet文件)->class

jsp和Servlet可以相互转换

​ 因为第一次请求服务端 会有翻译和编译的过程,因此比较慢;后续访问可以直接访问class文件,所以比较块。但是如果服务端修改了代码,则会重新翻译、编译。

2 Eclipse开发Web项目(jsp项目)Tomcat

在Eclipse中创建的Web项目:

​ 浏览器可以直接访问WebContent中的文件,但是WEB-INF中的文件,无法通过客户端(浏览器)直接访问,只能通过跳转(请求转发)来访问。

注意:并不是任何的内部的跳转都能访问WEB-INF。原因时跳转有2中方式:请求转发、重定向。

配置Tomcat运行时环境

第一次在编译器中添加Tomcat环境

a. 在D:\java\tomcat\apache-tomcat-8.5.47\lib找到jar包servlet-api.jar 加入项目的构建路径。

b. 右键项目->Build Path->Add library -> Server Runtime

统一字符集编码

a.编码分类:

​ 设置jsp文件的编码(jsp文件中的pageEncoding属性):jsp-java

设置浏览器读取jsp文件的编码(jsp文件中的content属性)

一般将上述设置成一致的编码,推荐使用UTF-8(不区分大小写)

文本编码:

i. 让整个eclipse中的文件 统一设置

ii. 设置某个项目

iii.设置某个文件

JSP的页面元素:HTML java代码(脚本Scriptlet)指令 注释

a.脚本Scriptlet

​ i. <%

​ 局部变量、java语句

​ %>

​ ii.<%!

​ 定义全局变量、方法

​ %>

​ iii. <%=输出表达式%>

一般而言,修改web.xml、配置文件、java 需要重启Tomcat服务,但是修改JSP\html\css\js,不需要重启。

注意:out.println()不能回车,要想会回车:"
"即out.print() <%=%>可以直接解析HTML代码

b.指令

page指令

<%@ page …%>

page置顶的属性:

language:JSP页面使用的脚本语言

import:导入类包

pageEncoding:JSP文件自身编码 JSP->java

contentType:浏览器解析JSP的编码

<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" import="java.util.Date"%>

c.注释:

  • html注释 可以被客户通过浏览器看到
  • java注释// // 文本注释 看不到
  • JSP注释<% %> 看不到

3、JSP9大内置对象(自带的,不需要new 也能使用的对象)

3.1out:输出对象,向客户端输出内容

3.2 request:请求对象

请求对象:存储“客户端向服务端发送的请求信息”,数据只会在同一次请求有效

request对象常见的方法:

String getParameter(String name):根据请求的字段名key,返回value(根据input name值,拿input value值)

String[] getParameterValues(String name):根据请求的字段名key,返回多个字段值value(checkbox)

void setCharacterEncoding(“编码格式utf-8”):设置post请求编码(Tomcat7以前默认ios-8859-1,Tomcat8及以后改为UTF-8)

getRequestDispatcher(“b.jsp”).forward(request,response);请求转发的方式跳转页面:A->B

ServerletContext getServerContext():获取项目的ServerletContext对象

get提交方式:method=“get”、超链接()和地址栏 请求方式默认都属于get提交方式

get和post请求方式的区别:

a.get方式在地址栏 显示请求信息(但是地址栏能够容乃的信息有限,4-5KB,如果存在大文件就会报错)

b.文件上传操作必须是post

推荐使用post

统一请求的编码 request:

get方式请求 如果出现乱码,解决:

a. 统一每个变量的编码(不推荐)

​ new String(旧编码,新编码)

​ name=new String (name.getBytes(“iso-8859-1”),“utf-8”);

b.修改server.xml,一次性修改更改Tomcat默认get提交方式的编码(UTF-8)建议使用Tomcat时,首先在server.xml中统一get方式的编码URLEncoding=“UTF-8”

post: request.setCharacterEncoding(“UTF-8”)

3.3response:响应对象

常用方法:

void addCookie(Cookie cookie);服务端向客户端增加Cookie

void sendRedirect(String location)throw IOException:页面跳转的一种方式(重定向)

void setContentType(String type)设置服务端的响应编码(ContentType类型)

注意:重定向会导致页面跳转时数据丢失,地址栏改变;请求转发,可以获取数据,并且地址栏没有改变(仍然保持转发时的页面)

请求转发重定向
地址栏是否改变不变改变
是否保留第一次请求时的数据保留不保留(具有偶然性)
请求的次数12

3.4 session:会话对象

3.4.1Cookie(客户端,不是内置对象):

a.不是内置对象,要使用必须new

b.但是,服务端会自动生成一个(服务端自动new一个cookie)name=JSESSIONID的cookie并返回给客户端。

Cookie时有服务端生成的,再发送给客户端保存。相当于本地缓存的作用:客户端->服务端

​ 作用:可以提高访问服务端的效率,但是安全性较差

Cookie:name=value

javax.servlet.http.Cookie

public Cookie(String name,String value)

String getName();获取name

String getValue();获取value

void setMaxAge(int expiry);最大有效期(秒)

服务端准备Cookie:

​ response.addCookie(Cookie cookie)

页面跳转(转发、重定向)

​ 客户端获取cookie:request.getCookies();(只能获取全部的Cookie,不能获取单独的Cookie)

a.服务端增加cookie:response对象;客户端获取对象:request对象

b.不能直接获取某一个单独对象,只能一次性将全部的cookie拿到

​ 客户端在第一次请求服务端时,如果服务端发现,此请求没有JSESSIONID,则会创建一个name=JSESSIONID的cookie,并发挥给客户端。

通过F12可以发现,除了自己设置的Cookie对象外,还有一个name为JSESSIONID的cookie

建议cookie只保存英文和数字,否则需要进行编码、解码

3.4.2 session:会话

a.浏览网站:开始-关闭

b.购物:浏览、付款、退出

c.电子邮件:浏览、写邮件、退出 开始-结束

session运行机制:

​ 客户端第一次请求服务端时,服务端会产生一个session对象(用于保存该客户的信息),并且每个session对象都会有一个唯一的sessionID(用于区分其他session);服务端由会产生一个cookie,并且该cookie的name=JSESSIONID,value=服务端SESSIONID的值,然后服务端会在响应客户端的同时将该cookie发送给客户端,至此 客户端就有了一个cookie(JSESSIONID)。因此,客户端的cookie就可以和服务端的session一一对应(JSESSIONID=SESSIONID)。

​ 第二/n次请求服务端时:服务端会先用客户端cookie中的JSESSIONID和服务端中的session中的SESSIONID匹配。如果匹配成功,则说明此用户不是第一次访问,无需登录。

3.4.3 session重点(面试常问)

a.session存储在服务端

b.session是在同一个用户(客户)请求时共享

c.实现机制:第一次客户请求时,产生一个SESSIONID并复制给cookie的JSESSIONID,然后发个客户端。最终,通过session的SESSIONID与cookie的JSESSIONID产生一一对应的关系。

3.4.4 session常用方法

String void getId();获取SESSIONID

Boolean isNew();半段是否是新用户(第一次访问)

void invalidate();使session失效(退出登录,注销)

void removAttribute(Object args)移除session某一个属性

void setAttribute();设置属性

Object getAttribute();获取属性

void setMaxInactiveInterval(秒)设置最大有效非活动时间

int getMaxInactiveInterval();获取最大有效非活动时间(不动网页的时间)

3.4.5 session和cookie的区别(面试常考)
sessioncookie
保存的位置服务端客户端
安全性较安全较不安全
保存的内容ObjectString

3.5 application:全局对象

3.5.1常用的方法

String getContextPath() 虚拟路径

String getRealPath(String name);绝对路径(虚拟路径的相对路径)

3.6 pageContext JSP页面容器

3.7 config配置对象(服务器配置信息)

作用:做一些配置信息

3.8 page 当前JSP页面对象(相当于java中的this)

3.9 exception 异常对象

3.10 总结

3.10.1四种范围对象(小->大)
对象有效范围解释
pageContext JSP页面容器(实际上是page对象,容易与page混淆)当前页面有效当前页面有效(页面跳转后无效)
request 请求对象同一次请求有效同一次请求有效,其他请求无效(请求转发后有效,重定向后无效)
session 会话对象同一次会话有效同一次会话有效(无论怎么跳转,都有效;关闭/切换浏览器后无效:从 登录->退出 之间全都有效)
application 全局对象全局有效(整个项目有效)全局变量;整个项目运行期间都有效(切换浏览器仍然有效);关闭项目、其他项目之后就无效 注意:多个项目共享、重启后仍然有效:JNDI

以上四个对象共有的方法:

Object getAttribute(String name):根据属性名,或者属性值,来取值

void setAttribute(String name,Object obj):设置属性值(新增,修改)

例如:setAttribute(“a”,“b”)如果a对象之前不存在,则新建一个a对象;如果a之前就已经存在,则将a的值改为b

void removeAttribute(String name)根据属性名,删除对象

注意:

  1. 以上的四个范围对象,通过setAttribute()赋值,通过getAttribute()取值
    切换浏览器后无效:从 登录->退出 之间全都有效) |
    | application 全局对象 | 全局有效(整个项目有效) | 全局变量;整个项目运行期间都有效(切换浏览器仍然有效);关闭项目、其他项目之后就无效 注意:多个项目共享、重启后仍然有效:JNDI |

以上四个对象共有的方法:

Object getAttribute(String name):根据属性名,或者属性值,来取值

void setAttribute(String name,Object obj):设置属性值(新增,修改)

例如:setAttribute(“a”,“b”)如果a对象之前不存在,则新建一个a对象;如果a之前就已经存在,则将a的值改为b

void removeAttribute(String name)根据属性名,删除对象

注意:

  1. 以上的四个范围对象,通过setAttribute()赋值,通过getAttribute()取值
  2. 以上四个范围对象,尽量使用最小的范围。因为对象的范围越大,造成的性能损耗越大。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值