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的缺省端口是多少,怎么修改 ...
随机推荐
- 15_Android中任务栈
1.一个应用程序一般都是由多个activity组成的. 2.任务栈(task stack)(别名backstack后退栈)记录存放用户开启的activity的. 3.一个应用程序一被开启系统就给 ...
- Ext.Net_1.X_WINDOW遮罩层被GridPanel挡住
通过调试HTML代码,发现其实是DIV. chrome 中修改DIV Z:INDEX 就不被遮住了?但是又晓得如何修改window的Z:INDEX.那就修改"背景"GP的吧.
- wing带你玩转自定义view系列(1) 仿360内存清理效果
本篇是接自 手把手带你做自定义view系列 宗旨都是一样,带大家一起来研究自定义view的实现,与其不同的是本系列省去了简单的坐标之类的讲解,重点在实现思路,用简洁明了的文章,来与大家一同一步步学习. ...
- 【Qt编程】Qt学习之窗口间的相互切换
在用Qt设计GUI时,经常要设计两个窗口之间的相互切换,即可以从一个窗口跳转到另一个窗口,然后又从另一个窗口跳转回原窗口.下面我们来介绍具体的实现方法: 工程建立及功能描述: 首先,我们建立Qt G ...
- java工具类(五)之日期格式字符串与日期实现互转
JAVA字符串转日期或日期转字符串 项目开发过程中需要实现日期格式的字符串与日期进行互转,并进行日期的加减操作. Demo如下: package weiming.lmapp.utils; import ...
- 添加启动游戏过渡场景Default Splash Scene(Unity3D开发之十三)
添加启动游戏过渡场景Default Splash Scene(Unity3D开发之十三) 猴子原创,欢迎转载.转载请注明: 转载自Cocos2Der-CSDN,谢谢! 原文地址: http://blo ...
- web.xml 详细介绍
url:http://mianhuaman.iteye.com/blog/1105522#bc2344393 1.启动一个WEB项目的时候,WEB容器会去读取它的配置文件web.xml,读取<l ...
- SQL Queries and Multi-Org Architecture in Release 12
In this Document Abstract History Details Previous Releases Release 12 Multi-Org Session ...
- EBS R12安装升级(FRESH)(四)
7 升级Oracle数据库到11gR2 7.1 先打补丁7303030_zhs,9062910,8919489,8919489_ZHS ,9868229,10163753,11071569,97380 ...
- Activity之间传递大数据问题
Android开发人员都知道,Intent适用于在不同的Activity之间传递数据,包括参数.字符串.以及序列化的对象等.但是笔者所做的项目用到了使用Intent 传递Bitmap图片对象,图片的数 ...