JavaWeb基础(day15)( http + tomcat + servlet + 响应)
HTTP+Tomcat+Servlet+响应
HTTP
HTTP 超文本传输协议(Hyper Text Transfer Protocol ),一种网络协议。
协议的组成和过程
- HTTP协议由http请求和http响应组成。在浏览器输入一个请求,浏览器将你的请求封装成一个http请求发送给服务器,服务器收到请求组响应数据封装成一个http响应,返回给客户端。
抓包分析
使用chrome自带的工具,可以看到数据相互传送的具体过程。
http请求
get请求
请求行:请求的方法为get请求
本地的地址:host:localhost:8080
connection:keep-alive 连接方式:长连接
post请求
Http响应
常用响应状态码
Tomcat
服务器
- 服务器是一个管理资源并为用户要提供服务的计算机软件,服务器的本质就是普通的电脑中安装了相关的服务软件。tomcat就是一个web应用服务器
web2资源
- 在web应用服务器内部,能够让外界进行访问的资源都叫web资源。图片,js,css,视频等。
web应用服务器
- tomcat:是apache开源组织下的开源免费的中小型web服务器,支持Javaee中的servlet和jsp规范
- tomcat 的实际作用就是通过HTTP协议规范让用户访问存在与服务器内部的资源。
Tomcat目录结构
- bin中放的都是可执行的脚本程序 启动脚本 startup.bat 停止脚本 shutdown.bat
- conf存放的是配置信息文件 server.xml核心配置文件:可以设置Tomcat端口,编码格式,web应用的发布信息
- tomcatusers.xml用户权限配置文件:用于设置用户的分组和用户的密码
- web.xml web项目默认配置文件,可以配置缺省路径,配置tomcat默认servlet
- lib 依赖库,tomcat和web项目中需要使用的jar包,如jsp-api.jar 和 servlet-api.jar
- logs日志文件夹,如 catalina.2017-07-11.log 查看tomcat日志
- temp:临时文件目录,其中内容可以任意删除
- webapps:存放发布的web应用的目录
- work:tomcat解析jsp文件的工作目录,会将jsp解析成的servlet就存在于这个目录
Tomcat启动
- 需要jdk的支持,并且需要配置环境变量JAVA_HOME
- 本机地址127.0.0.1或者localhost
- 端口配置,默认tomcat是8080端口
- 80端口:http协议默认的端口,我们可以通过修改
- servler.xml设置端口
- 配置用户名管理tomcat下所有的web应用,修改 tomcat-users.xml
常见问题
- 启动闪退
- 系统没有配置环境,JAVA_HOME
- java.net.BindException: Address already inuse: JVM_Bind <null>:8080
- 8080端口被占。开源通过server.xml修改端口,也可以通过进程杀死占用程序。
- 1.命令行输入 netstat -ano 查询8080端口被那个程序占用
- 2.打开任务管理器根据pid找到对应程序关闭。
- 8080端口被占。开源通过server.xml修改端口,也可以通过进程杀死占用程序。
- 启动闪退
Servlet
servlet运行在服务端的Java小程序。由sun公司提供的一套规范接口,用来处理客户端的请求,响应给浏览器的动态资源。但是servlet的实质就是Java代码,通过Java的API动态向客户端输出内容。
Servlet的内部实现原理
- servlet规范:包含三个技术点。servlet技术,filter(过滤器)技术,listener(监听器)技术。
- 当客户端发送请求时,tomcat会先解析请求的路径,在web.xml的配置文件中去找到对应匹配的路径,如果找到,就会通过配置文件中servlet-name找到对应的类,然后去创建对应类的对象,此时因为接口规范中规定了,init方法,所以tomcat会去调用相应对象的init方法,然后再去调用service方法,由我们service方法去处理响应的请求
Servlet生命周期
- init方法:servlet创建的时候执行
- servlet方法:每次发送请求的时候执行
- servletRequest 代表请求 servletRequest内部封装的是http请求的信息。
- servletResponse代表响应 要封装的是响应的信息。
- destory方法:服务器关闭的时候执行
Servlet的配置
- <servlet> 中的 <servlet-name> 中的名字可以任意起,但是需要和 <servlet-mapping> 中的 <servlet-name> 相同
- <servlet> 中的 <servlet-class> 指定是对应servlet的类的全名
<servlet-mapping> 中 <url-pattern> 指的是当浏览器中输入什么路径的时候去匹配我们对应的servlet
<servlet>
<servlet-name>myServlet</servlet-name>
<servlet-class>com.web.servlet.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>myServlet</servlet-name>
<url-pattern>/myServlet</url-pattern>
</servlet-mapping>
urlpattern的配置方式
- 完全匹配如 /myServlet
- 目录匹配如 /a/b/c/*
- 扩展名匹配 *.do
- 缺省配置如 / 当你访问资源地址所有的servlet都不匹配时,缺省的servlet负责处理其实,web应用中所有的资源的响应都是servlet负责,包括静态资源,对于静态资源其实是由tomcat的默认servlet进行处理的
- /和/*区别/不会处理后缀名是.jsp的资源
- /*会处理后缀名是.jsp的资源
- 启动服务器的时候创建servlet配置 <load-on-startup>1</load-on-startup> 只要不是负数都会随着服务器的启动而创建,值越小优先级越高
HttpServlet
ServletContext对象
ServletContext代表是一个web应用的环境对象,ServletContext对象 内部封装是该web应用的信息一个web应用只有一个ServletContext对象。
ServletContext的生命周期
- 创建:当前的web应用创建的时候,一般web应用会随着服务器的启动而创建的(或者发布的时候)
- 销毁:web应用被卸载(服务器关闭,删除当前的web应用)
如何得到ServletContext对象
- 在doGet或者doPost方法中调用 this.getServletContext();
- 注意在当前web应用中所有的servlet中调用此方法获取的servletContext对象是全局唯一的
ServletContext作用
- ServletContext对象随着服务器的启动而启动,所以可以通过ServletContext获得web应用全局的初始化参数,在日后学习的spring中,就是将Spring文件的路径配置在初始化参数中.
- ServletContext是一个域对象,因为它随着服务器的启动而创建,服务器的关闭而销毁,所以存放在ServletContext中的数据是整个web应用所共享的.
- 向ServletContext域中放入数据 setAtrribute(String name,Object obj);
- 从ServletContext域中获取数据 getAttribute(String name);
- 从ServletContext域中删除数据 removeAttribute(String name);
HttpServletResponse
response运行流程
- tomcat内核发送一个空内容的response对象,供我们去将需要的内容放入
response设置响应行
- 使用response设置了状态码,那么tomcat就不会再去设置状态码了
- response.setStatus(302);
response设置响应头
- 设置不同的头,客户端收到消息后会做响应的操作
- response.setHeader("Location", "/WebTest/index.html");
response重定向
重定向相当于客户端发送第二次请求
response.sendRedirect("/WebTest/index.html");
response定时重定向
重定向特点
- 重定向过程是客户端收到消息后,再做的请求,所以浏览器的地址会发生改变
- 服务器收到的请求是两次请求
response设置响应体
- 通过response可以将客户端需要的数据放入响应体中,其过程是先将返回的信息放在response的缓冲区中,然后由tomcat读取缓冲区的内容,封装成http的响应内容发送给客户端。
解决乱码问题
response.setCharacterEncoding("UTF-8");
response.setHeader("Content-Type","text/html;charset=UTF-8");
(使用httpservlet时写上就对了,标准。)
JavaWeb基础(day15)( http + tomcat + servlet + 响应)的更多相关文章
- [JavaWeb基础] 002.JSP和SERVLET初级入门
上一篇中,我介绍了javaweb项目的创建和Tomcat的搭建和部署,接下来我们要在上一篇的基础上去讲解一下简单的jsp和servlet交互,做出一个简单的登陆功能页面.该例子主要讲解了从页面请求道后 ...
- JavaWeb基础-Jsp的请求与响应
JSP请求和相应 HTTP头信息 当浏览器请求一个网页时,它会向网络服务器发送一系列不能被直接读取的信息,因为这些信息是作为HTTP信息头的一部分来传送的. HttpServletRequest类 r ...
- [JavaWeb基础] 004.用JSP + SERVLET 进行简单的增加删除修改
上一次的文章,我们讲解了如何用JAVA访问MySql数据库,对数据进行增加删除修改查询.那么这次我们把具体的页面的数据库操作结合在一起,进行一次简单的学生信息操作案例. 首先我们创建一个专门用于学生管 ...
- [Java拾遗三]JavaWeb基础之Servlet
Servlet 1,servlet介绍 servlet是一项动态web资源开发技术. 运行在服务器端. 作用:处理业务逻辑,生成动态的内容,返回给浏览器 ...
- JavaWeb基础:Servlet
Servlet 基本概念 Servlet是Sun公司提出的一种用于开发动态Web资源的技术规范: Servlet是一个Java接口, 用户想要开发自定义的Servlet可以通过以下步骤: 编写实现Se ...
- [Java面试三]JavaWeb基础知识总结.
1.web服务器与HTTP协议 Web服务器 l WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. l Internet上供外界访问的Web资源分为: • 静 ...
- JavaWeb基础知识总结
JavaWeb基础知识总结. 1.web服务器与HTTP协议 Web服务器 l WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. l Internet上供 ...
- JavaWeb开发之详解Servlet及Servlet容器
自JavaEE诞生伊始,Servlet容器和Servlet技术,就构成了JavaEE应用的核心,配合其它组件,它们完善了Java企业级开发的全套解决方案.小到一个静态博客网站,大到分布式的集群应用,都 ...
- 超详细的Java面试题总结(四 )之JavaWeb基础知识总结
系列文章请查看: 超详细的Java面试题总结(一)之Java基础知识篇 超详细的Java面试题总结(二)之Java基础知识篇 超详细的Java面试题总结(三)之Java集合篇常见问题 超详细的Java ...
随机推荐
- WeChair项目Beta冲刺(9/10)
团队项目进行情况 1.昨日进展 Beta冲刺第九天 昨日进展: 项目开始扫尾 2.今日安排 前端:前端工作已经完成 后端:扫码占座后端测试,实现对超时预约座位下座的功能 数据库:和后端组织协商扫 ...
- c++构造函数的调用方法
#include<iostream> using namespace std; class Base { public: Base(){ cout<<"hello&q ...
- 算法题解:最小的K个数(海量数据Top K问题)
[本文版权归微信公众号"代码艺术"(ID:onblog)所有,若是转载请务必保留本段原创声明,违者必究.若是文章有不足之处,欢迎关注微信公众号私信与我进行交流!] 题目 输入 n ...
- Qt布局的简单介绍
1 介绍 参考视频:https://www.bilibili.com/video/BV1XW411x7NU?p=25 布局的好处:布局之后,改变主窗口大小,其余窗口可以自适应. 2 布局分类 垂直 ...
- SSH网上商城四
第29课:10-SSH网上商城:购物模块的实体的封装 1.现在我们要实现购物车的模块,当用户在点击 加入购物车按钮的时候需要跳转到 上面我们需要对购物车的对象进行封装 上面一个商品就对应一个记录项,购 ...
- SpringMVC中Map、Model、ModelMap、ModelAndView之间的关系及区别
首先,在了解这三者之前,需要知道一点:SpringMVC在调用方法前会创建一个隐含的数据模型(Model),作为模型数据的存储容器, 成为”隐含模型”. 如果controller方法的参数为Moedl ...
- Python3-算法-递归
递归 递归算法是指一般通过函数或子进程来实现,在函数或子进程的内部,直接或间接地调用自己的算法,说白了就是自己调自己 注: 1.在使用递归的时候,必须要有一个递归出口,即一个明确的结束条件,否则就是死 ...
- JFinal 开箱评测,这次我是认真的
引言 昨天在看服务器容器的时候意外的遇到了 JFinal ,之前我对 JFinal 的印象仅停留在这是一款国人开发的集成 Spring 全家桶的一个框架. 后来我查了一下,好像事情并没有这么简单. J ...
- 手写SpringMVC框架(一)-------项目搭建
SpringMVC处理请求的大致流程: 我们来开始着手手写一个SpringMVC框架. 新建一个springMVC项目,流程参见 SpringMVC框架搭建流程 引入servlet相关的jar包: & ...
- Spring事务的传播级别
一.简单说明 传播属性 描述 PROPAGATION_REQUIRED 如果当前没有事务,就创建一个事务,如果当前存在事务,就加入该事务. PROPAGATION_REQUIRED_NEW 当前的方法 ...