javaweb

HTTP协议简介

超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础。

响应步骤

客户端连接到Web服务器 一个HTTP客户端,通常是浏览器,与Web服务器的HTTP端口(默认为80)建立一个TCP套接字连接。
发送HTTP请求 通过TCP套接字,客户端向Web服务器发送一个文本的请求报文,一个请求报文由请求行、请求头部、空行和请求 数据4部分组成。
服务器接受请求并返回HTTP响应 Web服务器解析请求,定位请求资源。服务器将资源复本写到TCP套接字,由客户端读取。一个响应由状态行、响应头部、空行和响应数据4部分组成。 释放TCP连接
在HTTP/1.0中默认使用短连接。也就是说,客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。当客户端浏览器访问的某个HTML或其他类型的Web页中包含有其他的Web资源(如JavaScript文件、图像文件、CSS文件等),每遇到这样一个Web资源,浏览器就会重新建立一个HTTP会话。

HTTP请求方法

GET
向指定的资源发出“显示”请求。使用GET方法应该只用在读取数据,而不应当被用于产生“副作用”的操作中,例如在
Web Application中。其中一个原因是GET可能会被网络蜘蛛等随意访问。
HEAD
与GET方法一样,都是向服务器发出指定资源的请求。只不过服务器将不传回资源的本文部分。它的好处在于,使
用这个方法可以在不必传输全部内容的情况下,就可以获取其中“关于该资源的信息”(元信息或称元数据)。
POST
向指定资源提交数据,请求服务器进行处理(例如提交表单或者上传文件)。数据被包含在请求本文中。这个请求
可能会创建新的资源或修改现有资源,或二者皆有。
PUT
向指定资源位置上传其最新内容。
DELETE
请求服务器删除Request-URI所标识的资源。
TRACE
回显服务器收到的请求,主要用于测试或诊断。
OPTIONS
这个方法可使服务器传回该资源所支持的所有HTTP请求方法。用’*'来代替资源名称,向Web服务器发送OPTIONS
请求,可以测试服务器功能是否正常运作。
目前最常用的是get和post的方法

Web服务器的分类

Web服务器是运行及发布Web应用的容器,只有将开发的Web项目放置到该容器中,才能使网络中的所有用户通过
浏览器进行访问。开发Java Web应用所采用的服务器主要是与JSP/Servlet兼容的Web服务器,比较常用的有
Tomcat、Resin、JBoss、WebSphere 和 WebLogic 等
Tomcat 服务器

目前最为流行的Tomcat服务器是Apache-Jarkarta开源项目中的一个子项目,是一个小型、轻量级的支持JSP和 Servlet
技术的Web服务器,也是初学者学习开发JSP应用的首选

Resin 服务器

Resin是Caucho公司的产品,是一个非常流行的支持Servlet和JSP的服务器,速度非常快。Resin本身包含了一
个支持HTML的Web服务器,这使它不仅可以显示动态内容,而且显示静态内容的能力也毫不逊色,因此许多网站 都是使用Resin服务器构建

JBoss服务器

JBoss是一个种遵从JavaEE规范的、开放源代码的、纯Java的EJB服务器,对于J2EE有很好的支持。JBoss采用 JML
API实现软件模块的集成与管理,其核心服务又是提供EJB服务器,不包含Servlet和JSP的Web容器,不过它可 以和Tomcat完美结合

WebSphere 服务器

WebSphere是IBM公司的产品,可进一步细分为 WebSphere Performance Pack、Cache Manager 和WebSphere Application Server等系列,其中WebSphere Application Server 是基于Java的应用环境,可以运行 于 Sun Solaris、Windows NT等多种操作系统平台,用于建立、部署和管理Internet和Intranet Web应用程序。

WebLogic 服务器

WebLogic 是BEA公司的产品(现在已经被Oracle收购),可进一步细分为 WebLogic Server、WebLogic Enterprise 和 WebLogic Portal 等系列,其中 WebLogic Server 的功能特别强大。WebLogic
支持企业级的、多层 次的和完全分布式的Web应用,并且服务器的配置简单、界面友好。对于那些正在寻求能够提供Java平台所拥有的 一切应用服务器的用户来说,WebLogic是一个十分理想的选择

tomcat的目录

1、bin:该目录下存放的是二进制可执行文件,如果是安装版,那么这个目录下会有两个exe文件:tomcat9.exe、tomcat9w.exe,前者是在控制台下启动Tomcat,后者是弹出UGI窗口启动Tomcat;如果是解压版,那么会有startup.bat和shutdown.bat文件,startup.bat用来启动Tomcat,但需要JDK的配置,shutdown.bat用来停止Tomcat;
2、conf:这是一个非常非常重要的目录,这个目录下有四个最为重要的文件:server.xml:配置整个服务器信息。例如修改端口号,添加虚拟主机等;tomcat-users.xml:存储tomcat用户的文件,这里保存的是tomcat的用户名及密码,以及用户的角色信息。可以按着该文件中的注释信息添加tomcat用户,然后就可以在Tomcat主页中进入Tomcat Manager页面了;web.xml:部署描述符文件,这个文件中注册了很多MIME类型,即文档类型。这些MIME类型是客户端与服务器之间说明文档类型的,如用户请求一个html网页,那么服务器还会告诉客户端浏览器响应的文档是text/html类型的,这就是一个MIME类型。客户端浏览器通过这个MIME类型就知道如何处理它了。当然是在浏览器中显示这个html文件了。但如果服务器响应的是一个exe文件,那么浏览器就不可能显示它,而是应该弹出下载窗口才对。
MIME就是用来说明文档的内容是什么类型的! context.xml:对所有应用的统一配置,通常我们不会去配置它。
3、lib:Tomcat的类库,里面是一大堆jar文件。如果需要添加Tomcat依赖的jar文件,可以把它放到这个目录中,当然也可以把应用依赖的jar文件放到这个目录中,这个目录中的jar所有项目都可以共享之,但这样你的应用放到其他Tomcat下时就不能再共享这个目录下的Jar包了,所以建议只把Tomcat需要的Jar包放到这个目录下;
4、logs:这个目录中都是日志文件,记录了Tomcat启动和关闭的信息,如果启动Tomcat时有错误,那么异常也会 记录在日志文件中。
5、temp:存放Tomcat的临时文件,这个目录下的东西可以在停止Tomcat后删除!
6、webapps:存放web项目的目录,其中每个文件夹都是一个项目;如果这个目录下已经存在了目录,那么都是tomcat自带的项目。其中ROOT是一个特殊的项目,在地址栏中没有给出项目目录时,对应的就是ROOT项目。
http://localhost:8080/examples,进入示例项目。其中examples就是项目名,即文件夹的名字。
7、work:运行时生成的文件,最终运行的文件都在这里。通过webapps中的项目生成的!可以把这个目录下的内容删除,再次运行时会生再次生成work目录。当客户端用户访问一个JSP文件时,Tomcat会通过JSP生成Java文件,然后再编译Java文件生成class文件,生成的java和class文件都会存放到这个目录下。
8、LICENSE:许可证。
9、NOTICE:说明文件。 通过url访问服务器: url:http://服务器的ip地址:端口号/项目名/被访问的页面
示例:http://localhost:8080/test0918 注:
(1)启动tomcat后,tomcat会加载部署在服务器端的所有项目
(2)浏览器访问的页面是服务器端的页面,基本上服务器的项目和工作空间的项目要保持一致

什么是Servlet

(1) Servlet(Server Applet),全称Java Servlet。是用Java编写的服务器端程序,其主要功能在于交互式地浏览和
修改数据,生成动态Web内容。狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。
(2) Servlet运行于支持Java的应用服务器中。从实现上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。
(3) Servlet工作模式:
① 客户端发送请求至服务器
② 服务器启动并调用Servlet,Servlet根据客户端请求生成响应内容并将其传给服务器
③ 服务器将响应返回客户端
第一个Servlet

public class LoginServlet implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
	//初始化方法
}
@Override
public ServletConfig getServletConfig() {
	return null;
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws
ServletException, IOException {
	//处理get/post请求的方法
}
@Override
public String getServletInfo() {
	return null;
}
@Override
public void destroy() {
	//销毁的方法
}
}

xml的配置

<servlet>
<servlet-name>自定义名称</servlet-name>
<servlet-class>处理请求的类的完整路径</servlet-class>
</servlet>
<servlet-mapping><!-- mapping 表示映射 -->
<servlet-name>自定义名称</servlet-name>
<url-pattern>请求名</url-pattern>
</servlet-mapping>

Servlet的生命周期
当客户端首次发送第一次请求后,由容器(web服务器(tomcat))去解析请求, 根据请求找到对应的servlet,判断该类
的对象是否存在,不存在则创建servlet实例,调取init()方法 进行初始化操作,初始化完成后调取service()方法,由
service()判断客户端的请求方式,如果是get,则执行doGet(),如果是post则执行doPost().处理方法完成后,作出相
应结果给客户端.单次请求处理完毕。
当用户发送第二次以后的请求时,会判断对象是否存在,但是不再执行init(),而直接执行service方法,调取
doGet()/doPost()方法。
当服务器关闭时调取destroy()方法进行销毁。
四个过程:
(1)实例化 --先创建servlet实例
(2)初始化 --init()
(3)处理请求 —service()
(4)服务终止 --destory()

请求
HttpServletRequest表示Http环境中的Servlet请求javax.servlet.ServletRequest接口)
常用方法:
1)String getParameter(String name) 根据表单组件名称获取提交数据,返回值是String
注:服务器在接收数据时使用字符串统一接收
2)String[ ] getParameterValues(String name) 获取表单组件对应多个值时的请求数据
3)void setCharacterEncoding(String charset) 指定每个请求的编码(针对post请求才起作用)
4)RequestDispatcher getRequestDispatcher(String path) --跳转页面
返回一个RequestDispatcher对象,该对象的forward( )方法用于转发请求

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

5)存值 request.setAttribute(“key”,value);
6)取值 request.getAttribute(“key”);//取值后需要向下转型
示例: String a1=(String)request.getAttribute(“uname”);
请求乱码
:处理请求乱码的问题
方式1:setCharacterEncoding(“UTF-8”);//post提交时管用
方式2: String s=new String(变量名.getBytes(“ISO-8859-1”),“UTF-8”);//针对于get提交时中文乱码
示例: String s=new String(request.getParameter(“key”).getBytes(“ISO-8859-1”),“GBK”);
方式3:修改tomcat中配置文件://使用于get提交
在Tomcat目录结构\conf\server.xml中设置字符集

<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8" />

注意:tomcat8.0以后不需要手动设置这个属性了
get和post的区别

1、GET请求,请求的数据会附加在URL之后,以?分割URL和传输数据,多个参数用&连接。URL的编码格式采用的
是ASCII编码,而不是uniclde,即是说所有的非ASCII字符都要编码之后再传输。
POST请求:POST请求会把请求的数据放置在HTTP请求包的包体中。上面的item=bandsaw就是实际的传输数 据。
因此,GET请求的数据会暴露在地址栏中,而POST请求则不会。 2、传输数据的大小在HTTP规范中,没有对URL的长度和传输的数据大小进行限制。但是在实际开发过程中,对于GET,特定的浏览器和服务器对URL的长度有限制。因此,在使用GET请求时,传输数据会受到URL长度的限制。 <ahref=“请求名?key=value&key=value&key=value…”> 示例: <Connector port="8080"protocol=“HTTP/1.1” connectionTimeout=“20000” redirectPort="8443"URIEncoding=“UTF-8” />对于POST,由于不是URL传值,理论上是不会受限制的,但是实际上各个服务器会规定对POST提交数据大小进行限制,Apache、IIS都有各自的配置。

响应
在Service API中,定义了一个HttpServletResponse接口,它继承自ServletResponse接口,专门用来封装HTTP响
应消息。 在HttpServletResponse接口中定义了向客户端发送响应状态码,响应消息头,响应消息体的方法。
常用方法:
void addCookie(Cookie var1);//给这个响应添加一个cookie
void sendRedirect(String var1) ;//发送一条响应码,将浏览器跳转到指定的位置
PrintWriter getWriter() 获得字符流,通过字符流的write(String s)方法可以将字符串设置到response 缓冲区中,随后Tomcat会将response缓冲区中的内容组装成Http响应返回给浏览器端。setContentType() 设置响应内容的类型
重定向和转发的对比
重定向:response.sendRedirect()
转发:request.getRequestDispatcher("…/success.jsp").forward(request,response);
相同点:都用来跳转页面
不同点:
a.重定向时地址栏会改变,request中存储的数据会丢失.转发时地址栏显示的是请求页面的地址,request数据可以保
存。
b.转发属于一次请求一次响应,重定向属于两次请求(地址栏修改了两次)两次响应。
补充:使用out对象往页面中输出js或html,css

out.print("<script type='text/javascript'>alert('fail');location='../login.jsp'</script>");

注:使用js跳转页面,也会丢失request中的数据

会话
request存的值只能在单次请求中保存,保存的数据不能跨页面,当重定向时,request存的值会丢失session的数据可以在多个页面中共享,即使重定向页面,数据不会丢失
session中可以包含n个request。会话的概念:从打开浏览器到关闭浏览器,期间访问服务器就称为一次会话.
常用方法:
void setAttribute(String key,Object value) 以key/value的形式保存对象值,将数据存储在服务器端Object getAttribute(String key) 通过key获取对象值
void invalidate() 设置session对象失效
String getId() 获取sessionid,当第一次登录成功后,session会产生一个唯一的id,浏览器之后访问时如果发现id值
还是之前id,那么说明 当前访问的属于同一个会话
void setMaxInactiveInterval(int interval) 设定session的非活动时间
示例:
方式1: session.setMaxInactiveInterval(10*60);//设置有效时间为10分钟
方式2:修改web.xml
int getMaxInactiveInterval() 获取session的有效非活动时间(以秒为单位),默认的有效时间:30分钟
void removeAttribute(String key)
从session中删除指定名称(key)所对应的对象

out.print("<script type='text/javascript'>alert('登录失败');location='../login.jsp'</script>");
<session-config>
<session-timeout>10</session-timeout>//单位:分钟
</session-config>

小结 :让session失效的方式
(1)invalidate() (2)removeAttribute(“key”) (3)直接关闭浏览器。
示例:使用session验证用户是否登录
//todo
后面会有servlet3.0的介绍

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值