Javaweb学习

软件架构:
	C/S:客户端/服务器
	B/S:浏览器/服务器
资源分类:
	静态资源
网页前端的三个语言:HTML、CSS、JS,可以直接被浏览器解析
	动态资源
每个用户访问相同资源后,得到的结果可能不一样,被称为动态资源,需要先转换为静态资源,然后再返回给浏览器
如servlet/jsp、php、asp等等

网络通信三要素:
1.IP:电子设备(计算机)在网络中的唯一标识
2.端口:应用程序在计算机中的唯一标识,0-65536
3.传输协议:规定数据传输的规则
1.基础协议:
1.tcp:安全协议,三次握手,速度稍慢
2.udp:不安全协议,速度很快

JavaSE:基础版;JavaME:迷你版;JavaEE:企业版

web服务器软件
服务器:安装了服务器软件的计算机
服务器软件:接收用户的请求,处理请求,做出响应
web服务器软件:接受用户的请求,处理请求,做出响应
在web服务器软件中,可以部署web项目,让用户通过浏览器来访问这些项目
web服务器也被称为web容器
Java相关的常见的web服务器软件:
webLogic:Oracle公司(大型JavaEE服务器,支持所有的JavaEE规范,收费)
webSphere:IBM公司(大型JavaEE服务器,支持所有的JavaEE规范,收费)
JBOSS:JBOSS公司(大型JavaEE服务器,支持所有的JavaEE规范,收费)
Tomacat:Apache基金组织(中小型的JavaEE服务器,仅仅支持少量的JavaEE规范servlet/jsp,开源免费)

Tomcat:web服务器软件
启动:按下bin/startup.bat即可启动

访问:输入http://loaclhost:8080访问自己,把loaclhost换成别人的IP即可访问别人

配置:
1.直接将项目放到webapps目录下即可
简化的部署:将项目打包成一个war包,将其放在webapps目录下,war会自动解压缩
2.配置conf/server.xml文件
在标签体中配置

docBase:项目存放的路径
path:虚拟目录
3.在conf\Catalina\localhost创建任意名称的xml文件
在文件中编写

2020年10月15日
静态项目和动态项目:
目录结构:
Java动态项目的目录结构:
项目的根目录
web-inf目录:
web.xml:web项目的核心配置文件
classes目录:放置字节码文件的目录
lib目录:放置依赖的jar包

将tomcat集成到IDE中,并且创建JavaEE的项目,部署项目

servlet:server applet
概念:运行在服务器端的小程序
servlet就是一个接口,定义了Java类被服务器访问到(tomcat识别)的规则
将来我们定义了一个类,实现了servlet方法,复写方法

	快速入门:
			1.创建JavaEE项目
			2.定义一个类,实现servlet接口
					public class ServletDemo1 implements Servlet
			3.实现接口中的抽象方法
			4.配置servlet
					    <!-- 配置Servlet-->
					    <servlet>
					        <servlet-name>demo1</servlet-name>
					        <servlet-class>web.ServletDemo1</servlet-class>
					    </servlet>
					    <servlet-mapping>
					        <servlet-name>demo1</servlet-name>
					        <url-pattern>/demo1</url-pattern>
					    </servlet-mapping>

本例子中用到的反射原理:
1.tomcat将全类名对应的字节码文件加载进内存,class.forName()
2.创建对象,cls.newInstance();
3.调用方法:service

servlet执行原理:
1.当服务器受到客户端浏览器的请求之后,会解析请求URL路径,获取访问的servlet的资源路径
2.查找web.xml文件,是否有对应的标签体内容。
3.如果有,则在找到对应的全类名
4.tomcat会将字节码对象加载进内存,并且创建其对象
5.调用其方法

2020年10月16日
servlet中的生命周期:
1.被创建:执行init方法
指定servlet的创建时机,默认情况下,servlet被创建
可以配置执行servlet的创建时机
1.第一次被访问时,创建
的值为负数
2.在服务器启动时,创建
的值为0或者正整数

servlet的init方法,只执行一次,说明servlet在内存中只存在一个对象,说明servlet是单例的
多个用户同时访问时,可能存在线程安全问题
解决:尽量不要在servlet中定义成员变量,即使定义了成员变量,也不要对其赋值

2.提供服务:执行service方法,执行多次
每次访问servlet时,service方法都会被调用一次
3.被销毁:执行destroy方法,执行一次
servlet被销毁时执行,服务器关闭时,servlet被销毁
只有服务器正常关闭时,才会执行destroy方法,一般用于释放资源

用注解可以简化JavaEE项目
在实现类上注解WebServlet(urlPatterns = “/demo”),还可以把urlpatterns写成value,而value还可以不写,就更简单了
只要写@Servlet(“资源路径”)

tomcat真正访问的是“tomcat部署的web项目”,对应着web目录下的所有资源,和工作空间并不在一起
WEB-INF中的文件并不能被浏览器直接访问

servlet的体系结构:
servlet–接口
GenericServlet–抽象类(子类):将servlet接口中的方法做了默认空实现,只将service方法作为抽象
将来定义servlet类时,可以继承然后实现service方法
HttpServlet–抽象类(子类中的子类):用的最多,对http协议的一种封装,简化操作
1.定义类继承HttpServlet
2.复写doGet()或者doPost()

一个servlet可以定义多个访问路径,还可以写*.do,不要加杠

HTTP协议:
传输协议:定义了客户端和服务器端通信时,发送数据的格式
特点:
1.基于TCP/IP的高级协议
2.默认端口号: 80
3.基于请求/响应模型的:一-次请求对应- -次响应4.无状态的:每次请求之间相互独立,不能交互数据

请求消息数据格式
1.请求行
请求方式请求url 请求协议/版本
GET/ login.html HTTP/1.1
请求方式:
HTTP协议有7中请求方式,常用的有2种
GET :
1.请求参数在请求行中,在url后。
2.请求的url长度有限制的
3.不太安全
POST :
1.请求参数在请求体中
2.请求的url长度没有限制的3.相对安全

2.请求头:客户端浏览器会告诉服务器一些信息
请求头名称:请求头值
常见的请求头∶
1.User-Agent:浏览器告诉服务器,我访问你使用的浏览器版本信息*可以在服务器端获取该头的信息,解决浏览器的兼容性问题
2.Referer:告诉服务器,当前请求从哪里来?
作用:
1.防止链接被盗取
2.统计工作

3.请求空行
空行:用于分隔post请求的请求头和请求体

4.请求体(正文)
封装post请求消息的请求参数的

Request :
1.request对象和response对象的原理
1.request和response对象 是由服务器创建的。我们来使用它们
2.request对象是来获取请求消息,response对象是来设置响应消息

2.request对象继承体系结构
ServletRequest --接口
HttpServletRequest --接口(继承上者)
request–实现类(由tomcat实现)

2020年10月19日
3.request功能:
1.获取请求消息数据:
1.获取请求行数据
GET /day13_demo1?name=zhangsan HTTP/1.1
方法:
1.获取请求方法:GET
String getMethod()
2.(重点)获取虚拟目录:/day13
String getContextPath()
3.获取servlet路径:/demo1
String getServletPath()
4.获取get方法请求参数:name=zhangsan
String getQueryString()
5.(重点)获取请求URL:/day13/demo1
String getRequestURL()
StringBuffer getRequestURL()
6.获取协议版本号:HTTP/1.1
String getProtocol()
7.获取客户机的IP地址
String getRemoteAddr()
2.获取请求头数据
string getHeader(String name)
getHeaderNames()
具体有user-agent、referer等等头名称
3.获取请求体数据
请求体:只有POST请求方法,才有请求体,在请求体中封装了POST请求的请求参数

其他的一些常用功能,非常重要:
1.获取请求参数通用方式:
* String getParameter(String name)根据参数名称获取参数值
* String getParameterValues(String name)根据参数名称获取参数值的数组
* Enumeration getParameterNames()获取所有请求的参数名称
* Map<String, String[]> getParameterMap()获取所有参数的map集合
2.请求转发
一种在服务器内部的资源跳转方式,经常和另外一种资源跳转的方式对比,
(1)浏览器地址栏不发生变化
(2)只能转发到当前服务器内部资源中
(3)对于浏览器而言,转发是一次请求
步骤:
(1)通过request对象获取请求转发器对象:requestDispatcher getRequestDispatcher(string path)
(2)通过requestDispatcher对象来进行转发:forword(Servlet request, Servlet response)
3.共享数据

  • 域对象:一个有作用范围的对象,可以在范围内共享数据
  • request域:代表一次请求的范围,一般用于请求转发的多个资源中共享数据
  • 方法:
    setAttribute(String name, Object obj):存储数据
    Object getAttritude(String name):获取数据
    4.获取ServletContext
    ServletContext类 getServletContext()

doGet和doPost一般只有一个写代码,另一个调用就可以了,不要重复,两者重合性比较高

2020年10月22日
response是由浏览器创建的
HTTP协议:
请求消息:客户端发送给服务器端的数据
响应消息:服务器端发送给客户端的数据
响应行
1.组成∶协议/版本响应状态码状态码描述
2.响应状态码∶服务器告诉客户端浏览器本次请求和响应的一个状态。
1.状态码都是3位数字
2.分类:
1xx:服务器就收客户端消息,但没有接受完成,等待一段时间后,发送1xx多状态码
2xx∶成功。代表∶200
3x×∶重定向。代表:302(重定向),304(访问缓存)
4xx∶客户端错误。
*代表∶
*404(请求路径没有对应的资源)
*405∶请求方式没有对应的doxxx方法
5xx∶服务器端错误。代表:500(服务器内部出现异常)

响应头
格式:头名称:值
常见的响应头∶

  1. Content-Type:服务器告诉客户端本次响应体数据格式以及编码格式
  2. Content-disposition:服务器告诉客户端以什么格式打开响应体数据
    *值:
    in-line:默认值,在当前页面内打开
    attachment;filename=xxx∶以附件形式打开响应体。文件下载
    响应空行
    响应体

重定向:
访i问可/responseDemo1,会自动跳转到/responseDemo2资源
1.设置状态码为302
response.setStatus( 302);
2.设置响应头location
response.setHeader( s: “location”, s1: “/day15/responseDemo2”);

简单重定向方法(原理就是上述两行):
response.sendRedirect( s: " /day15/responseDemo2");

重定向的特点:redirect
(1)地址栏发生变化
(2)重定向可以访问其他站点(服务器)的资源
(3)重定向是两次请求。不能使用request对象来共享数据
转发的特点:forwoard
(1)浏览器地址栏不发生变化
(2)只能转发到当前服务器内部资源中
(3)对于浏览器而言,转发是一次请求

路径写法:
1.相对路径:不以/开头,./代表当前目录,…/后退一级目录,./…/…/后退两级目录
2.绝对路径:通过绝对路径可以确定唯一资源,以/开头

修改编码方式,通过这个方法,可以将浏览器客户端和服务器tomcat的编码同时修改,就不会乱码
response.setHeader( s: “content-type”, s1: “text/html;charset=utf-8”);

服务器输出数据到客户端浏览器:
response字符输出
//1.获取字节输出流
ServletOutputstream sos = response.getOutputStream();
//2.输出数据
sos.write(“你好”-getBytes( charsetName: “utf-8”));

reponse字节输出
//1.获取字节输出流
ServletOutputStream sos = response. getOutputStream();
//2.输出数据
sos . write( “你好” . getBytes( charsetName: “utf-8”));

ServletContext对象:
概念:代表整个web应用,可以和程序的容器(服务器)来通信
获取:
//1.通过request对孰获取
ServletContext context1 = request.getServletContext();
//2.通过HttpServlet获取
ServletContext context2 = this.getServletContext();
获取到的两个是同一个东西,指向的地址都是相同的

功能:
1.获取MIME类型
MIME类型:在互联网通信过程中定义的一种文件数据类型
格式:大类型/小类型 text/html
String mimeType = context.getMimeType(filename);//context是ServletContext类对象

2.域对象,共享数据
通过HttpServlet获取
ServletContext context = this . getServletContext( );
获取数据
Object msg = context . cetAttribute( s: “msg”);

3.获取文件的真实(服务器)路径:getRealPath()
String realPath = context.getRealPath( s: “/b.txt”);//web目录下资源访问

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值