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");