tomcat上的javaweb项目如何将ip地址更换为域名_Java Web 路线规划
基础篇
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 路线规划相关推荐
- 【已解决】IDEA 配置tomcat后,javaweb项目报404
配置完tomact后, 运行hello word报404. 问题只可能出在tomcat上. 将最下方的应用地址配置改为:/ 即可.
- 修改用友服务器ip地址,用友服务器ip地址更换
用友服务器ip地址更换 内容精选 换一换 若用户想要更换Ubuntu服务器的IP地址,则Mind Studio安装使用的IP地址也要随之更换,方法如下:如果env.conf文件中的IP配置为Ubunt ...
- 怎么将ip地址改成域名访问_什么是域名解析?怎么把域名解析成IP地址?
我们在域名注册机构买下一个域名后,怎么才能看到自己的网站内容,这时候域名解析就需要用到了.那么,什么是域名解析?怎么把域名解析成IP地址?下面小编来给大家详细的解答下. 我们在域名注册机构买下一个域名 ...
- idea svn IP地址更换方法
背景: 若IP地址更换后,IDEA中的svn没更换,IntelliJ IDEA 就会一直refreshing VCS history 原因:项目对应的svn ip地址变更了 或 svn url 连接失 ...
- 有哪些办法可以将ip地址更换?
日前,网络上热热闹闹的在讨论关于网络推广,互联网宣传,品牌推广这些话题.大家纷纷思考在互联网推广中到底需要用到什么软件,这呀那呀的一大堆.但是我看见大家遇见的最做的一个问题,就是在互联网宣传推广的时候 ...
- java 反查域名_爬虫实现:根据IP地址反查域名
域名解析与IP地址 域名解析是把域名指向网站空间IP,让人们通过注册的域名可以方便地访问到网站的一种服务:IP地址是网络上标识站点的数字地址,为了方便记忆,采用域名来代替IP地址标识站点地址.域名解析 ...
- ip地址对应的域名有几个?
什么是对应域名?对应域名是干嘛的?域名和ip地址有什么关系?ip地址对应的域名有几个?下面是关于对应域名的知识介绍. 1.什么是对应域名? 域名简称域名.网域,是由一串用点分隔的字符组成的互联网上某一 ...
- 怎么看虚拟网服务器ip地址,如何根据ip地址反查域名
如何根据ip地址反查域名 内容精选 换一换 为保护用户直播源站的资源不被非法源站下载盗用,视频直播服务提供了Referer防盗链.Key防盗链.IP黑白名单鉴权机制和禁推功能.开启鉴权机制后,CDN会 ...
- 微信公众号提示:该地址为ip地址,请使用域名访问网站。继续访问将转换成手机预览模式
最近搞微信公众号开发,把url配置到公众号后台后,结果每一次网页跳转,微信都会弹出拦截页面,提示:该地址为ip地址,请使用域名访问网站.继续访问将转换成手机预览模式.如下图所示: 产生这种现象的原因: ...
最新文章
- 设置datagridview的数据源为(DATASET)SQL查寻结果
- C#中HashTable的用法
- python中if语句中可用break_【第四篇】Python的if语句/for..in循环/while循环/break和continue...
- Windows下配置Java开发环境
- Java基础:继承、多态、抽象、接口
- php网页文字居中代码怎么写,html里文字居中代码怎么写?_WEB前端开发
- [Leedcode][JAVA][第892题][图形题]
- windows下最好的C++ IDE
- sqlserver可视化工具_数据分析之基础分析工具篇(修订版)
- Tomcat系列(5)——Tomcat配置详细部分
- Oracle用户密码使用特殊符号,例如(AND)、$(Dollar)、#(Pound)、*(Star)等
- 蓝桥杯——说好的进阶之入学考试
- 软考中级软件设计师笔记第二章计算机操作系统
- python识别图片文字、并返回文字坐标_简易OCR图片文字识别工具的进一步改进(增加显示图片的功能)...
- 宋健人口模型 matlab,一阶常微分方程模型-人口模型与预测
- Oracle开发专题之:OLAP 函数 (rows 2 preceding / unbounded preceding)
- 【Unity】UI面板:倒计时器
- 损失函数 Loss、梯度 grad、参数 ω 和 学习率 lr 之间的关系
- PTA每日一题-Python-人民币与美元汇率兑换程序
- 教你一步一步用VPS
热门文章
- 基于tensorflow+RNN的MNIST数据集手写数字分类
- 虚拟机管理解决方案逐个看:微软篇
- 唯有创新不可辜负!混合集成成就云时代创新
- javascript 常用的数组操作
- Cookie介绍与操作
- 服务质量--成功的关键因素!
- android上传文件用哪个布局,每周总结20130821——android控件的尺寸、http文件上传...
- 怎么调整矩形边框宽度_PKPM:梁刚度放大通过放大系数与矩形梁转T形梁的区别...
- python高手养成_不要总抱怨它慢了 突破性能瓶颈 找到Python序列筛选数据的最优解...
- ios html5 自动全屏播放,禁止iPhone Safari video标签视频自动全屏的办法