HTTP协议
Http,超文本传输协议是互联网上最广泛的一种网络协议,所有的www文件都必须遵守这个标准。
Http协议由http请求和http响应组成
http请求:
1.请求行
请求方式 POST、GET、PUT、DELETE等
请求的资源 /DemoEE/form.html
协议版本 http/1.1
2.请求头
cookie 浏览器缓存的cookie信息
User-Agent 客户端浏览器与操作系统相关信息
Connection 保持连接状态Keep-Alive 连接中,close 已关闭。
Host 请求的服务器主机名
Content-Length 请求的长度
Content-Type 如果是Post请求会由这个表头,默认值为 application/x-www-form-urlencodeed 表示请求提内容使用url编码
Accept 浏览器可MIME类型,文件类型的一种描述方式。如:text/html,text/css,text/javascript,iamge/*
Accept-Encoding 浏览器支持的数据压缩格式如GZIP压缩
Accept-Language 浏览器支持的语言
3.请求体
Post请求方式: 请求体会由请求的参数 如 username=1&password=2
Get请求方式:请求参数不会出现在请求体重,会拼接在url后面 xxx.jsp?username=1&password=2
Http响应:
1.响应行
Http 状态码 200(请求成功),302(请求重定向),304(请求资源没有改变,访问本地缓存),404(请求资源不存在),500(服务器内部错误)
2.响应头
Location 302时,指定响应的路径。
Content-Type 响应正文的类型MiMe类型
Set-Cookie 服务器向浏览器写入cookie
Content-Encoding 服务器使用的压缩格式
Content-length 响应正文长度
Refresh 定时刷新。 几秒后调到哪个url
Server 服务器名称
Last-Modified 文件最后修改时间
3.响应体
服务器返回给浏览器的页面正文,浏览器将正文加载到内存,然后渲染解析显示出来。
B/S Browser/Server 浏览器端
C/S Client/Server 客户端
静态资源:html页面,数据不会改变。
动态资源:写程序的页面,如asp、php。
Tomcat
Tomcat Apache 开源免费的中小型web应用服务器
点击tar.gz下载 windows下载 64-bit windows zip
Tomcat的目录结构
bin 脚本目录
conf 配置目录
lib 依赖jar库目录
logs 日志目录
temp 临时文件目录
webapps web应用发布目录
work tomcat处理jsp的工作目录
bin脚本目录
windows执行 .bat版本 mac执行.sh版本
启动脚本:startup.sh
停止脚本:shuntdown.sh
conf配置文件目录
核心配置文件:server.xml
用户权限配置文件:tomcat-users.xml
所有web项目默认配置文件:web.xml
打开终端
1.cd 进入根目录
2.执行 sh bin/startup.sh 启动服务器
3.浏览器输入localhost:8080
在webapps中放入网站 输入网址/文件夹名 即可访问
localhost:8080/myProject
如果启动失败常见原因:
1.端口冲突
server.xml
找到Connector元素 修改port属性可以更改端口号
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
2.没有配置java_home环境变量
servlet
Servlet是运行在服务器端的java小程序,是sun公司提供一套规范(接口),用来处理客户端请求、响应操作。
Servlet的生命周期
1. init(ServletCOnfig config) 初始化 创建servlet的时候执行
2.service(ServletRequest request,ServletResponse response) 每次请求都会执行
3.destroy() 销毁 servlet销毁时执行
一、Idea 配置
1.新建web application项目 Idea 选择 Java Enterprise -> web application
2.新版本没有web-inf文件夹 解决方法 进入project structure ->facets->点击小加号,添加web.xml
3.在web/WEB-INF目录下新建两个文件夹,classes用于存放servlet的字节码文件(.class),lib用于存放项目引用的包。
4.进入Project Structure,进入Modules(IDEA的工程)选项卡,将Paths的两个输出路径均改成第2步新建的classes。
5.然后点击Dependencies,选择右边+号,新建JARS路径,选择第2步创建的lib文件夹 - >Jar Directory
6.进入Artifacts选项卡,将输出目录定为Tomcat安装位置的webapps下新建的该工程文件夹
7.Run->Edit Configurations配置Tomcat,设置tomcat端口等信息。
二、创建类并实现 Servlet接口 重写方法
public class QuickStartServlet implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.print("init running..");
}
@Override
public ServletConfig getServletConfig() {
System.out.print("getServletConfig running..");
return null;
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.print("service running..");
}
@Override
public String getServletInfo() {
System.out.print("getServletInfo running..");
return null;
}
@Override
public void destroy() {
System.out.print("destroy running..");
}
}
3.配置web.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<!-- 对应的类-->
<servlet>
<servlet-name>QuickStartServlet</servlet-name>
<servlet-class>com.david.servlet.QuickStartServlet</servlet-class>
</servlet>
<!-- 访问路径-->
<servlet-mapping>
<servlet-name>QuickStartServlet</servlet-name>
<url-pattern>/QuickStartServlet</url-pattern>
</servlet-mapping>
</web-app>
ServletContext 上下文对象
<servlet>
<servlet-name>QuickStartServlet</servlet-name>
<servlet-class>com.david.servlet.QuickStartServlet</servlet-class>
<init-param>
<param-name>name</param-name>
<param-value>david</param-value>
</init-param>
</servlet>
新增init-param节点 使用Context上下文对象获取节点信息
public void init(ServletConfig config) throws ServletException {
String servletName = config.getServletName();
System.out.println(servletName);
String initParameter = config.getInitParameter("name");
System.out.println(initParameter);
}
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
默认首页列表
httpServlet
httpServlet实现了servlet接口,并实现servlet方法。
在httpServlet继承的父级类中实现的service方法 判断是get请求还是post请求然后执行doGet 或 doPost方法
public class QUickStartServletExtends extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
String username = request.getParameter("username");
String password = request.getParameter("password");
response.getWriter().write("doget..." + username + "pass:" + password);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
response.getWriter().write("dopost...");
}
}
HttpServletResponse
response.setStatus(302); //设置状态码
//添加响应头
response.addHeader("name","zhangsan");
response.addIntHeader("age",18);
response.addDateHeader("date",System.currentTimeMillis());
//修改已有的响应头
response.setHeader("name","lisi");
response.setIntHeader("",0);
response.setDateHeader("",0L);
重定向:
response.setStatus(302);
response.setHeader("Location","/servlet/QuickStartServlet");
方法:response.sendRedirect("/servlet/QuickStartServlet");
设置响应体
//设置编码
response.setCharacterEncoding("gb2312");
PrintWriter writer = response.getWriter();
writer.write("<h1>试试printwriter</h1>");
字节输出流
ServletOutputStream st = response.getOutputStream();
HttpServletRequest
在创建Servlet时,会重写service方法或doGet、doPost方法,这些方法都有两个参数一个是request请求一个是response响应
service方法中的request的类型是ServletRequest,而doGet、doPost方法的request类型是HttpServletRequest ,HttpServletRequest是ServletRequest的子接口。
1.通过request获得请求行
String method = request.getMethod();
String uri = request.getRequestURI();
StringBuffer url = request.getRequestURL();
String contextPath = request.getContextPath();
//get请求的参数
String param = request.getQueryString();
PrintWriter writer = response.getWriter();
writer.println("method:" + method);
writer.println("uri:" + uri);
writer.println("url:" + url);
writer.println("contextPath:" + contextPath);
writer.println("param:" + param);
method:GET uri:/servlet/QUickStartServletExtends url:http://localhost:9999/servlet/QUickStartServletExtends contextPath:/servlet param:name=david&pass=123
2.通过request获得请求头
String header = request.getHeader("User-Agent");
System.out.println(header);
Enumeration<String> headerNames= request.getHeaderNames();
while(headerNames.hasMoreElements()){
String headerName = headerNames.nextElement();
writer.println(headerName);
String headerValue = request.getHeader(headerName);
writer.println(headerValue);
}
3.通过request获得请求体
//获得指定参数
String name = request.getParameter("name");
String pass = request.getParameter("pass");
writer.println(name);
writer.println(pass);
//获得多个值
String[] parms = request.getParameterValues("checkbox");
for(String s : parms){
writer.println(s);
}
//获得所有请求参数名称
Enumeration<String> paramsNames = request.getParameterNames();
while(paramsNames.hasMoreElements()){
writer.println(paramsNames.nextElement());
}
//获得所有参数键值对集合
Map<String,String[]> maps = request.getParameterMap();
for(Map.Entry<String,String[]> entry : maps.entrySet()){
writer.println(entry.getKey());
for(String s : entry.getValue()){
writer.println(s);
}
writer.println("-------");
}
地址转发 与302重定向区别是 地址不发生改变
RequestDispatcher dis = request.getRequestDispatcher("/path");
dis.forward(request,response);
- Web开发之Tomcat&Servlet
<!doctype html>01 - JavaEE - Tomcat&Servlet figure:first-child { margin-top: -20px; } #wri ...
- tomcat&servlet初记
tomcat&servlet初记 1. web相关概念 2. web服务器软件的学习:tomcat 3. servlet入门学习 web相关概念 1,软件架构 1,cs架构:客户端/服务器端 ...
- JavaWeb基础(day15)( http + tomcat + servlet + 响应)
HTTP+Tomcat+Servlet+响应 HTTP HTTP 超文本传输协议(Hyper Text Transfer Protocol ),一种网络协议. 协议的组成和过程 HTTP协议由 ...
- What is the difference Apache (Http Server) and Tomcat (Servlet Container)
The Apache Project The Apache Project is a collaborative software development effort. Its goal is to ...
- TOMCAT ---> servlet概念
1 TOMCAT ---> servlet概念 2 TOMCAT 目录结构 (各个文件夹都存放什么东西) 3 TOMCAT 程序的层级 web | |---- js,jsp,html,css ( ...
- Tomcat&Servlet
Tomcat&Servlet 一.web开发相关的概念 1. 软件架构 1.1 C/S架构 C:Client客户端, S:Server服务器 比如:QQ.微信.大型网游 优点: 显示效果炫 安 ...
- Servlet 规范笔记—基于http协议的servlet
在上一章节,我们大概的描述了servlet的规范以及servlet和servlet容器的概念和用途,我们清楚的知道servlet容器提供了接收来自client端的请求,然后根据请求进行处理(如:执行对 ...
- Android网络(3):HttpClient作client,Tomcat Servlet作server的交互演示样例
前面相继介绍了Android网络编程里的Socket传输图片.HttpURLConnection,今天看HttpClient. 第一部分:JavaEE版的Eclipse配置Tomcat [备注:开发后 ...
- HTTP协议介绍(SERVLET)
本文是servlet的入门篇,主要简单介绍下http协议 1.什么是HTTP _ 1.http协议:_1. 复杂解释: http(超文本传输协议)是一个基于请求与响应模式的.无状态的.应用层的协议 ...
- Tomcat+Servlet面试题都在这里
下面是我整理下来的Servlet知识点:  图上的知识点都可以在我其他的文章内找到相应内容. Tomcat常见面试题 Tomcat的缺省端口是多少,怎么修改 Tomcat的缺省端口是多少,怎么修改 ...
随机推荐
- Ajax 初步学习总结
Ajax是什么 Ajax是(Asynchronous JavaScript And XML)是异步的JavaScript和xml.也就是异步请求更新技术.Ajax是一种对现有技术的一种新的应用,不是一 ...
- 在android C/C++ native编程(ndk)中使用logcat
最近在研究Android 2.2 源代码的C/C++层,需要对代码进行一些调试,但是奇怪的是,直接添加LOGD("XXXXXXXX");,使用logcat却看不到任何输出,换成LO ...
- 软考论文的六大应对策略V1.0
软考论文的六大应对策略V1.0 短短2个小时,要写3000字的文章,对习惯了用电脑敲字.办公的IT从业人员而言,难度不小.尤其,大家会提笔忘字.笔者的应试策略,就是勤学苦练,考试前的一个星期,摸清套路 ...
- InfiniDB 修改一行的效率?
InfiniDB引擎的DML速度比较慢,无论设置自动提交开关为关闭或开启,插入性能都很糟糕,但更新和删除的效率还可以,并且不支持truncate表操作. 删,改 效率高 插入,效率低(测试,在数据量稍 ...
- Erlang Rebar 使用指南之三:Rebar和OTP程序约定和命令
Erlang Rebar 使用指南之三:Rebar和OTP程序约定和命令 全文目录: https://github.com/rebar/rebar/wiki 本章位置: https://github. ...
- 学习C++模板,类模板
当我们使用向量时,会经常使用形如:vector<int> a的式子.这个表达式就是一个类模板实例化的例子,vector是一个类模板,我们给他传递模板参数(见<>里),然后创建一 ...
- "《算法导论》之‘图’":不带权二分图最大匹配(匈牙利算法)
博文“二分图的最大匹配.完美匹配和匈牙利算法”对二分图相关的几个概念讲的特别形象,特别容易理解.本文介绍部分主要摘自此博文. 还有其他可参考博文: 趣写算法系列之--匈牙利算法 用于二分图匹配的匈牙利 ...
- Oracle Global Finanicals Technical Reference(二)
Skip Headers Oracle Global Finanicals Oracle Global Financials Technical Reference Manual Release 11 ...
- myBatis源码学习之SqlSessionFactoryBuilder
SqlSessionFactoryBuilder通过类名就可以看出这个类的主要作用就是创建一个SqlSessionFactory,通过输入mybatis配置文件的字节流或者字符流,生成XMLConfi ...
- Glog 和 Log4cxx 的对比
转自:http://monkeycn.iteye.com/blog/1021703 #1 Log4cxx有比较完整的配置文档方式,xml和java配置档:GLog只能通过启动程序的时候的输入参数来配置 ...