JavaWeb开发基础知识

HTTP协议

超文本传输协议(Hypertext Transfer Protocol,简称HTTP)是应用层协议。HTTP 是一种请求/响应式的协议,即一个客户端与服务器建立连接后,向服务器发送一个请求;服务器接到请求后,给予相应的响应信息。先请求后响应。

Http请求协议包括:请求行、请求头、请求体。Http响应协议包括:响应行、响应头、响应体。

请求行:请求行由方法字段、URL 字段 和HTTP 协议版本字段 3 个部分组成,他们之间使用空格隔开。常用的 HTTP 请方方法有 GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT;
  • GET:当客户端要从服务器中读取某个资源时,使用GET 方法。
  • POST:当客户端给服务器提供信息较多时可以使用POST 方法,POST 方法向服务器提交数据,比如完成表单数据的提交,将数据提交给服务器处理。
请求头: 通知服务器有关于客户端请求的信息,典型的请求头有:
  • User-Agent:产生请求的浏览器类型;
  • Accept:客户端可识别的响应内容类型列表
  • Accept-Language:客户端可接受的自然语言;
  • Accept-Encoding:客户端可接受的编码压缩格式;
  • Accept-Charset:可接受的应答的字符集
  • Host:请求的主机名,允许多个域名同处一个IP 地址,即虚拟主机
  • connection:连接方式(close 或 keepalive)
  • Cookie:存储于客户端扩展字段,向同一域名的服务端发送属于该域的cookie
请求包体:请求包体不在 GET 方法中,而是在POST 方法中使用,需要填写表单的场合,所有POST更安全
如下图
http请求
	请求行:POST /index.jsp HTTP/1.1
		  GET /get.html?name=xiaoming&passWord=123456 HTTP/1.1
		 (请求方式 资源路径 协议/版本)
	请求头:
		Host:localhost:8080
		Connection: keep-alive 
		Upgrade-Insecure-Requests:1
		User-Agent: Chrome/58.0.3029.110 Safari/537.36
		Content-Type: application/x-www-form-urlencoded 
		Accept: text/html, application/xhtml +xml, application/xml;q=0.9,image/webp,*/*;q=0.8
		Refhrer: http://1ocalhost:8080/post. html Accept-Encoding: gzip, deflate, br Accept-Language: zh-CN,zh;q=0.8, en;q=0.6
		Cookie: Idea-cf2f8ff1=49d3921e-2812-464b-b68b-6c54c9b5cbc7.
		JSESSIONID=8990466BFC3DCC6778D2A03630270A7D	
	请求体:name=xiaoming&passWord=123456 (GET请求没有请求体)
响应行:响应行由 HTTP 协议版本字段、状态码和状态码的描述文本 3 个部分组成,他们之间使用空格隔开; 状态码由三位数字组成,第一位数字表示响应的类型,常用的状态码有五大类如下所示:
  • 1xx:表示服务器已接收了客户端请求,客户端可继续发送请求;
  • 2xx:表示服务器已成功接收到请求并进行处理;
  • 3xx:表示服务器要求客户端重定向;
  • 4xx:表示客户端的请求有非法内容;
  • 5xx:表示服务器未能正常处理客户端的请求而出现意外错误;
响应头:
  • Allow 服务器支持哪些请求方法(如GET、POST等)
  • Content-Encoding 文档的编码(Encode)方法。
  • Content-Length 表示内容长度。
  • Content-Type 表示后面的文档属于什么MIME类型。
  • Date 当前的GMT时间。
响应体:服务器向浏览器返回的html正文
如下图
http响应
	响应行:HTTP/1.1 200 OK
		(协议/版本 状态码 状态码描述)
			200 请求成功 302 请求重定向 400请求错误语法错误 403权限不够 404 资源不存在 500 服务器内部错误	
	响应头:
		Accept-Ranges:bytes 
		ETag:W/"413-1495617981796"
		Last-lModified:Wed,24 May 2017 09:26:21 GMT 
		Content-Type:text/html 
		Content-Length:413
		Date:Wed,24 May 2017 09:29:37 GMT
	响应体:服务器向浏览器返回的html正文

Servlet

Servlet是javaWEB的核心,简单的说就是用Java编写的服务器端程序。用户进行一个动态请求(静态请求就是直接请求HTML )时,实际上是请求—个servlet。在HTTP请求过程中会把请求的参数存放在请求行的URL中,或者是请求体中,这个参数需要服务器来接收解析并处理,Servlet就是用来处理这个过程的。
Service()方法根据请求方法调用对应的处理方法doPost()或doGet(),还有一些其他的请求方法doPut(),doDELETE()…但这些方法不常用,

一个Servlet 2.0
	1.继承HttpServlet
	2.复写HttpServlet中的doGet()、doPost()
	3.配置web.xml
		<servlet>
	        <servlet-name>hello</servlet-name>
	        <servlet-class>httphello</servlet-class>
	    </servlet>
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hi</url-pattern>
    </servlet-mapping>   
	4.部署项目并通过浏览器访问servlet
一个Servlet 3.0
	注解:
	@WebServlet(name = "TestServlet",urlPatterns = "/hello")

HttpServletRequest

在Servlet的API中,定义了一个HttpServletRequest接口,它继承自ServletRequest接口,专门用于封装HTTP的请求,由于HTTP请求包含着请求行、请求头和请求体三部分,因此在HttpServletRequest中分别定义了接收请求行、请求头和请求体的相关方法。

请求行:
	request.getMethod();     //请求方式
	request.getRequetURI();  //request.getRequetURL()   请求资源
	request.getProtocol();   //请求http协议版本
	request.getRemoteAddr(); //发出请求客户端IP地址
	request.getLocalAddr();  //服务器接收请求的IP地址
	request.getRemotePort(); //访问客户端的端口号
请求头:
	request.getHeader("name")   //根据name,获取对应请求头数据
	request.getHeaderNames()    //获取所有的请求头名称返回类型Enumeration
	 Enumeration<String> headerNames = request.getHeaderNames();
        while (headerNames.hasMoreElements()) {
            String name = headerNames.nextElement();
            System.out.println(name+":"+request.getHeader(name));
        }
请求参数:
	request.getParameter("参数名");  //根据参数名获取参数值(注意,只能获取一个值的参数)
	request.getParameterValue("参数名“); //根据参数名获取参数值(可以获取多个值的参数)
	request.getParameterNames();   //获取所有参数名称列表 返回类型Enumeration 
	request.getParameterMap();   //该方法用于将请求中的所有参数和值装入一个map对象然后返回

1.访问html文件(html中action提交的Servlet)
2.调用对应的Servlet中的方法,获取html中对应参数的内容
3.输出在对应位置。

HttpServletResponse

在Servlet的API中,定义了个HttpServletResponse接口,它继承自ServletResponse接口,专门用于封装HTTP的响应,由于HTTP响应包含着响应行、响应头和响应体三部分,因此在HttpServletResponse中分别定义了发送响应行、响应头和响应体的相关方法。

响应行:
	setStatus(int status); //状态码200
	sendError(int code); //错误信息的状态码404
	响应成功了,需要第一个,sendError是返回页面的。
响应头:
	百度
响应消息体:
由于在HTTP响应消息中,大量的数据都是通过响应体传递的,因此ServletResponse遵循以I0流传递大数据的设计理念,定义了两个与输出流相关的方法,具体如下:
1.getoutputStream()方法:该方法获取的字节流输出对象为ServletOutputStream类型,它是0utputStream的子类,因此可以直接输出字节数组中的二进制数据。
2.getWrite()方法:该方法获得的字符输出流对象是PrintWriter类型由于它可以直接输出文本类型,因此要输出网页文档,需要使用这个方法

Servlet生命周期

servlet生命周期包括加载实例化、 初始化、 处理请求 以及服务结束

第一次:
	判断Servlet实例是否存在? 
		> 装载Servlet类并创建实例
		> 调用init(ServletConfig)方法
		> 调用service(ServletRequest,ServletResponse)方法
		> 调用对应的doGet doPost方法
	服务器关闭?
		>调用destroy()方法。
第二次:
	判断Servlet实例是否存在? 
		> 调用service(ServletRequest,ServletResponse)方法

Servlet启动时,开始加载servlet生的周期开始。Servlet 被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service 方法自动派遣运行与请求对应的doXXX方法(doGet, doPost) 等,当服务器决定将实例销毁的时候(服务器关闭)调用其destroy方法。
注意:Servlet实例是单例的,即无论请求多少次Servlet,最多只有一个Servlet实例,如果是多个客户端并发,同时访问Servlet的时候,服务器会启动多个线程分别执行Servlet的service方法
原因:如果我们每次访问都创健一个Servlet实例,会占用和浪费过多的计算机资源

servlet中forward()与redirect()的区别

前者仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址,后者则是完全的跳转,浏览器(客户端)将会得到跳转的地址,并重新发送请求链接。Forward 还是原来的请求,而redirect是重新发起请求。这样,从浏览器的地址栏中可以看到跳转后的链接地址。所以,前者更加高效,在前者可以满足需要时,尽量使用forward)方法,并且,这样也有助于隐藏实际的链接。在有些情况下,比如,需要跳转到另一个其它服务器上的资源,则必须使用sendRedirect0方法。forward()是一次请求一次响应,redirect()是两次请求两次响应。
forward是服务器的转向而redirect是客户端的转向

jsp内置对象

9个内置的对象:

  • request 用户端请求,此请求会包含来自GET/POST请求的参数
  • response 网页传回用户端的回应
  • pageContext 管理网页的属性
  • session 与请求有关的会话期
  • application servlet 正在执行的内容
  • out 用来传送回应的输出
  • config servet 的构架部件
  • pageISP 网页本身
  • exception 针对错误网页,未捕捉的例外
    四大作用城: pageContext request session application可以通过istl从四大作用域中取值、jsp传递值request session application cookie也能传值

Cookie、Session会话

request无法完成多个Servlet数据共享,ServletContext可以但是不能为每个客户端保存数据。

Cookie

将数据存储在客户端的本地,在本地清除后,数据消失。存储在response中的响应头中set-cookie。请求其他Servlet时通过request携带cookie在请求头中带过去

Session

session称为会话信息,位于web服务器上,主要负责访问者与网站之间的交互,当访问浏览器请求http地址时,将传递到web服务器上并与访问信息进行匹配, 当关闭网站时就表示会话已经结束,网站无法访问该信息了,所以它无法保存永久数据,我们无法访问以及禁用网站

Session和Cookie的区别

  • cookle 数据存放在客户的浏览器上,session 数据放在服务器上
  • cookie 不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗考虑到安全应当使用session
  • session 会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用COOKIE
  • 单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个COOKIE

Tomcat

Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。
Tomcat的目录结构

  • bin………………………………可执行程序(脚本),启动停止调试Tomcat的一些bat.sh
  • conf…………………………….配置文件 webx.ml server.xml 等
  • lib………………………………Tomcat运行需要的jar包
  • logs…………………………….曰志文件
  • temp…………………………….临时文件
  • webapps………………………WEB 程序(编译后的项目文件)
  • work…………………………….将jsp文件生成java文件在此目录进行
发布了59 篇原创文章 · 获赞 8 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_22136439/article/details/102800139