基础篇

Tomcat

本质是一个 Sokect 程序:

  • 对外:接收请求

    所以呢,Tomcat 应该具备识别 URL 的能力,结合 Tomcat 的目录结构来看

     --- Tomcat-- bin:启动/关闭服务器-- conf:服务器配置文件-- lib:tomcat 依赖的包-- logs:tomcat 输出的日志文件-- temps:临时产生的文件存放在这里-- webapps: web应用程序放的地方

    • 主机 Host [域名]:

      对用户来讲是域名,对计算机来讲,是一个ip地址,域名最终是要转换成ip地址的 [如果在本机的host文件里面配置了域名的话,就不会去DNS拿域名了];

    • 端口

      端口是计算机网络的专有名词,是应用程序 [ 这里是Browers]与 应用程序 [服务器上的处理Socke的程序,这里是tomcat]之间通过网络通信的 ”码头“

    • web 站点

      Tomcat 下的 web 应用程序,对应的,web站点 就是 Tomcat 的 webapps 下的文件夹 [一个文件夹对应一个项目]

  • 对内:调配 servlet,响应请求

    • 是一个运行Java的 Web 服务器

    • 是 Servlet[JSP] 的容器

 突破口:看到这个图,就想到Tomcat的服务器是可以处理HTTP请求的; * HTTP请求有哪些呢? * 有了Web服务器,还要Servlet容器干嘛?

Tomcat 目录结构

  • bin:启动和关闭 tomcat

  • conf:tomcat的配置文件所在

    • server.xml 该文件用于配置服务器相关的设置,比如:端口号,主机配置,配置虚拟目录、虚拟主机[域名]

      配置端口号

       

      配置虚拟目录

       在 serve.xml下,Host站点下<Context path="/webVR" docBase="E:\Project\JavaEE\target\JavaEE"/> 

      配置虚拟主机[虚拟域名]

       在 Engine 站点下          <Host name="lxp2" appBase="E:\Project\JavaEE\target\JavaEE">           <Context path="/webVR" docBase="E:\Project\JavaEE\target\JavaEE"/>     Host>appbase 默认为 tomvat 下的webapps 站点目录,当然可以自己修改站点目录dosbase:为 web项目的路径
    • web.xml 配置web的相关设置

    • tomcat-user.xml

  • lib:防止tomcat依赖的包

  • logs:存放日志

  • webapps:放置 web 应用的地方

    tips:

    当然,也可以设置虚拟目录,就不要把项目站点放到这个目录下面了;

    • WEB - INF 目录:

      需要一个 web.xml 文件,用于配置当前 web 应用,比如 servlet 映射;放置一些 应用可能需要的参数[可以由ServletConfig读取到]

    • webapps下可以放 html 文件

  • work 工作目录:该目录用于JSP被访问后生成的  class 文件[JSP被转成Servlet]

IDEA下Maven项目以及配置tomcat

配置虚拟主机

HTTP

HTTP请求

请求行:

通过请求行,告诉服务器,浏览器是用何种方式 请求何种资源;

GET /java.html HTTP/1.1,请求方式有:

GET POST HEAD OPTIONS DELETE TRACE  PUT

GET 方式:参数放在 URL 链接里面

POST方式:可以把数据放在实体内容中,无容量xian's

消息头:
  • Accept 类

    向服务器申明,自己接受何种资源,接受资源的编码格式有哪些,支持的压缩格式有哪些,接受的语言有哪些

    Accept:text/html,img/*

    Accept-Charset:ISO-8859-1

    Accept-Encoding:gzip

    Accep - Language:en-us,zh-cn

  • 自我介绍

    介绍自己是谁,有什么,从哪来,将要往那去

    • Cookie: 把浏览器拥有的当前用户的Cookie发给浏览器

    • User -Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0) 来自Mozilla 浏览器

    • Host:www.it315.org [告诉服务器,浏览器要访问那台主机]

HTTP 响应

状态行

Format:HTTP版本号 状态码  原因叙述

3**:请求重定向

404:找不到资源

5xx:服务器(后台程序)错误

  • 502 :网关错误

消息头
  • Content,

    响应浏览器的请求,并告诉浏览器,返回来的数据用的编码、数据的类型、数据的长度

    Content-Encoding:gzip

    Conten-Type:text/html

    Content-Length:80

  • 自我介绍

    • Serve:来自哪个服务,及服务器的新高

  • 其它

    Refresh:刷新

    Location:让网页重新定位

Servlet

用户请求的服务都是有 Servlet 来代完成;

四大域对象

What: 用于Servlet之间共享、协作的对象

域对象 通过 setAttribute、getAttribute 共享变量,从而达到协作的效果;

ServletContext:

可以作用于多个用户

作用于 整个应用,放在ServletContext里面的变量一直在累加,除非重启服务器,否则不会归零

生命周期:从应用启动到应用结束

用处:可读取资源文件、共享数据、获取初始化参数、请求转发

Session:

作用于单个用户

生命周期:从用户打开浏览器开始,直到用户关闭浏览器这中间的过程。这个过程可能包含多个请求响应。也就是说,只要用户不关闭浏览器,服务器就有办法知道这些请求是一个人发起的,整个过程被称为一个会话,而放到会话中的变量,就可以在当前会话的所有请求里使用

Cookie And Session

Cookie的出现是为了解决HTTP协议无状态而提出的,无状态指的是,用户第一次访问服务做了一些事,下一次访问服务器的时候,服务器会把该用户当成新用户来看待,这样的坏处就是,当用户需要获得上次活动时的相关纪录时,是得不到的,影响体验;

解决方案:每次用户访问服务器,称之为一次对话[session],服务器就会记录下来,放到session数据库中,以便下回登录是使用,并且呢仿照hash的思想,给这次session设定一个key[sessionId],也就是Cookie,返回给用户,由用户保管[浏览器保管]!

以后再访问该服务器时,便会携带着Cookie一起去;

Cookie与Session的区别

  • Cookie的容量受限,都是用Session保存常用信息[购物车]

Request:

作用于前后两个网页

生命周期:request里的变量可以跨越forward前后两页,有效范围是当前请求周期。就是从Http请求发起,到服务器处理结束,返回响应的整个过程。在这个过程中可能使用forward的方式跳转了多个JSP页面,在这些页面里,你都可以使用这个变量

HttpServletRequest

封装了 Requset 的消息头[没有封装请求行]

用处:设置编码格式 [tomcat默认是OSI,将获取到的数据的编码格式设置成浏览使用的编码格式,才能正确得到request的内容]、实现转发

  • HttpServletRequest实现转发

    • 跳转后,地址栏不会发生改动

    • 不会经过 302 - 202的转变

    • 转发指只会产生一次http请求 【可以用request】

HttpResponse

封装了 Response 的消息头 [没有封装状态行]

用处:设置刷新、设置缓存、提供文件下载功能、生成随机图片、重定向跳转、设置编码格式 [通过设置消息头实现]

  • HttpServletRespose 重定向

    重定向跳转:会先访问第一个资源 [返回302状态码,表示请求的资源转移],在返回资源[200状态码]

    • 跳转后,地址栏改动

    • 重定向会产生两次http请求 [不可以用request]

    • 重定向发生在浏览器端

pageContext:

生命周期:它的有效范围只在当前JSP页面里。一旦页面跳转就失效

JSP

Why has: 在没有JSP之前,是用Servlet的write来输出html页面,及其不方便;引入JSP可以避免这样繁琐的操作;缺点就是,前后端不分离,不便于维护

What: JSP 本质还是一个方便输出HTML的Servlet;

  • JSP基本组成

    • 模板数据:HTML代码

    • 元素:JSP页面的 Java 代码[JSP脚本]、JSP指令、JSP标签

JSP基本语法

  • JSP脚本

     
  • JSP 指令

     

    JSP 指令,相当于 在 Servlet 中,做一些配置,比如 setHead、setContentType、setCharacterEncoding;这些操作在JSP中,就是以JSP指令实现

    • 静态包含

       

      把整个文件包含进来,再编译。如果两个被 包含的 jsp页面有相同的变量,会发生错误

    • 动态包含

    • page指令:用来说明当前页面的相关属性,比如编码方式、文档类型等

       language="java" extends="package.class"import="{package.class | package.*}, ..."session="true | false"buffer="none | 8kb | sizekb"autoFlush="true | false"isThreadSafe="true | false"info="text" errorPage="relative_url"isErrorPage="true | false"contentType="mimeType ;charset=characterSet " | "text/html ;charset=ISO-8859-1" pageEncoding="characterSet | ISO-8859-1"isELIgnored="true | false"
    • include 指令

    • taglib 指令

      自定义标签指令 ,引入JSTL用的

  • JSP 行为

    是一组 JSP 内置的标签;(区别于JSTL)

    • 动态包含

      相当于:request.getRequestDispatcher(String url).include(request,response)

       

      先把foot.jsp编译一下,在把结果包含进来

    • include 行为

    • forward行为

      相当于:request.getRequestDispatcher(String url).forward(request,response) [服务器内重定向]

      如果要传递参数:

             
  • JavaBean 行为

    操作 JavaBean

九大内置对象

 final javax.servlet.jsp.PageContext pageContext;  //PageContext 域对象:页面上下文javax.servlet.http.HttpSession session = null;// Session 域对象:会话final javax.servlet.ServletContext application;//Application 域对象:ServletContextfinal javax.servlet.ServletConfig config;       //config 获取配置信息final java.lang.Object page = this;             //page 当前页javax.servlet.jsp.JspWriter out = null;        //Out 输出          HttpResponseServle、HttpRequestServlet// Request 域对象                                      //  Exception

因为 JSP 本质就是一个Servlet[在此基础上扩充了一些功能],所以Servle的三大域对象还是有的 [四大域对象是要加上后来JSP的PageContext]

  • Application

    也就是 ServletContext,生命周期存在于服务器的打开以及关闭,可以被所有的用户访问

  • Session

    HttpSession

  • Requset、Response

    HttpServletRequest、HttpServletResponse

  • PageContext

    四大域对象之一,它代表着JSP编译后的内容,可以获取其它 8 个内置对象

    作用域只限于但钱页面

  • Out

    是 JSPWrite对象,不是

    当满足一下条件:

    out对象才会去调用response.getWriter方法,将Out对象缓冲区的内容写到response的缓冲区内

    • 使用page指令,关闭了buffer缓冲区

    • out对象缓冲区满

    • JSP页面结束

  • page

    指的就是 this[xxx_jsp.class],当前JSP页面编译后的 Servlet 页面

  • config:ServletConfig

  • Exception

JSP标签、JSTL、EL表达式

Why has

动态网页开发,从后台的角度来讲,动态指的是 数据动态,只需要根据用户请求,把数据塞到对应的架子[jsp]里面,再返回给用户即可;

所以呢,后台是专注于数据的变动和流向的!这里的数据可以是变量、对象[JavaBean]等;

  • 在各大域对象之间放好数据,便可以实现后台的数据走向前端,类似于这样:

 String value = (String) session.getAttribute("name"); out.write(value);%>
  • 而引入 EL 表达式,就可以让这个过程更简单

     ${name}

    所以这就是引入EL表达式的原因!

引入 EL 简化了获取数据的过程,而引入JSTL,可以解放在JSP输入控制语句的烦恼

  • 在JSP中输入控制语句

        <form method="get" action="JSTL_Servlet.jsp">        <input type="text" name="userName"                value="${param.userName}">        <input type="submit" value="登录">    form>            if("admin".equals(request.getParameter("userName"))){            out.write(request.getParameter("userName")+"登录成       功");        }    %>
  • 使用JSTL

      <c:if test="${param.userName=='admin'}" var="isAdmin">        <c:out value="欢迎登录"/>    c:if>

What

  • EL表达式:

    • 可以获取域对象的数据

    • 可以获取 JavaBean

      通过 useBean 标签:

  • JSTL标签

    • c:if

    • c:out

    • c:each


JavaBean

规定好的只有get、set方法的实体类,对接于ORM设计


MVC设计模式

过滤器 Filter

Why has:

  • 在不引入 Filter之前,几乎所有的Servlet都会做一些转码操作,比如:

request.setCharacterEncoding("utf-8");response.setContentType("text/html;charset:utf-8")

,而引入过滤器就可以将某一类Servlet都需要进行的操作放进来,而不需要每个Servlet单独去写一遍;

过滤器,也可以称为拦截器,拦截某一类请求,并进行相关操作;每次请求,都会经过过滤器!

  • 还有一种状况就是,比如:进入一个网站一般都是登录后,才能进行相关操作的!倘若没有拦截器,那么只需要输入对应页面的URL就能跳过登录环节了,这显示是不允许的!

Application: 登录验证、权限拦截、访问请求拦截

监听器 Listener

Why has:

Application:网站人数统计


Tools

Maven

  • What:导入jar包用的


Bugs

编码错乱的问题

  • request.setCharacterEncoding()

    申明将拿到的request请求参数用UTF-8解析;

    不过JDK1.7以上默认是使用UTF-8的,就不需要这项设置了 [针对于Get来说]

    [对于Post] 设置一下 request.setCharacterEncoding()

  • response.setCharacterEncoding() [不建议]

  • response.setContentType("text\html",charset);

    告诉浏览器用UTF8解析拿到的字符串

    使用setContentType(),后,会自动调用setCharacterEncoding()方法;不过最好还是用

    resp.setHeader("Content-type", "text/html;charset=UTF-8");
  • Tomcat 与 Browser进行数据交互以及编码格式

    • 先找 contentType为text/html,按charset来解析

    • 如果contentType整个都缺省,采用iso-8859-1

    • 若meta标签也缺少,则采用系统默认编码[GBK]

    • 若charset没有,找 meta 标签

    • Servlet方式:需要设置ContentType,字符集设置为数据采用的编码格式

    • HTML方式:需要设置,字符集设置为HTML文件的编码字符集

    • JSP方式:需要设置 contentType 或 pageEncoding,字符集设置为JSP文件的编码字符集

    • get方式:获取数据,默认采用 Tomcat 的字符集 iso-8859-1,但 JDK1.7以上,默认采用 UTF-8

    • Post方式:获取数据,默认采用 Tomcat 的字符集 iso-8859-1。一般需要自己设置request.setCharacter

    • Cookie 数据:按照服务器存入Cookie时的字符集去解码 [Cookie是没有中文的]

    • 直接输入URL时,数据根据Browser的字符集进行编码

    • 间接URL请求时,则依据页面[tymleaf、JSP、HTML]指定的编码来编码

      页面编码

    • Cookie

    • 页面未指定编码时,浏览器默认采用系统的字符集[GBK]来编码

    • 浏览器发出URL[直接URL、间接URL] (通过Get/Post的方式发送出去)

    • 服务器获取浏览器发送的数据时,采用何种编码解析?

      浏览器发送数据的方式* Get* Post* Cookie
    • Server 返回数据给 Browser,采用何种数据集?

      服务器响应浏览器请求后,将数据返回给浏览器的方式:* Servlet* JSP/Thymleaf* HTML

      不论以那种方式,都需要告知浏览器,应该采用那种编码方式解析;

    • Browser 接收到数据时,采用何种数据集解码?

HttpServlet 的 输出问题

  • Exception:getOutputStream() has already been called for this response

    在Servlet中不能既有 OutputStream,又有 Writer

项目路径的问题

pageContext.request.contextPath
  • 由浏览器发起的请求[重定向、超链接、form表单],代码中的“/”表示的当前路径就应该表示的是Tomacat下的webapps的根目录

  • 由浏览器发起的请求 【转发】,代码中的”/“ 表示的是当前项目的 WebROOT 目录,即Tomcat下的 webapps/xxx项目名 目录

    • src文件、resource文件,则被放在 webapps/xxx项目名目录/WEB-INF/classses 目录下

    • 依赖的 jar 包,则被放在 webapps/xxx项目名目录/WEB-INF/classses/lib 目录下

    • web.xml,放在webapps/xxx项目名目录/WEB-INF 目录下

    • 静态资源[css、JS、JSP],被直接放在了  webapps/xxx项目名 目录


面试题

  • 当你的浏览器输入URL后,到得到网页,发生了什么?


后续学习

JavaWeb:SQL语句、JDBC、计网HTTP、Servlet知识

SSM框架

Linux:Dubbo Ngnix

SpringBoot、SpringCloud

总结:

一个 Web 项目本质上来说是一个拥有图形界面的 SQL 程序;

常规的数据库操作:

select * from smbms_user where userCode="xxx"

Step 1: 学好 SQL 语句是必要的!!!

换到Java Web 中

SQL语句中的 userCode="xxx" 中的 xxx 就意味着是变动的;

Step 2: 这就需要 JDBC 来完成动态的SQL语句实现了

xxx 是从前端网页传来的,每次发起一次Http请求,就会携带参数 xxx

通过 name-value 的 html 标签传递参数;

  • 通过 AJAX 发起请求

  • 通过 超链接、form表单 发起请求

请求主要分为 GET POST HTTP请求:

Step 3: HTTP 网络知识的学习是必要的

Tomcat 作为一个 WebSocket 程序,就负责接收Http请求,以及响应Http请求;

接到请求,获取参数之后,具体怎么处理,交由我们编写的后台程序去处理;处理完之后,由 Tomcat 代发送 Http响应;

Step 4: Java Web后台 技术

* 发起请求--- AJAX方式、form表单、超链接、直接URL请求、重定向* 处理请求--- request的到参数--- Service 根据参数提供服务* 返回结果--- Reqponse 发出HTTP响应

在网站项目中,有些数据是所有网页共享的,比如用户的登录状态、用户的信息;有些数据,只共享于两个网页...于是就引出了 作用域 这个概念:

  • Application [ServletContext]:

  • Session:Sesssion中的数据的生命周期是,用户打开浏览器到关闭浏览器

  • Request:生命周期是前后两个网页

  • PageContext:作用域仅限于当前网页


SSM框架 【8~9天】

认真写博客;是什么、为什么、怎么用?

  • MyBatis:免去手动JDBC增删改查,解放持久层

    • 使用 MyBatis CRUD

    • 了解 MyBatis 配置文件

    • ORM 结果集映射[重难点]

    • 分页

    • 使用注解开发[重点]

    • 一对多、多对一的处理[难点]

    • 动态SQL[重点]

    • 缓存[十分重点]

    • 使用注解开发[重点]

    • Mybatis Plus

  • Spring:解放 new 对象,容器思想

    • IOC思想,控制反转[重点]

    • 依赖注入 ID

    • Spring 的配置文件[重点]

    • 代理模式[重点]

    • AOP[重点]

    • 事务ACID

    • 整合MyBatis

    • 使用注解开发

  • Spring MVC:解放 Servlet

    • 如何配置

    • 结果跳转方式[转发重定向]

    • 如何处理前端数据

    • 使用注解开发

    • RestFul风格

    • 文件上传、下载

    • AJAX 和 JSON

    • 拦截器[权限拦截]

    • 整合 SSM 框架

------------------------------------------------------------------------------- 微服务 ------------------------------------------------------------------------------------------------------------------------

Linux

  • Linux 基础

  • Redis

  • Nginx

  • Docker

Spring Boot

  • SpringBoot 基础

  • SpringBoot 配置及原理

  • Spring Boot  持久层操作

  • Spring Boot  Web开发

  • Spring Boot 缓存

  • Spring Boot 消息

  • Spring Boot 检索

  • Spring Boot 任务

  • Spring Boot 安全

  • Dubbo + Zookeeper:分布式解决方案一

  • Vue+layui

--------------------------分布式 ------------------------------

Spring Cloud

  • 微服务及架构

  • Spring

--------------------------------- 微服务 ---------------------

Hadoop

tomcat上的javaweb项目如何将ip地址更换为域名_Java Web 路线规划相关推荐

  1. 【已解决】IDEA 配置tomcat后,javaweb项目报404

    配置完tomact后, 运行hello word报404. 问题只可能出在tomcat上. 将最下方的应用地址配置改为:/ 即可.

  2. 修改用友服务器ip地址,用友服务器ip地址更换

    用友服务器ip地址更换 内容精选 换一换 若用户想要更换Ubuntu服务器的IP地址,则Mind Studio安装使用的IP地址也要随之更换,方法如下:如果env.conf文件中的IP配置为Ubunt ...

  3. 怎么将ip地址改成域名访问_什么是域名解析?怎么把域名解析成IP地址?

    我们在域名注册机构买下一个域名后,怎么才能看到自己的网站内容,这时候域名解析就需要用到了.那么,什么是域名解析?怎么把域名解析成IP地址?下面小编来给大家详细的解答下. 我们在域名注册机构买下一个域名 ...

  4. idea svn IP地址更换方法

    背景: 若IP地址更换后,IDEA中的svn没更换,IntelliJ IDEA 就会一直refreshing VCS history 原因:项目对应的svn ip地址变更了 或 svn url 连接失 ...

  5. 有哪些办法可以将ip地址更换?

    日前,网络上热热闹闹的在讨论关于网络推广,互联网宣传,品牌推广这些话题.大家纷纷思考在互联网推广中到底需要用到什么软件,这呀那呀的一大堆.但是我看见大家遇见的最做的一个问题,就是在互联网宣传推广的时候 ...

  6. java 反查域名_爬虫实现:根据IP地址反查域名

    域名解析与IP地址 域名解析是把域名指向网站空间IP,让人们通过注册的域名可以方便地访问到网站的一种服务:IP地址是网络上标识站点的数字地址,为了方便记忆,采用域名来代替IP地址标识站点地址.域名解析 ...

  7. ip地址对应的域名有几个?

    什么是对应域名?对应域名是干嘛的?域名和ip地址有什么关系?ip地址对应的域名有几个?下面是关于对应域名的知识介绍. 1.什么是对应域名? 域名简称域名.网域,是由一串用点分隔的字符组成的互联网上某一 ...

  8. 怎么看虚拟网服务器ip地址,如何根据ip地址反查域名

    如何根据ip地址反查域名 内容精选 换一换 为保护用户直播源站的资源不被非法源站下载盗用,视频直播服务提供了Referer防盗链.Key防盗链.IP黑白名单鉴权机制和禁推功能.开启鉴权机制后,CDN会 ...

  9. 微信公众号提示:该地址为ip地址,请使用域名访问网站。继续访问将转换成手机预览模式

    最近搞微信公众号开发,把url配置到公众号后台后,结果每一次网页跳转,微信都会弹出拦截页面,提示:该地址为ip地址,请使用域名访问网站.继续访问将转换成手机预览模式.如下图所示: 产生这种现象的原因: ...

最新文章

  1. 设置datagridview的数据源为(DATASET)SQL查寻结果
  2. C#中HashTable的用法
  3. python中if语句中可用break_【第四篇】Python的if语句/for..in循环/while循环/break和continue...
  4. Windows下配置Java开发环境
  5. Java基础:继承、多态、抽象、接口
  6. php网页文字居中代码怎么写,html里文字居中代码怎么写?_WEB前端开发
  7. [Leedcode][JAVA][第892题][图形题]
  8. windows下最好的C++ IDE
  9. sqlserver可视化工具_数据分析之基础分析工具篇(修订版)
  10. Tomcat系列(5)——Tomcat配置详细部分
  11. Oracle用户密码使用特殊符号,例如(AND)、$(Dollar)、#(Pound)、*(Star)等
  12. 蓝桥杯——说好的进阶之入学考试
  13. 软考中级软件设计师笔记第二章计算机操作系统
  14. python识别图片文字、并返回文字坐标_简易OCR图片文字识别工具的进一步改进(增加显示图片的功能)...
  15. 宋健人口模型 matlab,一阶常微分方程模型-人口模型与预测
  16. Oracle开发专题之:OLAP 函数 (rows 2 preceding / unbounded preceding)
  17. 【Unity】UI面板:倒计时器
  18. 损失函数 Loss、梯度 grad、参数 ω 和 学习率 lr 之间的关系
  19. PTA每日一题-Python-人民币与美元汇率兑换程序
  20. 教你一步一步用VPS

热门文章

  1. 基于tensorflow+RNN的MNIST数据集手写数字分类
  2. 虚拟机管理解决方案逐个看:微软篇
  3. 唯有创新不可辜负!混合集成成就云时代创新
  4. javascript 常用的数组操作
  5. Cookie介绍与操作
  6. 服务质量--成功的关键因素!
  7. android上传文件用哪个布局,每周总结20130821——android控件的尺寸、http文件上传...
  8. 怎么调整矩形边框宽度_PKPM:梁刚度放大通过放大系数与矩形梁转T形梁的区别...
  9. python高手养成_不要总抱怨它慢了 突破性能瓶颈 找到Python序列筛选数据的最优解...
  10. ios html5 自动全屏播放,禁止iPhone Safari video标签视频自动全屏的办法