web知识点

本文详细介绍了JavaWeb的工作原理,包括HTTP请求与响应流程、Servlet的基础知识及其在服务器端的作用,探讨了会话管理机制如Cookie和Session的使用,并深入讲解了JSP的基本概念和技术要点。
摘要由CSDN通过智能技术生成

第一章    Java Web工作原理

(一)       HTTP请求流程及包含的内容:

1.      客户端与Web服务器建立连接;

2.      客户端发送HTTP请求;包括:

1)        请求行:由请求的HTTP方法、请求的URLHTTP版本 组成,中间用空格分开;

2)        请求头:用来传递请求的元信息。由用户代理资料、可接收的格式、语言、内容编码等组成;

3)        空行:发送回车符和换行。分割请求头和消息体;

4)        消息体:HTTP请求中带有查询字符串时,如果是GET方法,查询字符串或表单数据附加在请求行中,那么消息体中就没有内容;如果是POST方法,查询字符串或表单数据就附加在消息体中;

3.      服务器端接收客户端HTTP请求,生成HTTP响应回发;

1)        状态行:由HTTP协议版本、响应状态码、响应描述组成;

2)        响应头:内容类型(Content-Type)描述(MIME类型)、内容长度、时间邮戳、服务器你信息、内容最后更改时间;

3)        空白行:发送回车符和换行。分割请求头和消息体;

4)        消息体:Web服务器会把要发送给客户端的文档信息放在消息体中;

4.      服务器端关闭连接,客户端解析回发响应,恢复页面;

 

Servlet特点:

1.        Servlet是常规的Java代码。代码中用了一些新的API;

2.        Servlet不属于J2SE,它属于单独的规范;

3.        Servlet对标准的类(HttpServlet)进行了扩展;

4.        Servlet没有main();

Servlet在服务器端工作执行的任务:

1.        读取客户端发送的显式和隐式数据;

2.        生成结果;

3.        向客户端发送显式数据(即文档)和隐式数据(HTTP响应数据);

Web容器对Servlet的支持包括:

1.        通信支持;

2.        生命周期管理;

3.        多线程支持;

4.        JSP支持;

5.        处理安全性;

第二章    Servlet基础

概念:

Java Servlet是运行在Web服务器或应用服务器上的Java程序,是在Web上创建动态内容的有效的解决方案;

Servlet规范的组成:

1.        Web应用程序:

2.        Servlet和HTTP Servlet:

3.        过滤器:

4.        安全:

5.        国际化:

Servlet API

1.        Servlet API是专门用来开发Servlet的java类和接口,Web容器和Servlet之间用API进行通信;

2.        一个Servlet程序就是运行服务器端的一个Servlet APId java类,定义了与容器的一些规范;

3.        Javax. Servlet。

第三章     HTTP响应包括:

 

第四章    使用Servlet处理HTTP响应

 

Hidden

 

Cookie

 

Cookie是客服端的技术,程序把每个用户的数据都通过K-V的方式保存到cookie。下次请求的时候,将cookie放到请求头里面再次访问服务器,服务器就可以根据cookie里面的内容来判断当前用户的状态。

 

   会话:打开浏览器,通过超链接或者按钮访问服务,获取内容,关闭浏览器,的过程,称为会话;

 

获取cookie:

Cookie[] cookie=request.getCookies();返回数组

 

if(cookie==null){

创建一个cookie:

Cookie cook=new Cookie(“名字”,“值”);

 

Cookie创建好后,要将cookie发送回客户端保存:

response.addCookie(cook);

 

Cookie的时间默认是会话结束就消失,设置过期时间,会将cookie保存到硬盘:

销毁cookie设置setMaxAge(0);//保存时间为0秒;

cook.setMaxAge(秒的时间长度);

           }

 

Session

session是服务器端的技术,利用这个技术,我们可以为每一个浏览器(用户)创建一个独特的session对象。

 

Session工作流程:

客户端请求服务器创建一个Session,将SessionID保存在cookie里面。再将cookie发送回客户端;客户端在再次请求,就将cookie发送到服务器,服务器取出sessionID去匹配所有的session,返回当前匹配到的session对象;

 

1、创建一个Session对象,getSession()创建好了一个Session;直接返回一个Httpsession对象:

 

——匹配成功,就返回当前匹配的session对象,匹配失败,创建一个session;

HttpSession session = request.getSession();

 

——自动匹配sessionID,匹配成功就返回session,匹配失败就返回null;

HttpSession session = request.getSession(false);

——如果session==null;可以考虑要不要创建session;

 

——获取到cookie里面的id和session进行匹配

底层代码:int id = session.getId();

 

——isNew()方法:判断当前session是否为新创建的session:

if(session.isNew()){是新的session

    }else{ 是久的session  }

3、在session对象下存储信息

配置:session.setAtrribute(“属性”,“值”)

取值 = session.getAtrribute(“属性”)

4、设置销毁session:(3种方式)

a、setMaxInactiveInterval设置session的销毁时间,秒作为单位,最长不活动时间;

session.

b、立即销毁session:

session.invalidate();

c、在web.xml下设置:最长不活动时间间隔;

<session-config><session-timeout>只能是正数:分钟为单位</session-timeout></session-config>

5、设置cookie的最大保存时间,覆盖getSession的底层

6、上下文对象是所有Servlet和所有用户都共享的,(一个浏览器可看作是一个用户);

7、Session对象是所有Servlet共享的,但是每一个用户(浏览器)是一个Session,不同的用户不能共享Session;即:在同一个浏览器下,所有的Servlet都共享相同的Session;

URL地址重写

1、  获取当前工程的名字:

String path = Request.getContextPath();

2、  获取Servlet的地址:

String spath = Request.getServletPath();

3、  URL重写是容器自动完成的,我们只需要对URL进行编码

String newPath = response.encodeURL(path+spath);//会增加在最后“;JsessionId”

4、  EncodeRedirectURL()也可以进行编码,对重定向的URL进行编码;

5、  Cookie和URL重写都工作的时候,cookie优先,所以说,以后为了防止用户屏蔽cookie,可以将两种技术同时使用;

 

总结:Session可用的条件:1.客户端有JsessionID(①通过cookie来保存在浏览器,②通过URL地址的重写将JsessionID传到服务器);

                                                2.服务器端存在Session对象,

------实例:登录时验证码的产生

在内存里面创建一张图片,参数:宽度、高度、图片的类型:

BufferedImage im=new BufferedImage(宽,高,BufferImage.TYPE_INT_RGB);//图片类型不透明设置

获取到图片,用于在java平台获取带一个二维图形,

Graphics2D g=new(Graphics2D) im.getGraphics();

 

设置图片的背景

g.setColor(Color.gray);

设置背景填充,第一个和第二个都是位置,第三个和第四个是要填充的大小

g.filRect(0,0,80,20);

 

向图片上写数据

设置图片上的文字颜色

g.setColor(Color.gray);

设置字体的风格

g.setFont(new Font(“宋体”,Font.BOLD,20));//字体,加粗,大小

g.DrawString(“3601”,10,20);//随机数,位置

 

设置响应的MIME类型

response.setContextType(“image/jpeg”);

控制浏览器不能缓存此图片

 

将图片发送给浏览器

response.setDate

response.setHeader(“Cache-Control”,”no-cache”);

response.setHeader(“Pragma”,”no-cache”)

 

//将图片发送给浏览器

                   ImageIO.write(image,"jpg", response.getOutputStream());

产生一个随机数,不够4位,在前补零

public String getNum(){

           Random  r = new Random();

           String num =r.nextInt(9999)+"";

          

           StringBuffer b = new StringBuffer();

           for(int i=0;i<4-num.length();i++){

                    b.append("0");

           }

           String newStr = b.toString()+num;

           return newStr;

}

//创建一个session用于装每个用户的验证码

                   HttpSessionsession = request.getSession();

           session.setAttribute("code",num);

 

————》跳转验证:

//获取到session保存的验证码,一个浏览器共用Session

           HttpSession session=request.getSession();

           String code = (String)session.getAttribute("code");

           if(code.equals(imageCode)){

                    request.getRequestDispatcher("/index.jsp").forward(request,response);

           }else{

                    response.sendRedirect("/JavaWeb06_imgCode/login.html");

                   

           }

 

//设置Math.random()作用

          //两次请求地址一样,服务器只会处理第一次请求,第二次请求得到的结果跟第一次结果就是一样,(缓存显示)

         //第一次服务器缓存了上次请求得到的结果,加上一个随机数,服务器就认为每次请求都不一样。

   oimg.src="/JavaWeb06_imgCode/ImgCodeServlet?"+Math.random();

 

 

JSP基础(Java ServerPages)

念:jsp=html模板+java代码。所有的java语言都可以在JSP中使用;

html定义了整个网页的骨架、页面的结构和外观,java代码显示数据

JSP声明:可以声明常量、变量、函数、静态块。。。主要是定义全局的变量方法

         <%!  

JSP声明

%>

 

JSP API : test.jsp→翻译为test.java代码。test类继承了HttpJSPBase继承了HttpServlet。

则,JSP本质上就是Servlet;

 

JspServlet类是jsp引擎;用来执行jsp代码;

 

Tomcat web.xml里面已经配置了jsp的内容,注册和映射都配置好了,tomcat是一个jsp、Servlet的容器;

 

Jsp和Servlet之间的异同:

他们都是Servlet,都是服务器端动态网页的技术,jsp重在显示数据,而Servlet重在对业务逻辑的处理;

 

Jsp的脚本片段:所有的java代码都是放在service方法的内容中,可以调养外部的属性和方法。该jsp脚本片段只能出现java代码,不能出现任何模板元素,jsp引擎在翻译jsp代码都放在service方法里。Jsp脚本代码片段必须完全遵循java语言规则。

在一段脚本片段里面要嵌套模板元素,只能将脚本片段放开;

<%

(Jsp的脚本片段)

%>

Jsp脚本表达式:用于将程序的数据输出到客户端,jsp引擎会将脚本表达式变成out.print(…)或out.write(…);

<%= m(Jsp脚本表达式) %>         //注:不能在后面加”;”分号

等价于:<%out.print(m)%>

 

Jsp运行机制:

生命周期:1、jsp页面翻译阶段,将*.jsp引擎转换成*.java文件;2、jsp页面编译阶段:将*.java文件编译成*.class文件;3、jsp页面类装载阶段。Web容器新生成的Servlet类;4、jsp页面类实例化阶段;5、jsp页面实例化阶段;6、jsp页面服务阶段;7、jsp页面销毁阶段;

 

Jsp注释:<%--jsp的注释--%>

html注释:<!--html的注释--%>

 

jsp指令:(3种)

   page:page指令用于定义jsp页面的各种属性;无论page指令出现jsp的哪个地方,它都是作用整个页面;

                 <%page  contentType=“text/html;charset=utf-8” %>

 

   include:include指令可以包含任意文件,用于引用其他的文本文件内容;

                  用来包含外部文件,可以是静态文件,也可以是动态文件;

                  静态包含:先把其他页面的内容引入到当前这个页面,变成一个页面。最终只会产生一个Servlet。包含动态网页时,包含的内容必须遵循jsp的语法。被引入的文件可以是任意的扩展名,静态引入会产生一个文件,在翻译成Servlet,引入的文件不能有指令冲突;

             

也表示在jsp编译时插入一个包含文本或者代码的文件,把文件中的文本静态地包含过去,也就是说,会把被包含的页面拷贝到包含的页面中指令所在的位置;

        <%@  include file=”相对路径”   %>

   Taglip:导入标签库的指令;

 

Jsp标准动作:

   <jsp:include>动作是一种动态的包含;

                    动态包含的是结果,有多少动态页面就包含多少个结果,创建多个Servlet,将所有Servlet的结果放在一起;

                         ——如果包含是静态页面,相对于静态包含,包含的每一个页面都可以设置自己的指令和变量,不会冲突;

   <jsp:includepage=”相对路径”>

 

   <jsp:forward>:当执行到派发动作的时候,将控制权交给了下一个资源,就相当于Servlet里<jsp :forward page =”相对路径”></jsp :forward>里面的请求派发;

 

Jsp隐式对象(9种)

         可以直接在jsp里面使用,不需定义,jsp引擎已经定义好了;

         pageContext:是jsp技术中最重要的一个对象,代表jsp页面的运行环境。这个对象封装了其他八个对象。

通过findAttribute(“属性”)获取到其他对象的属性值;getAttribute(“属性”)能获取自己对象的属性值;

它自身还是一个容器(域对象),用当前这个对象来封装数据。当前这个对象还包括了一些动作,跳转、引入文件;

查询内容,首先找本身这个对象,找到就返回并结束查找,未找到就继续从其他对象查找。查找其他的对象顺序,按照从小到大(表示当前对象作用的范围)的一个顺序:page》request》Session》application 找不到就返回null;

 

Page:表示当前页面,可以理解为一个对象本身。就相当于把jsp看成一个对象;

        

 

第七章 Web开发模式

<jsp:useBean >

                   id:当前实例化对象的引用;

                   class;创建的实例,对用的包和类的名称;

                   scope:javaBean保存的范围page-request-Session-application

                                                        ()

<jsp:setProperty>

                   Property:代表当前对象的属性的名字

                   Name:当期javabean对象的名字

                   Value:代表当前属性的值;

                   Parem:用于获取用户传送过来的参数,值是username(属性名)。传递的是属性的名字。获取到用户传递的值,再设置给property-name;property=“*”:表示匹配所有的属性,用户请求过来的属性名字必须和javabean下的属性名字保存一致;

<jsp:setProperty>

                   Property:代表当前对象的属性的名字

                   Name:当期javabean对象的名字

                  

开发模式

1、 Jsp+javabean模型:

Jsp:负责控制逻辑、业务对象的调用,还有显示数据;

Javabean:主要用于封装数据,处理程序的业务;

         优点:效率高,不需要很复杂的构架模式。开发起来简单。适合开发小程序;

2、 MVC模型:

是一种架构模型。本身没有引入任何的性能。只是把我们开发的架构组织的更合理,将表现和结构分离,将逻辑和表现分离;

           Model模型用javabean,把javabean称为javabean组件,既负责收集封装数据,又要进行业务逻辑的处理,造成javabean非常庞大,将javabean组件替换为三层架构;

           Javabean组件=域模型+业务层+持久层

MVC在三层结构里面主要存在于表示层;

 

Mode(模型):提供要展示的数据,包含数据和行为;

View(视图):主要是负责模型的数据展示;

Controller(控制器):接受用户请求,委托模型进行业务处理,处理完了后,将数据发送给视图。是一个调度员。

Model → javabean

View → jsp、html

Controller → Servlet

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值