Java web学习第十六天——HTTP协议

Day 16

软件体系结构:常见的软件体系结构B/S,C/S

C/S:客户端/服务器(client/Server)例如QQ,有独立的客户端,APP

  优点:安全性高,不与本地连接

  缺点:软件更新需要客户端和服务器两端,比较麻烦

B/S:浏览器/服务器 :

  优点:只需要编写服务器程序

  缺点:安全性差

Web资源

静态资源:HTML

动态资源:jsp/Servlet

动态资源需要先转化为静态资源才可以访问浏览器

访问web资源:协议名://端口名/路径

Web服务器

Tomcat:支持JavaWeb

JBoss:支持jee

Weblogin:支持jee

Tomcat:开源免费

启动Tomcat前必须配置环境变量

JAVA_HOME:必须先配置,因为Tomcat启动需要jdk

       JAVA_HOME=jdk的路径

Path变量前加%JAVA_HOME/lib%;

修改Tomcat的端口号:进入conf(配置文件的主目录)之后进入server.xml里面修改

Tomcat的目录结构:lib存放jar包,conf存放配置文件,logs日志文件temp临时文件,src存放自己编写的文件

Web应用

步骤:在webapps目录下创建一个目录(命名不可以出现中文和空格),这个目录就是项目的目录,在项目目录下,创建一个HTML文件

HTTP协议

协议的甲乙两方就是客户端和服务器,双方通信的格式。

相应协议:响应吗

200:请求成功

404:请求资源没找到,说明客户端请求资源不存在

500:请求资源找到了,但是服务器内部出现错误

302:重定向

304:

响应头:List-Modified  请求头:if-Modified-Since

比较if-Modified-Since的时间与文件真实的时间一样时,服务器会响应304而且不会有响应正文,表示浏览器缓存的就是最新的版本。

Eg:<meta http-equiv=”Refresh”content=”5;url=http://www.baidu.com”>

五秒之后自动跳转到百度页面

Eg生成图片案例(可以用作生成验证码)

publicstaticvoid main(String[] args) throws Exception {

       /*

        * 操作图片用到的类

        * Image ImageIOP BufferedImage Icon ImageIcon

        */

       //得到图片缓冲区

       BufferedImage bi = new BufferedImage(70, 30, BufferedImage.TYPE_INT_RGB);

       //得到绘制环境(画图的笔)

       Graphics2D g2=(Graphics2D) bi.getGraphics();

       g2.setColor(Color.WHITE);//设置颜色 

       g2.fillRect(0, 0, 70, 30);//0,0开始填充图片,就是填充上一步设置的颜色

       g2.setColor(Color.RED);//设置边框颜色

       g2.drawRect(0, 0, 149, 69);//设置边框

       g2.setFont(new Font("宋体",Font.BOLD,18));//设置字体

       g2.setColor(Color.BLACK);//设置颜色

       g2.drawString("HelloWord", 3, 10);//向图片上写字符串

       ImageIO.write(bi, "JPEG", new FileOutputStream("F:/a.jpg"));//保存图片

    }

注意:首先获取BufferedImage图片缓冲区,然后得到绘制环境getGraphics(),先设置在操作,最后

保存:ImageIO.write(bi, "JPEG", new FileOutputStream("F:/a.jpg"));

 

Servlet概述

每个Servlet都是唯一的,可以处理的请求都不同

***接受请求

***处理请求

***完成响应

实现Servlet的方式(自己编写的内容)

Servlet中的方法大多数不有我们来调用

如何让浏览器访问Servlet

1,给Servlet指定一个访问路径(将Servlet和一个路径绑定)

配置:在web.xml中配置

<servlet>

       <servlet-name>xxx</servlet-name>

       <servlet-class>AServlet.Aservlet</servlet-class>

       <load-on-startup>0</load-on-startup>

//在服务器启动的时候就创建,0是序号

    </servlet>

    <servlet-mapping>

       <servlet-name>xxx</servlet-name>

       <url-pattern>/servler</url-pattern>

</servlet-mapping>v

2,浏览器访问路径

http://localhost:8080/javaDay09/servlet

HTTP Servlet

客户端发送请求,tomcat调用声明周期方法,到service(HttpServlerRequest,HttpServletResponse),,它自己获取请求方法,来调用doGet()或者

doPost(),方法

注意:doGet()方法和d0Post()方法有我们自己来写,如果没有覆盖就调用了就会出现405

在servlet中不要定义全局变量,可以定义创建局部变量,可以创建无状态成员,如果创建有状态成员,那么状态必须是只读。

Servlet Context(***)

一个项目中只能有一个ServletContext对象

我们可以在多个servlet中来获取这个唯一的对象,使用它可以给多个servlet传递数据

这个对象在tomcat启动的时候ServletCentext开始创建,关闭时解除,与Tomcat(服务器)同存,

获取ServletContext

1  Void init (ServletConfig config)

{ServletContext context = config.getServletContext();SrevletConfig类的getServletContext方法可以用来获取Servlet对象;}

2 GenericServlet类的getServletContext方法可以直接使用this.getServletContext获取;

域对象的功能:

定义:用来在多个Servlet中来传递消息的,有存数据和取数据的功能

四个:《pageContext》《ServletRequest》《HTTPSession》《servletContext》

所有的域对象内部都有一个Map,用来存储数据下面用ServletContext对象操作:

setAttribute(Stringname,Object value)存储数据

eg:ServletContext.setAttribute(“xxx”,”XXX”);保存了一个与属性,名xxx,值XXX

如果多次调用这个方法,并且name的值一样,就相当于覆盖的效果。

Object  getAttribute(String name):获取ServletContext中的值

eg:String value =(String)ServletContext.getAttribute(“xxx”);

void removeAttribute(Stringname);删除

EnumerationgetAttributeNames():获取所有与对象属性名称

获取初始化参数

 Servlet也可以获取初始化参数,但是它是局部的参数,也就是说,一个Servlet只能获取自己的初始化参数,不可以获取别人的,即初始化参数只是一个Servlet的

可以配置公共的的初始化参数,这需要ServletContext

步骤:定义全局参数

  <context-param>

    <param-name>context-name</param-name>

    <param-value>context-value</param-value>

  </context-param>

 

不可以写在Servlet中,在web-APP中,全局,

调用使用ServletContext对象

String value =con.getInitParameter("context-name");

获取相关的资源方法

 1获取真实路径

String path =this.getServletContext().getRealPath("/index.jsp");

D:\Myeclipse\develop\apache-tomcat-9.0.0.M17\webapps\java10\index.jsp

得到有盘符的路径名,得到项目下的文件路径

获取当前目录以及子目录

Setset =this.getServletContext().getResourcePaths("/WEB-INF");

猜你喜欢

转载自blog.csdn.net/swh18337397695/article/details/80042005