1.web概念
软件架构
C/S结构的软件
Client/Server 客户端和服务器,这种软件往往需要安装。比如QQ、迅雷、播放器
B/S结构的软件
Browser/Server 浏览器和服务器,这种软件不需要安装,只需要通过浏览器就可以访问
常见web服务器
- Tomcat:Apache组织提供的一个开源的免费的web服务器。满足EE的Servlet和JSP的规范。

  • WebSphere :IBM公司开发的一个收费的大型web服务器。满足了EE开发的所有规范。
  • WebLogic:BEA公司开发的一个收费的大型web服务器。满足了EE开发的所有规范。
  • IIS:应用在.NET平台上。
  • Apache :应用在PHP平台上。
    web开发资源
    - 静态web资源
    • HTML
    • CSS
    • JS
  • 动态web资源
    • Servlet、JSP
    • PHP
    • ASP

2.Http协议
1.概念
HTTP协议:超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。用于定义WEB浏览器与WEB服务器之间交换数据的过程。
协议:双方约定的规则

  1. 2.特点
  2. 请求和响应必须成对;

先有请求后有响应
HTTP协议默认的端口:80 但是80一般可以省略不写

  1. 3.版本
  2. HTTP/1.0,发送请求,创建一次连接,获得一个web资源,连接断开。 短连接

HTTP/1.1,发送请求,创建一次连接,获得多个web资源,连接断开 长连接
4.协议内容组成
响应协议: (响应行 响应头 响应体)

  1. 5.get请求协议信息
  2. 6.Post的请求协议
  3. 7.Http请求头信息解释
  4. Referer 浏览器通知服务器,当前请求来自何处。如果是直接访问,则不会有这个头。常用于:防盗链
  5. Cookie 与会话有关技术,用于存放浏览器缓存的cookie信息。
  6. User-Agent 浏览器通知服务器,客户端浏览器与操作系统相关信息
  7. 8.Http响应详解
  8. Location 指定响应的路径,需要与状态码302配合使用,完成跳转。
  9. Content-Disposition 文件下载的时候使用。通过浏览器以下载方式解析正文
  10. Set-Cookie 与会话相关技术。服务器向浏览器写入cookie
  11. Refresh 定时刷新
  12. 9.常见服务器响应状态码
  13. 200 代表响应成功

302 请求重定向
304 代表读取缓存
400 无效请求(请求是坏的)
404 资源找不到 (服务器本身不存在该资源; 自己配置的路径不对)
405 已经访问到了服务器的资源,但是找不到对应的方法.
500 代表服务器内部错误

3.tomcat 服务器
概念
- tomcat就是一个web的服务器,用来发布web项目。

  • tomcat 目前存在很多版本,希望大家了解tomcat的版本,从而知道自己的创建的项目使用的是几版本规范,不同版本的规范技术可能不同。我们学习的JavaEE 7.0,Servlet规范3.1,tomcat至少使用8.5版本。
    下载
    https://tomcat.apache.org/download-80.cgi
    使用
    解压下载好的zip文件
    tomcat解压目录/bin/startup.bat 双击运行启动tomcat
    访问路径:http://localhost:8080/
    目录结构

    1. bin:脚本目录
  • 启动脚本:startup.bat
    停止脚本:shutdown.bat
    conf:配置文件目录 (config /configuration)
    核心配置文件:server.xml
    用户权限配置文件:tomcat-users.xml
    所有web项目默认配置文件:web.xml
    lib:依赖库,tomcat和web项目中需要使用的jar包
    logs:日志文件.
    localhostaccess_log..txt tomcat记录用户访问信息,星_表示时间。
    例如:localhost_access_log.2018-07-07.txt
    temp:临时文件目录,文件夹内内容可以任意删除。
    webapps:默认情况下发布WEB项目所存放的目录。
    work:tomcat处理JSP的工作目录。
    项目名称 (webapps 文件夹)
    |——-静态资源.HTML,CSS,JS
    |——-WEB-INF (不能直接通过浏览器进行访问)
    |——web.xml 当前WEB项目的核心配置,Servlet2.5必须有,3.0可省略。
    |——lib 当前WEB项目所需要的第三方的jar的存放位置。
    |——classes Java源码编译后生成class文件存放的位置。
    idea中配置tomcat
    步骤1:首先打开idea开发工具,然后点击Run菜单,选择Edit Configurations…菜单,打开Run/Debug Configurations对话框

    1. 步骤2:添加服务器,点击对话框左上角的加号,选择Tomcat Server,再选择Local子菜单
    2. 3.找到右上角Configure... 关联到Tomcat安装目录再按图操作
  • 发布web项目
    IEDA集成Tomcat发布第一个web项目.docx
    第一种部署方式(Eclipse采用第一种部署方式)
    1) 把我们的web项目直接放到tomcat下的webApps目录下即可.
    2) 启动服务器访问: http://localhost:8080/项目的名称/资源的名称
    举例:http://localhost:8080/firstWeb/abc.html
    第二种部署方式: (部署与服务器分离)
    1) 把web项目放在G下(不在tomcat的webapp中)
    2) 进入tomcat的conf目录下找到server.xml文件,做如下配置

    1. 第三种部署web项目的方式(IDEA使用这种方式集成tomcat)
    2. 1) 把我们的web项目仍然放到G盘下
    3. 2) 找到 G:\developer\apache-tomcat-8.5.31\conf\Catalina\localhost
    4. 在该文件夹下创建一个xml文件, 注意xml的文件名称会作为访问时的项目名称
    5. 3) 编写xml内容
    6. 4)访问:项目名称变为xml中的文件名称即可.别的不变.
  • 注意问题
    1.点击startup.bat 闪退.
    原因: jdk的环境变量配置的不正确. %JAVA_HOME%
    2.如果想同时启动两个tomcat , tomcat的端口是8080
    启动第一个正常
    启动第二个报错: Caused by: java.net.BindException: Address already in use: bind
    解决方案: 修改第二个tomcat的端口号

    1. 3.项目的虚拟路径,一般和项目的名称一致.

4.Servlet
1.概念
Serlvet是一个运行在web服务器上的java程序.
狭义的理解: Servlet是一个接口
广义的理解: 实现了Servlet接口的类,我们都认为是Servlet程序. (按这种理解)
作用: Serlvet 可以接受用户的请求; 并相应用户的请求
2.入门程序及执行流程
入门程序
用户访问一个Servlet , Servlet中处理一段时间,给用户响应一些数据.
实现的步骤:
1.编写一个MyServlet 实现Servlet接口, 实现里面所有的方法
2.重点重写service方法, 该方法可以处理用户的请求 (写一个循环,模拟后台处理任务,给用户返回一些数据)
3.配置web项目的核心配置文件web.xml

  1. public class MyServlet implements Servlet{
  2. @Override
  3. public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
  4. System.out.println("用户的请求已经到到达了后台的Servlet...");
  5. for (int i = 0; i < 1000000; i++) {
  6. }
  7. //给用户响应一些数据
  8. servletResponse.getWriter().print("okok...");
  9. }
  10. @Override
  11. public void init(ServletConfig servletConfig) throws ServletException {
  12. }
  13. @Override
  14. public ServletConfig getServletConfig() {
  15. return null;
  16. }
  17. @Override
  18. public String getServletInfo() {
  19. return null;
  20. }
  21. @Override
  22. public void destroy() {
  23. }

}

  1. web.xml
  2. <?xml version="1.0" encoding="UTF-8"?>
  1. <!--
  2. 配置MyServlet
  3. -->
  1. 3.Servlet的生命周期 (面试题)
  2. 生命周期: Servlet从创建--运行--销毁的过程.
  3. 有对应的方法: init方法Servlet初始化 ; destroy 销毁
  4. 结论:

默认情况下第一次访问该Servlet的时候创建并执行init方法 (只执行一次);
每一次访问该Servlet,他的service方法都会执行;
服务器关闭的时候,servlet销毁,destroy执行,执行一次.

  1. 4.Servlet的路径问题(url-pattern)
  2. 1.完全路径匹配,也称精确匹配 :以 / 开始
  3. <url-pattern>/demo</url-pattern>

访问路径: http://localhost:8080/day11/demo

  1. 2.目录匹配 :以 / 开始 需要以 * 结束.
  2. <url-pattern>/aaa/bbb/ccc/*</url-pattern>

访问路径: http://localhost:8080/day11/aaa/bbb/ccc/xxx

  1. 3.扩展名匹配 :以 * 开始的,例如: *.do , *.action
  2. <url-pattern>*.do</url-pattern>

访问路径: http://localhost:8080/day11/adsfadsf.do
5.Servlet的继承体系

5.相关对象
ServletContext
1.概念
Servlet的上下文对象. ServletContext对象对Servlet之前和之后的内容都知道。这个对象一个web项目只有一个。在服务器启动的时候为每个web项目创建一个单独的ServletContext对象
2.作用
1)用来获取web项目信息。 比如初始化参数, 项目的虚拟路径
2) 读取web项目下的文件. 读取项目中的文件, 获取项目中的文件路径。
3)作为容器对象存储web项目中产生数据。

  1. 3.ServletContext常用方法
  2. getContextPath() String 获取web项目请求虚拟路径

getInitParameter(String name) String 获取web项目的初始化参数
getInitParameterNames() Enumeration 获取web项目的初始化参数
getResourceAsStream(String path) InputStream 读取指定文件到流中
getRealPath(String path) String 返回一个指定虚拟路径文件 的真实路径(完整路径)的字符串
setAttribute(String name, Object obj) void 存入数据的方法
getAttribute(String name) Object 获取数据的方法
removeAttribute(String name) void 移除数据的方法

  1. ServletResponse
  2. 1.概念
  3. 从浏览器输入一个地址访问服务器(将这个过程称为是请求)。

服务器接收到请求,需要进行处理,处理以后需要将处理结果返回给调用方, 将这个过程称为是响应Response
Response对象由谁创建?什么时候创建?
由tomcat创建; 响应信息的时候创建
2.Response的主要作用
1)操作响应行 status
2)操作响应头 location Referer Refresh
3)操作响应体(流)
4)设置响应编码
response.setCharacterEncoding(“UTF-8”)
reponse.setContentType(“text/html;charset=utf-8”)
5)重定向
1)方式:
Response.setStatus(302);
Response.setHeader(“location”,this.getServletContext().getContextPath+”/Servlet02”);
2)方式2:
Response.sendRedirect(this.getServletContext().getContextPath+”/Servlet02”)

  1. 3.常用方法
  2. 4.常用方法:

方法 返回值 描述
setStatus(int sc) void 设置响应的状态码
setHeader(String name, String value) void 设置响应头
getOutputStream() ServletOutputStream 返回一个字节流,用于向浏览器发送数据
getWriter() PrintWriter 放回一个字符流,用于向浏览器发送数据
setContentType(String type) void 设置浏览器打分页面时采用的字符集
setCharacterEncoding(String charset) void 设置响应字符流的缓冲区字符集
sendRedirect(String location) void 重定向方法

  1. ServletRequest
  2. 1.概念
  3. 浏览器向服务器提交一些数据,将这些内容进行封装就封装成了一个请求对象(Request对象)。

Request对象是由谁创建?什么时候创建?
Tomcat创建,创建完把他放到Servlet的service方法的形式参数上.
生命周期: 发送请求时创建, 响应时销毁.

  1. 2.作用
  2. 1) 获得客户端信息
  1. 获得请求头的信息
  2. 获得请求参数的方法
    3.常用方法
    getMethod() String 获取请求的方法
    getQueryString() String 获取请求路径后的提交参数的字符串
    getRequestURI() String 获取请求路径的URI
    getRequestURL() StringBuffer 获取请求路径的URL
    getRemoteAddr() String 获取客户端的IP地址
    getHeader(String name) String 获得一个key对应一个value的请求头
    getHeaders(String name) Enumeration 获得一个key对应多个value的请求头
    getParameter(String name) String 获得提交的参数(一个name对应一个value)
    getParameterValues(String name) String[] 获得提交的参数(一个name对应多个value)
    getParameterMap() Map 获得提交的参数,将提交的参数名称和对应值存入到一个Map集合中
    ServletConfig
    1.概念
    ServletConfig用来获得Servlet的相关的配置的对象。
    在Servlet 的配置文件中,可以用一个或多个标签为servlet配置一些初始化参数。
    2.作用
    当servlet配置了初始化参数之后,web容器在创建servlet实例对象时,会自动将这些初始化参数封装到ServletConfig对象中,
    并在调用servlet的init方法时,将ServletConfig对象传递给Servlet。进而,程序员通过Servlet对象得到当前servlet的初始化参数信息。
    3.常用方法
    String getServletName() — 获取当前Servlet在web.xml中配置的名字
    String getInitParameter(String name) — 获取当前Servlet指定名称的初始化参数的值
    Enumeration getInitParameterNames() — 获取当前Servlet所有初始化参数的名字组成的枚举
    ServletContext getServletContext() — 获取代表当前web应用的ServletContext对象

6.乱码处理
Request对象接收参数中文乱码
Get请求乱码
Get请求,tomcat7的时候有乱码(conf/server.xml 修改编码), tomcat8之后,get方式请求没有乱码
Post请求乱码
Post请求有乱码, 如果有中文,有乱码. req.setCharacterEncoding(“UTF-8”);
response对象响应数据中文乱码
req.setCharacterEncoding(“UTF-8”);
resp.setContentType(“text/html;charset=utf-8”)

7.Cookie和Session
1.会话概念
用户开一个浏览器,访问某一个web站点,在这个站点点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话
作用
为了保存会话过程中产生的数据,在Servlet技术中
技术
提供了两个用于保存会话数据的对象,分别是Cookie和Session
2.cookie
概念
Cookie是浏览器端的缓存技术。 一般有服务器创建cookie,把cookie发送给我们浏览器.由浏览器保存起来.
执行流程
Cookie由服务器端创建,又Servlet发送给浏览器,cookie保存在浏览器上,过一段时间客户端向服务器发送请求的时候,浏览器会携带这个cookie一并发送到服务器上

  1. 常用方法
  2. Cookie 方法

Cookie(String name, String value) Cookie 构造方法,创建cookie对象
getName() String 获取cookie的名称
getValue() String 获取cookie的值
setPath(String uri) void 设置cookie的路径——浏览器根据这个路径判断哪些cookie要发送给服务器
setMaxAge(int expiry) void 设置cookie的最大生存时间(单位:秒)

HttpServletResponse:
addCookie(Cookie cookie) void 将cookie发送给浏览器

HttpServletRequest:
getCookies() Cookie[] 获取浏览器发送的cookie
常见面试题
1.Cookie如何创建?
Cookie cookie = new Cookie(String name , String value)
2.cookie如何从服务器发送到浏览器
Response.addCookie(cookie);
3.浏览器在哪里保存cookie信息
浏览器的隐私—-cookie
4.浏览器上的cookie保存多久
默认存在一次会话中,如果浏览器关闭,则cookie就销毁了
5.有什么办法能让他延长
cookie.setMaxAge(60_60_24*7);
注意:如果cookie.setMaxAge(0) 会把我们这个cookie删除掉
6.服务器如果获取发送过来的cookie
Cookie[] cookies = request.getCookies() 得到的是一个数组
3.session
1.概念
服务器端的缓存技术。用于保存web会话过程中产生的数据。
2.特点
存储位置在服务器端
存储位置安全
储存数据量较多
依赖于cookie
3.执行流程

  1. 4.cookiesession的区别
  2. 5.session的使用
  3. 1.如何创建session对象,什么时候创建
  4. request.getHttpsession();
  5. 2.如何存放数据,如何取数据,如何删除数据
  6. session.setAttribute("name","value");

session.getAttribute(“name”);
session.removeAttribute(“name”)
3.session的有效范围是什么
request域中存数据,有效范围是一次请求。重定向后request域中的数据就获取不到了。
如果我们把数据存放在session域中中,那么重定向后是能获取数据
4.面试题
浏览器关闭,再访问还行吗?
Cookie记录JSESSIONID cookie,没有设置最大存活时间, 浏览器一关闭,cookie消失了. Cookie存的是session的地址(钥匙);
现象:找不到原来的session, 会新建一个session. (新的JSESSIONID)
长久保存session
如果浏览器关闭,cookie消失,不能与服务器间的session建立联系. 我们要让cookie保存在浏览器的时间长一些.
设置cookie.setMaxAge(60_60_24*7)
session如何销毁
1)session是有tomcat创建,用户访问的时候,request.getSession(); 的时候创建的对象.

2)invalidate() 该方法是销毁session的方法。如果调用该方法,session就会销毁。

8.JSP
1.概念
JSP全名是Java Server Pages,它是建立在Servlet规范之上的动态网页开发技术。在JSP文件中,HTML代码与Java代码共同存在,其中,HTML代码用来实现网页中静态内容的显示,Java代码用来实现网页中动态内容的显示。为了与传统HTML有所区别,JSP文件的扩展名为.jsp。
2.代码演示
<%@ page import=”java.util.Date” %>
<%@ page import=”java.text.SimpleDateFormat” %><%—
<%@ page contentType=”text/html;charset=UTF-8” language=”java” %>
代表的是jsp的指令.
page指令 : 可以设置页面的属性,比如:字符集 语言 编码等
taglib指令: 引入一些其他的标签(在讲JSTL的时候会说)
—%>

<%@ page contentType=”text/html;charset=UTF-8” language=”java” %>

这是我的第一个JSP页面

  1. <!--java代码-->
  2. <%
  3. Date date = new Date();
  4. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  5. String dateStr = sdf.format(date);
  6. %>
  7. <!--
  8. 将java代码展示在浏览器上
  9. -->
  10. <%=dateStr%>
  1. 3.执行原理
  2. 4.jsp脚本
  3. 脚本方式1:

格式:
<%
里面可以编写java代码
%>
使用该方式编写一个for循环,在页面输出

  1. 脚本方式2

格式: <%! 内容 %>
<%! int j = 10; %>
脚本方式3
<%=j%>
总结:
第一种脚本方式 <%%> 写在它中间的代码,会出现在_jspService方法中;
第二种脚本方式<%! %> 写在它之间得脚本会出现在demo03_jsp.java类的成员位置.
第三种脚本方式<%=表达式%> 翻译成java代码就是一个输出语句out.print(内容)

  1. 5.jsp 9大内置对象
  2. 6.jsp动态标签
  3. include动态标签
  4. include标签是动态包含,与include指令不同,include标签与RequestDispatcher.include()方法的功能是相同的。
  5. <body>
  6. <h1>hel.jsp</h1>
  7. <jsp:include page="lo.jsp" />