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的缺省端口是多少,怎么修改 ...
随机推荐
- javascript语法之字符串转换成数字
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 高通 MSM8K bootloader 之四: ramdump
前面说过高通平台,系统crash发生时,抓取crash ramdump非常重要,否则很难定位crash原因. 平台默认抓取ramdump的方法都有很强的局限性,如下: 1.PC端工具QPST提供的 M ...
- 01_MUI之Boilerplate中:HTML5示例,动态组件,自定义字体示例,自定义字体示例,图标字体示例
1安装HBuilder5.0.0,安装后的界面截图如下: 2 按照https://www.muicss.com/docs/v1/css-js/boilerplate-html中的说明,创建上图的 ...
- SwipeRefreshLayout实现上拉下拉刷新
1:在布局中添加SwipeRefreshLayout和Listview组件 [html] view plain copy <?xml version="1.0" encodi ...
- ANN实现
ANN核心数据结构: typedef struct { int input_n; /* number of input units */ int h ...
- 框架页面高度自动刷新Javascript脚本
实现原理:加载index.htm时候,每隔1秒钟自动调用脚本刷新框架页面代码 代码优点:只需要设置index.html框架页面中的脚本,调用加载的子页面中不需要设置任何代码. index.htm代码如 ...
- 测试AtomicInteger与普通int值在多线程下的递增操作
日期: 2014年6月10日 作者: 铁锚 Java针对多线程下的数值安全计数器设计了一些类,这些类叫做原子类,其中一部分如下: java.util.concurrent.atomic.AtomicB ...
- objc写一个NSMutableArray不连续索引替换对象的方法
NSMutableArray内置的方法-(void)replaceObjectsAtIndexes:(NSIndexSet*)set withObjects:(NSArray*)objs 只能替换一段 ...
- Gradle 1.12用户指南翻译——第四十四章. 分发插件
本文由CSDN博客貌似掉线翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...
- C# /VB.NET 创建PDF项目符号列表和多级编号列表
使用项目符号和编号,可以让文档的层次结构更清晰.更有条理,也更容易突出重点.在编辑文档的过程中,我个人也比较偏爱项目标号来标注文章重点信息.在之前的文章中,介绍了如何在Word中来创建项目标号和编号列 ...