09夯实基础之JavaEE基础

文章目录

JavaEE基础

一、Tomcat

1.1 Tomcat简介

Tomcat 服务器是⽬前最为流⾏的Tomcat服务器是Apache-Jarkarta开源项⽬中的⼀个⼦项⽬,是⼀个⼩型、轻量级的⽀持JSP和Servlet 技术的Web服务器,也是初学者学习开发JSP应⽤的⾸选。Tomcat是开源的⼩型web服务器 ,完全免费,主要⽤于中⼩型web项⽬,只⽀持Servlet和JSP 等少量javaee规范 (JavaWeb编程接⼝)。

1.2 Tomcat下载

Tomcat下载地址

选择相应的版本,这里选择Tomcat 9。

09夯实基础之JavaEE基础

1.3 Tomcat安装及环境变量配置

下载完成后解压到一个无特殊符号路径(一般纯英文路径即可)

09夯实基础之JavaEE基础

进入bin目录下,双击startup.bat启动。

09夯实基础之JavaEE基础

提前配置JAVA_HOME环境变量。(可参见相关教程中的JAVA_HOME配置

新建系统环境变量:CATALINA_HOME

09夯实基础之JavaEE基础

相同的方法,再新建系统环境变量:CATALINA_BASE

09夯实基础之JavaEE基础

打开Path,添加:

%CATALINA_HOME%\lib

%CATALINA_HOME%\bin

09夯实基础之JavaEE基础

验证是否配置成功:

打开cmd,输入startup,出现如下结果(注:此处顺便验证java环境是否正确),与之前直接双击startup.bat效果一致:

09夯实基础之JavaEE基础

测试Tomcat:打开浏览器,地址栏输入:http://localhost:8080/,效果如下:

09夯实基础之JavaEE基础

注意到上面Tomcat命令行启动出现了中文乱码了吗?解决方案如下:

打开conf文件夹下的logging.properties文件

09夯实基础之JavaEE基础

将如下行中 UTF-8更改为GBK

09夯实基础之JavaEE基础

然后再启动,就没有乱码啦!

09夯实基础之JavaEE基础

1.4 Tomcat 的⽬录说明

1.4.1 bin

该⽬录下存放的是⼆进制可执⾏⽂件,用来存储一些指令信息

如果是安装版,那么这个⽬录下会有两个exe⽂件: tomcat9.exe、tomcat9w.exe,前者是在控制台下启动Tomcat,后者是弹出UGI窗⼝启动Tomcat;如果是解压版,那么会有startup.bat和shutdown.bat⽂件,startup.bat⽤来启动Tomcat,但需要JDK的 配置,shutdown.bat⽤来停⽌Tomcat 。

1.4.2 conf

这是⼀个⾮常⾮常重要的⽬录,用来存储配置文件信息

这个⽬录下有四个最为重要的⽂件:

server.xml:配置整个服务器信息。例如修改端⼝号,添加虚拟主机等;

tomcat-users.xml:存储tomcat⽤户的⽂件,这⾥保存的是tomcat的⽤户名及密码,以及⽤户的⻆⾊信息。可以按着该⽂件中的注释信息添加tomcat⽤户,然后就可以在Tomcat主⻚中进⼊Tomcat Manager ⻚⾯了;

web.xml:部署描述符⽂件,这个⽂件中注册了很多MIME类型,即⽂档类型。这些MIME类型是客户端与服务器之间说明⽂档类型的,如⽤户请求⼀个html⽹⻚,那么服务器还会告诉客户端浏览器响应的⽂档是text/html类型的,这就是⼀个MIME类型。客户端浏览器通过这个MIME类型就知道如何处理它了。 当然是在浏览器中显示这个html⽂件了。但如果服务器响应的是⼀个exe⽂件,那么浏览器就不可能显示它,⽽是应该弹出下载窗⼝才对。MIME就是⽤来说明⽂档的内容是什么类型的

context.xml:对所有应⽤的统⼀配置,通常我们不会去配置它。

1.4.3 lib

Tomcat的类库,用来存放jar⽂件。如果需要添加Tomcat依赖的jar⽂件,可以把它放到这 个⽬录中,当然也可以把应⽤依赖的jar⽂件放到这个⽬录中,这个⽬录中的jar所有项⽬都可以共享, 但这样你的应⽤放到其他Tomcat下时就不能再共享这个⽬录下的jar包了,所以建议只把Tomcat需要的jar包放到这个⽬录下。

1.4.4 logs

这个⽬录中都是⽇志⽂件,记录了Tomcat启动和关闭的信息。如果启动Tomcat时有错误,那 么异常也会记录在⽇志⽂件中。

1.4.5 temp

存放Tomcat的临时⽂件,这个⽬录下的东⻄可以在停⽌Tomcat后删除!

1.4.6 webapps

存放web项⽬的⽬录,其中每个⽂件夹都是⼀个项⽬。如果这个⽬录下已经存在了⽬录,那么都是tomcat⾃带的项⽬。其中ROOT是⼀个特殊的项⽬,在地址栏中没有给出项⽬⽬录时,对应的就是ROOT项⽬。

http://localhost:8080/examples,进⼊示例项⽬。其中examples就是项⽬名,即⽂件夹的名字。

1.4.7 work

运⾏时⽣成的⽂件,最终运⾏的⽂件都在这⾥,存放编译之后的文件。通过webapps中的项⽬⽣成的!可以把这个⽬录下的内容删除,再次运⾏时会⽣再次⽣成work⽬录。当客户端⽤户访问⼀个JSP⽂件时,Tomcat会通过JSP⽣成Java⽂件,然后再编译Java⽂件⽣成class⽂件,⽣成的java和class⽂件都会存放到这个⽬录下。

1.4.8 license

许可证。

1.4.9 notice

说明⽂件。

通过url访问服务器: url:http://服务器的ip地址:端⼝号/项⽬名/被访问的⻚⾯

示例:http://localhost:8080/test01

注:

(1)启动tomcat后,tomcat会加载部署在服务器端的所有项⽬

(2) 浏览器访问的⻚⾯是服务器端的⻚⾯,基本上服务器的项⽬和⼯作空间的项⽬要保持⼀致

1.5 IntelliJ IDEA配置Tomcat

(1)点击run–EDit Configurations

09夯实基础之JavaEE基础

(2)点击左侧“+”号,找到Tomcat Server—Local(若是没有找到Tomcat Server 可以点击最后⼀⾏ 34 items more)

09夯实基础之JavaEE基础

(3)在Tomcat Server -> local-> Server -> Application server项⽬下,点击 Configuration ,找到本地 Tomcat 服务器,再点击 OK按钮。

09夯实基础之JavaEE基础

至此就配置好了。

1.5 修改Tomcat端⼝号

修改配置⽂件:/conf/server.xml

09夯实基础之JavaEE基础

如果将端⼝号改成80,则访问项⽬时的请求路径就可以省略端⼝号。

1.6 Tomcat管理项目

给tomcat增加管理员信息:

配置 conf/tomcat-users.xml

09夯实基础之JavaEE基础

二、创建javaWeb项目

2.1 步骤1

点击左上⻆的File–>New–>Project

09夯实基础之JavaEE基础

2.2 步骤2

找到Java Enterprise之后,在Application Sever中找到⾃⼰的Tomcat,同时勾选中Web Application。

09夯实基础之JavaEE基础

由于我的idea版本比较新,所以创建之后,会自动配置很多东西,当然,它默认使用了maven管理项目结构,所以创建完成之后是这样的:

09夯实基础之JavaEE基础

Tomcat环境配置:

09夯实基础之JavaEE基础

点击运行按钮,启动Tomcat服务器:

09夯实基础之JavaEE基础

会自动跳出一个页面:

09夯实基础之JavaEE基础

三、Serverlet

3.1 用户访问服务器的流程

09夯实基础之JavaEE基础

3.2 serverlet请求处理过程

在3.1中的处理请求中,请求的处理可以使用serverlet。

09夯实基础之JavaEE基础

serverlet中的三步走:

  1. 接参数
  2. 写逻辑(涉及到操作数据库)
  3. 返结果

3.3 Servlet⼯作原理

(1) Servlet接⼝定义了Servlet与servlet容器之间的契约。这个契约是:Servlet容器将Servlet类载⼊内存,并产⽣Servlet实例和调⽤它具体的⽅法。但是要注意的是,在⼀个应⽤程序中,每种Servlet类型只能有⼀个实例。

(2)⽤户请求致使Servlet容器调⽤Servlet的Service()⽅法,并传⼊⼀个ServletRequest对象和⼀个 ServletResponse对象。ServletRequest对象和ServletResponse对象都是由Servlet容器(例如 TomCat)封装好的,并不需要程序员去实现,程序员可以直接使⽤这两个对象。

(3)ServletRequest中封装了当前的Http请求,因此,开发⼈员不必解析和操作原始的Http数据。ServletResponse表示当前⽤户的Http响应,程序员只需直接操作ServletResponse对象就能把响应轻松的发回给⽤户。

(4)对于每⼀个应⽤程序,Servlet容器还会创建⼀个ServletContext对象。这个对象中封装了上下⽂ (应⽤程序)的环境详情。每个应⽤程序只有⼀个ServletContext。每个Servlet对象也都有⼀个封装Servlet配置的ServletConfig对象。

3.4 Serverlet生命周期

当客户端⾸次发送第⼀次请求后,由容器(web服务器(tomcat))去解析请求, 根据请求找到对应的servlet, 判断该类的对象是否存在,不存在则创建servlet实例,调取init()⽅法 进⾏初始化操作,初始化完成后调取 service()⽅法,由service()判断客户端的请求⽅式,如果是get,则执⾏doGet(),如果是post则执⾏ doPost().处理⽅法完成后,作出相应结果给客户端.单次请求处理完毕。当⽤户发送第⼆次以后的请求时,会判断对象是否存在,但是不再执⾏init(),⽽直接执⾏service⽅法,调取 doGet()/doPost()⽅法。

总结一下,整个生命周期有四个过程:

(1)实例化 --先创建servlet实例

(2)初始化 --init()

(3)处理请求 —service()

(4)服务终⽌ --destory()

图解如下:

09夯实基础之JavaEE基础

3.6 请求

HttpServletRequest表示Http环境中的Servlet请求,它扩展于javax.servlet.ServletRequest接⼝。

常⽤⽅法:

1)String getParameter(String name) 根据表单组件名称获取提交数据,返回值是String

注:服务器在接收数据时使⽤字符串统⼀接收

2)String[ ] getParameterValues(String name) 获取表单组件对应多个值时的请求数据

3)void setCharacterEncoding(String charset) 指定每个请求的编码(针对post请求才起作⽤)

4)RequestDispatcher getRequestDispatcher(String path) --跳转⻚⾯

5)存值 request.setAttribute(“key”,value);6)取值 request.getAttribute(“key”);//取值后需要向下转型

相关补充知识点:

补充1:客户端将数据发送给服务器的方式

方式1:通过表单通过 get/post 方式提交

方式2:通过a标签发送数据(本质上是get提交)

<a href="/login?name=abc&pass=123">

方式3:通过地址栏直接拼接(get请求)

方式4:js提交数据(get请求)

location.href=/login?name=abc&pass=123

补充2:处理请求乱码

方式1:

setCharacterEncoding(“UTF-8”); //post提交时有效

方式2:

String s = new String(变量名.getBytes(“ISO-8859-1”), “UTF-8”); // get提交乱码

方式3:

修改tomcat配置文件(get提交)

修改目录结构\conf\server.xml:

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" />

但是在tomcat8.0以后不再需要手动设置此属性

补充3:get和post的区别

\1. GET请求:get请求方法的含义是从服务器获取资源,资源类型可以是文本、图片、视频等资源。请求的数据会附加在URL之后,以?分割URL和传输数据,多个参数⽤&连接。URL的编码格式采⽤的是ASCII编码,⽽不是Unicode,即所有的⾮ASCII字符都要编码之后再进行传输。

POST请求:post请求相反,向URL指定的资源提交数据,并请求的数据放置在HTTP请求包的body中。

\2. 在HTTP规范中,没有对URL的⻓度和传输的数据⼤⼩进⾏限制。但是在实际开发过程中,对于GET,特定的浏览器和服务器对URL的⻓度有限制。因此,在使⽤GET请求时,传输数据会受到URL⻓度的限制。 对于POST,由于不是URL传值,理论上是不会受限制的,但是实际上各个服务器会规定对POST提交数据⼤⼩进⾏限制,Apache、IIS都有各⾃的配置。

\3. 安全性和幂等性

在HTTP协议中,安全的概念是是指请求方法不会“破坏”服务器上的资源,幂等是指多次执行相同的操作,结果都是相同的。显然GET方法是安全且幂等的,因为是只读操作;POST是新增数据,所以是不安全的和不幂等的。

但是在另一种安全的意义上,POST的安全性比GET高。这里的安全是指真正的安全,不同于上面的安全,上面的安全仅仅是不修改服务器的数据。比如在进行登录操作时,通过get请求,用户名和密码都会暴露在URL上,且登录页面很可能被浏览器缓存导致账号密码的泄露,然后你的钱就没了;相反,POST请求由于将数据封装在body中,就会安全很多。

3.7 响应

在Service API中,定义了⼀个HttpServletResponse接⼝,它继承⾃ServletResponse接⼝,专⻔⽤来封装HTTP响应消息。 在HttpServletResponse接⼝中定义了向客户端发送响应状态码,响应消息头,响应消息体的⽅法。

常⽤⽅法:

void addCookie(Cookie var1);//给这个响应添加⼀个cookie

void sendRedirect(String var1) ;//发送⼀条响应码,将浏览器跳转到指定的位置

PrintWriter getWriter(); 获得字符流,通过字符流的write(String s)⽅法可以将字符串设置到response缓冲区中,随后Tomcat会将response缓冲区中的内容组装成Http响应返回给浏览器端。

setContentType(); 设置响应内容的类型

重定向和转发的异同点:

重定向:response.sendRedirect()

转发:request.getRequestDispatcher("…/success.jsp").forward(request,response);

相同点:都⽤来跳转⻚⾯

不同点:

a.重定向时地址栏会改变,request中存储的数据会丢失。转发时地址栏显示的是请求⻚⾯的地址,request数据可以保存。

b.转发属于⼀次请求⼀次响应,重定向属于两次请求(地址栏修改了两次)两次响应。

3.8 会话

会话的概念:从打开浏览器到关闭浏览器,期间访问服务器就称为⼀次会话。

request存的值只能在单次请求中保存,保存的数据不能跨⻚⾯,当重定向时,request存的值会丢失。

session的数据可以在多个⻚⾯*享,即使重定向⻚⾯,数据也不会丢失,且session中可以包含n个request。

常用方法:

void setAttribute(String key, Object value) 以key/value的形式保存对象值,将数据存储在服务器端

Object getAttribute(String key) 通过key获取对象值

void invalidate() 设置session对象失效

String getId() 获取sessionid,当第⼀次登录成功后,session会产⽣⼀个唯⼀的id,浏览器之后访问时如果发现id值还是之前id,那么说明当前访问的属于同⼀个会话

void setMaxInactiveInterval(int interval) 设定session的⾮活动时间

int getMaxInactiveInterval() 获取session的有效⾮活动时间(以秒为单位),默认的有效时间:30 分钟

void removeAttribute(String key) 从session中删除指定名称(key)所对应的对象

综上所述,我们可以利用invalidate()、removeAttribute(String key)的方法使session失效,当然了,直接关闭浏览器也会让session失效。

四、JSP、EL表达式、JSTL

此部分内容,请参见我的另一篇文章,有非常详细的解释及相关代码:javaWeb-jsp

五、Session、Cookie和Filter

此部分内容,请参见我的另一篇文章:基于过滤器实现登录验证和评论的敏感词过滤等功能

六、MVC

6.1 MVC设计模式

Web MVC中的M(模型)-V(视图)-C(控制器)概念和标准MVC概念⼀样。

Web MVC标准架构:

09夯实基础之JavaEE基础

M(Model) 模型 : 应⽤程序的核⼼功能,管理这个模块中⽤的数据和值(bean,dao);

V(View )视图:视图提供模型的展示,管理模型如何显示给⽤户,它是应⽤程序的外观(jsp/html);

C(Controller)控制器: 对⽤户的输⼊做出反应,管理⽤户和视图的交互,是连接模型和视图的枢纽(servlet/service)。

6.2 三层架构

通常意义上的三层架构就是将整个业务应⽤划分为:表现层(UI)、业务逻辑层(BLL)、数 据访问层(DAL)。

区分层次的⽬的:“⾼内聚,低耦合”。

1、表现层(UI):通俗讲就是展现给⽤户的界⾯,即⽤户在使⽤⼀个系统的时候他的所⻅所得。 (jsp/html )表现层的代表作品:SpringMVC。

2、业务逻辑层(BLL):针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑处理。 (servlet,service )业务层的代表作品:Spring。

3、数据访问层(DAL):该层所做事务直接操作数据库,针对数据的增添、删除、修改、更新、查找 等。(dao)数据访问层的代表作品:mybatis。

6.3 三层架构和MVC的异同点比较

MVC可以是三层中的⼀个表现层框架,属于表现层。

三层和mvc可以共存。

三层是基于业务逻辑来分的,⽽MVC是基于页⾯来分的。

MVC主要⽤于表现层,3层主要⽤于体系架构,3层⼀般是表现层、中间层、数据层,其中表现层⼜可以 分成M、V、C,(Model View Controller)模型-视图-控制器

MVC是表现模式(Presentation Pattern) ,三层架构是典型的架构模式(Architecture Pattern)。

三层架构的分层模式是典型的上下关系,上层依赖于下层。但MVC作为表现模式是不存在上下关系的, ⽽是相互协作关系。即使将MVC当作架构模式,也不是分层模式。

总的来说MVC和三层架构基本没有可⽐性,是应⽤于不同领域的技术。

七、Ajax

7.1 Ajax简介

AJAX全称Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。 AJAX 不是新的编程语⾔,⽽是⼀种使⽤现有标准的新⽅法。 AJAX 是与服务器交换数据并更新部分网页的技术,不需要重新加载整个页面。

7.2 Ajax的技术组成

Ajax使用CSS和HTML来表示,用DOM模型来交互和动态显示,使用XML HttpRequest来和服务器进行异步通信(不同的浏览器稍有差异,IE使用ActiveXObject创建XML HttpRequest,而其他浏览器使用XML HttpRequest的JavaScript内建对象来创建),使用JavaScript来绑定和调用。

7.3 Ajax的工作原理

Ajax的⼯作原理相当于在⽤户和服务器之间加了—个中间层(AJAX引擎),使⽤户操作与服务器响应异步化。并不是所有的⽤户请求都提交给服务器。像—些数据验证和数据处理等都交给Ajax引擎⾃⼰来做,, 只有确定需要从服务器读取新数据时再由Ajax引擎代为向服务器提交请求。

八、 jQuery的Ajax操作

此处不介绍传统的Ajax操作,因为其步骤较为繁琐,各种方法属性也较多不好记忆,如有需要请自行百度,

8.1 ajax()方法

可以通过发送 HTTP请求加载远程数据,是 jQuery 最底层的 Ajax 实现,具有较⾼灵活性。

实现格式:

$.ajax({
    url:请求地址
    type:"get | post | put | delete " 默认是get,
    data:请求参数 {"id":"123","pwd":"123456"},
    dataType:请求数据类型"html | text | json | xml | script | jsonp ",
    success:function(data,dataTextStatus,jqxhr){ },//请求成功时 
	error:function(jqxhr,textStatus,error)//请求失败时
})

8.2 get() 方法

$.get(url, data, function(result) {
    url:请求的路径
    data:发送的数据
    result:返回的数据
});

8.3 post() 方法

$.post(url, data, function(result) {
    url:请求的路径
    data:发送的数据
    result:返回的数据
});

九、JSON

JSON (JavaScript Object Notation) 是⼀种轻量级的数据交换格式, 易于⼈阅读和编写,同时也易于机器解析和⽣成。

9.1 JSON的对象定义

var 变量名 = {
“key” : value , // Number类型
“key2” : “value” , // 字符串类型
“key3” : [] , // 数组类型
“key4” : {}, // json 对象类型
“key5” : [{},{}] // json 数组
};

9.2 JSON对象的访问

json对象是⼀个对象,⾥⾯的key就是对象的属性,我们要访问⼀个对象的属性, 只需要使⽤【对象名.属性名】的⽅式访问即可。

有关JSON的一些使用可以查看我的这一篇博客:Json解析中FastJson与Gson的简单使用

上一篇:04 curl 操作elasticsearch的CRUD


下一篇:一个成功的Git 分支模式