一、http协议
超文本传输协议:
浏览器往服务器发送 ---- 请求
服务器往浏览器回写 ---- 响应
1、请求:(request)
1)请求行:请求信息的第一行
格式:请求方式 访问的资源 协议/版本 egg:GET /myhtml.html HTTP/1.1
请求方式:get和post
get会把参数放在url的后面 post不会
get参数大小有限制,post请求却没有限制
get请求没有请求体;post请求有请求体 请求参数放在请求体中
2)请求头:请求信息的第二行到空行结束
常见的请求头:
Accept: text/html,image/bmp --支持数据类型 text/html text/css text/javascript 大类型/小类型 mime类型
Accept-Charset: ISO-8859-1 --字符集
Accept-Encoding: gzip --支持压缩
Accept-Language:zh-cn --语言环境
Host: www.click369.cn:80 --访问主机
If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT --缓存文件的最后修改时间
Referer: http://www.click369.com/index.jsp --来自哪个页面、防盗链
User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)
Cookie
Connection:Keep-Alive --链接状态
3)请求体:空行以下的内容
只有post才有请求体:放请求参数 egg:username=tom&password=123
2、响应:(response)
1)响应行:响应信息的第一行
格式:协议/版本 状态码 状态码说明 egg:HTTP/1.1 200 OK
状态码:
200 正常响应成功
302 重定向
304 读缓存
404 用户操作资源不存在
500 服务器内部异常
2)响应头:从响应信息的第二行到空行结束
常见的响应头:
Location: http://www.it315.org/index.jsp --跳转方向 和302一起使用的
Server:apache tomcat --服务器型号
Content-Encoding: gzip --数据压缩
Content-Length: 80 --数据长度
Content-Language: zh-cn --语言环境
Content-Type: text/html; charset=GB2312 --数据类型
Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT --最后修改时间
Refresh: 1;url=http://www.it315.org --定时刷新
Content-Disposition: attachment; filename=aaa.zip --下载
Set-Cookie:SS=Q0=5Lb_nQ; path=/search
Expires: -1 --缓存
Cache-Control: no-cache --缓存
Pragma: no-cache --缓存
Connection: Keep-Alive --连接
3)响应体:空行以下的内容
用户浏览器页面上展示的内容
二、tomcat服务器
1、常见的JavaEE Web服务器
WebLogic oracle公司 大型的JavaEE服务器 收费
WebSphere IBM 公司 大型的JavaEE 服务器 收费
Resin Caucho公司 中型的JavaEE 服务器 免费的
jBoss 红帽公司 大型的JavaEE服务器 免费的
tomcat 阿帕奇基金组织 小中型的服务器 免费 纯Java语言写的
2、tomcat服务器
解压后的目录
bin:放的是一些可执行文件
con:放的是一些配置文件
lib:核心类库
logs:放一些日志文件
temp:存放一些临时文件
webapps:存放web项目的
work:存放一些运行过程中生成的文件
使用:开启服务器:bin 里面有一个 startup.bat 双击
正常关闭: bin 里面有一个 shutdown.bat 双击 快捷键正常关闭 ctrl+c
强制关闭:点击叉号 不推荐
3、安装后可能出现的问题
1)黑窗口一闪而过:正确配置一下 JDK 环境变量 JAVA_HOME
2)起开之后报错:tomcat 默认的端口8080 被其他进程占用
解决: a、把占用了tomcat端口关掉
b、修改tomcat端口号:con 里面 server.xml里面可以修改tomcat默认端口号
三、Servlet概述
1、概述
运行在服务器端的小程序,定义了一个Java类能被浏览器所访问的规则 其实就是一个接口;
2、作用:用来 接收请求 处理请求 响应请求
Servlet 由服务器创建 管理 销毁 我们只是使用它
3、创建一个Servlet实现类————服务器通过反射的方式 创建Servlet对象,调用其方法
//Servlet是单例的。可能会存在线程安全问题,尽量不要定义成员变量。 public class MyServlet implements Servlet { //当Servlet被创建时调用 而且只调用一次 一般在这个方法里面,我们会做一些初始化的事情 public void init(ServletConfig config) throws ServletException { System.out.println("Servlet被创建了"); } // 核心方法 对外提供服务 每一次请求会调用该方法 public void service(ServletRequest requst, ServletResponse response) throws ServletException, IOException { System.out.println("请求来了"); } // 当Servlet被销毁时调用 public void destroy() { System.out.println("Servlet被销毁了"); } //获取配置对象的方法 public ServletConfig getServletConfig() { return null; } //获取 Servlet版本信息 作者等信息 一般不用 public String getServletInfo() { return null; } }
4、Servlet的生命周期
被创建时调用 init()------对外提供服务调用service()-----Servlet销毁时调用destroy()
1)init()
Servlet第一次被访问时,被创建,调用init()方法,只执行一次。
2)service()
每一次被访问时,会调用service()方法提供服务。
3)destroy()
服务器关闭时,servlet被销毁;服务器正常关闭是,在销毁Servlet之前,会调用destory()方法。
5、ServletConfig对象————配置对象
ServletConfig是一个接口 在Servlet初始化的时候 由服务器创建其子类对象传递给 init()方法
1)获取web.xml 中配置的初始化参数
String getInitParameter(String name)
Enumeration getInitParameterNames()
//在web.xml里面进行配置虚拟路径
<servlet>
<servlet-name>mydemo</servlet-name> //给Servlet配一个别名
<servlet-class>org.westos.servletdemo.MyServlet</servlet-class> //配置Servlet全类名
</servlet>
<servlet-mapping> 配置一个映射
<servlet-name>mydemo</servlet-name>
<url-pattern>/demo</url-pattern> 配置一个虚拟路径用来作为浏览器要访问的资源路径
</servlet-mapping>
2)获取ServletContext全局域上下文对象 //代表了整个web应用,在域的范围内共享数据
ServletContext getServletContext()
3)获取servlet配置的名称 就是在web.xml中给servlet起的名字
String getServletName()
6、JavaWeb中四大域对象
1)ServletContext 全局域对象 统管整个服务器资源,域对象的作用,在一定范围内可以共享数据
2)session:会话域 可以包含多次请求和多次响应,并且可以在多次请求和多次响应间共享数据,只要不关闭浏览器
3)request:请求域 在一次请求间共享数据,重定向后请求域中数据不可用
4)pageContext:页面域 在一个页面间共享数据(最小域)
4个域对象 都有下面三个方法
setAttribute("num", "100");//在域中存储数据
getAttribute("num");//取出域中的数据
removeAttribute("num");//清除域中的数据
ServletContext全局上下文对象作用:
a:在域中的资源间共享数据
b:用来获取服务器的真实路径
servletContext.getRealPath("/"); //egg: servletContext.getRealPath("/WEB-INF/a.txt");
ServletContext只能用于web环境。如果是非web环境,则使用ClassLoader来获取真实路径
获取src下的文件"a.txt":
//1.获取该类对应的类加载器对象
ClassLoader loader = this.getClass().getClassLoader();
//2.获取文件运行的真实路径
URL url = loader.getResource("a.txt");
String path = url.getPath();
c:获取文件类型 getMimeType("真实路径")
7、request和response对象————由服务器创建,管理,销毁
1)request请求对象
ServletRequest(接口)<---继承 HttpServletRequest(接口)<---实现 [email protected]
入门egg:
//接受页面的传过来的参数
request.setCharacterEncoding("utf-8");
String value = request.getParameter("key");
2)response响应对象
ServletResponse(接口)<---继承 HttpServletResponse(接口)<---实现 [email protected]
入门egg:
//响应一段字符串到页面
response.setContentType("text/html;charset=utf-8");// 设置响应编码
PrintWriter writer = response.getWriter();//发送字符数据的对象
writer.write("<font color='red' size='7'>Hello Welcome</font>");
// 也可以获取响应对象中的字节输出流实现
ServletOutputStream fos = response.getOutputStream();
8、HttpServlet————一般要创建一个Servlet就继承HttpServlet就可以了
//public abstract class HttpServlet extends GenericServlet implements Serializable public class MyServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); } }
原文地址:http://blog.51cto.com/378213986/2056144