JavaEE开发-本地服务开发环境搭建
简介
- JavaEE开发
- 在Java的三大版本JavaSE、JavaME、JavaEE中,JavaEE是专门用来做后台开发的,所以,平时所说的“Java后台开发“,一般叫做JavaEE开发
- JavaEE开发的工作内容:编写服务器上运行的程序,为客户端提供数据服务。
- 服务器
- 服务器就是一台计算机,这台计算机对CPU和内存要求比较高
- 用户量、数据访问量越大,对服务器的性能要求越高
- 一般中大型企业都有自己独立的服务器机房,摆放着成群的服务器,小型企业可以考虑租用云服务器(比如阿里云、腾讯云服务器)
- 宕(dang)机:服务器死机、挂了,停止对外服务,客户端无正确响应,严重影响用户体验
搭建Java服务器开发环境
服务器软件Tomcat
- 服务器有很多端口,每个端口对应一个服务器软件
- 服务器软件是什么?
- 服务器软件可以把他简单理解成一个具有main函数入口、用socket网络编程可以随时监听处理外部网络请求的java应用程序
- 一个服务器软件下面可以部署n个java项目(比如:qq、微信等应用的后台),每个java项目可以用路径来区分
- java项目是什么?
- 每个java项目就可以把他想象成一块没有main函数入口的代码,这些代码根据项目的不同,分别放在了tomact安装路径下的不同的文件夹中
- 当tomcat监听到外部网络请求过来时,根据请求路径的不同来分别调用对应文件夹下的程序代码块
- Tomcat:
- java中的服务器软件,免费开源,这个软件也是由java开发的,因此要运行这个Tomcat软件必须通过JVM
- 有很多服务器软件,Tomcat只是其中一款
- 因此要想搭建一个服务器步骤如下:
- 在一台计算机上安装、启动一个JVM用来加载执行Tomcat
- 然后在该机器上安装服务器软件Tomcat
- 把开发人员编写的java代码部署到这个服务器软件Tomcat中
- Tomcat就可以执行这个java代码
- Tomcat有个类加载器,加载java项目中所有的类
- 可以发现java项目中没有main方法,不具备单独运行的能力,必须通过Tomcat加载
- 因此main方法在Tomcat中实现
- 部署就是告诉Tomcat,java项目在哪
- Tomcat就可以看成是一段java代码,这段代码实现了main函数,HttpServlet也是tomcat实现的,而且可以加载java项目的代码
- 客户端请求服务器的过程
- 客户端发送请求到服务器
- 服务器根据请求的端口找到对应的服务器软件Tomcat
- Tomcat根据请求信息去找到对应的java代码,执行java代码并返回结果给客户端
手动本地运行Tomcat
- 下载和安装JDK(略)
- 安装Tomcat(windows)
- 下载地址:https://tomcat.apache.org
- 点击左边的Documentation里面的版本,点击Tomcat 9,下载9.0.34版本
- 可以看到
- Binary Distributions是二进制,就是安装包,选择zip—
apache-tomcat-9.0.34.zip
- Source Code Distributions 源代码,选择zip—
apache-tomcat-9.0.34-src.zip
- Binary Distributions是二进制,就是安装包,选择zip—
- 直接解压到文件夹即可,解压到D:\Dev\Java目录下
- 启动:打开bin文件,找到startup.bat,双击即可,默认占用的是8080端口
- 此时就可以访问了:
http://127.0.0.1:8080/docs
- 上面访问的是Tomcat安装目录下的webapps文件夹(Tomcat自带的安装目录)下的docs文件中的资源
- 下载地址:https://tomcat.apache.org
- 启动和关闭Tomcat(TOMCAT_HOME指的是Tomcat的安装目录)
- 方法1(可以省略.bat)
- 启动: TOMCAT_HOME\bin\startup.bat
- 关闭: TOMCAT_HOME\bin\shutdown.bat
- 方法2(可以省略.bat),使用命令行,cd到bin目录
- 启动: TOMCAT_HOME\bin\catalina.bat run
- 关闭: TOMCAT_HOME\bin\catalina.bat stop
- Tomcat启动成功的前提条件:配置好JAVA_HOME,因为tomcat也是java代码运行需要JVM
- JAVA_HOME就是JDK的安装路径,JAVA_HOME配置上面已讲
- startup.bat本质是调用catalina.bat,catalina.bat的本质里面用到了JAVA_HOME,会去查找JVM的安装目录,启动JVM
- 注意: 上面都是windows系统,mac、linux系统双击对应的sh文件(也不需要配置什么JAVA_HOME)
- 切换到对应的tomcat的bin目录;
- 此处要是遇到没权限的,给下权限,
sudo chmod 755 *.sh
; - 启动:
sh startup.sh
; (ps:经过试验:./startup.sh
这种方式也能启动) - 停止:
sh shutdown.sh
;(ps:经过试验:./shutdown.sh
这种方式也能关闭) - 要显示启动日志得用以下方式:
- 上接第三步:
./catalina.sh run
,当执行./catalina.sh这个命令是可以看到一堆提示命令
- 方法1(可以省略.bat)
IDEA的使用
- IDEA2020.1.4之后貌似无法永久破解,因此最好用1.4之前的版本,不包含1.4
- 破解、安装-略
将tomcat集成到IDEA
- 由于每次都要手动启动tomcat,比较麻烦,因此可以将tomcat与开发工具IDEA集成到一起,这样就可以自动启动tomcat
- 步骤
- 打开IDEA(启动页面),点击最下面的Configure->settings(mac平台直接点击preferences…)
- 点击Build,Execution,Deployment(构建,执行,部署)->点击Application Servers(应用程序服务)
- 点击左上角加号“+”,展示一个列表,列表中都是java常用的服务器软件,选择Tomcat Server
- 设置Tomcat Home,选择Tomcat解压的本地路径(D:\Dev\Java\apache-tomcat-9.0.34),点击OK
- 再次点击OK,此时已经将tomcat集成到IDEA中
新建一个纯java项目(01_HelloWorld)
- 打开IDEA->New Project->左边选择Empty Project->next->Project name:设置项目名称(JavaProject),设置项目路径(也可以在Java目录下新建一个文件夹存放F:\Java\Codes\JavaProject)->Finish
- 这里的项目名称不是javaEE的项目名称,相当于是一个空的项目文件夹,可以存放n个项目
- 此时弹出Project Structure窗口,选择Project Setting ->Modules->点击左上角的加号“+”->New Module->弹出一个窗口,选择Java,Module SDK中选择为JDK8->next->Module name:自定义模块名称(01_HelloWorld)->点击Finish->点击OK
- 这个模块名称才是javaEE的项目名称
- 项目文件列表
- 01_HelloWorld文件夹下有个src文件夹,内部专门用于写Java源码
- External Libraries:该文件夹下存放整个项目依赖的库,目前有一个JDK8的库(1.8)
- 初始化代码
- 右击src->New->Java Class->Main->回车,新建一个Main类
-
在该类中新增一个main函数,写测试代码,右击选择运行(Run)执行测试代码
public class Main { public static void main(String[] args) { System.out.println("---hello---"); } }
新建一个JavaEE项目
- 删除Main类(JavaEE项目没有main函数入口)
- 将java项目变为JavaEE项目:新增web服务器模块
- 右击01_HelloWorld点击Add Framework Support…,勾选Web Application点击OK
- 此时生成一个与src平级的web文件夹
- 这个web文件夹就是给客户端提供的资源
- 在这个文件夹中新增html、css、img等文件夹分别编写相应的web代码
将JavaEE项目部署到Tomcat
- 点击IDEA工具绿色小锤标识右边的框,选择Edit Configurations…
- 点击左上角的加号“+”->选择Tomcat Server下的Local->为Tomcat依赖命名(Tomcat9)->点击Configure…选择Tomcat解压的本地路径(D:\Dev\Java\apache-tomcat-9.0.34)
- 在下面的Tomcat Server Settings中,可以看到当前Tomcat默认的是8080端口,也可以修改
- 外部访问通过IP地址+8080端口就能找到当前这个运行的服务器软件Tomcat
- 点击Deployment(部署)点击右边的加号“+”,选择Artifact…(打包),选择要部署的项目,可以同时部署多个项目
- 设置Application context:中的路径(/hello),这个路径的作用是用来区别当前Tomcat下的哪一个项目。一个Tomcat下可以部署n个Java项目,为了区别访问哪一个项目因此这里用路径指定; 点击OK即可
- 如果部署多个项目,多个项目的路径要设置的不同
- 此时点击右上角的虫子图标(断点调试),则启动Tomcat,并将当前的Java项目部署到Tomcat中;然后浏览器自动打开
http://localhost:8080/hello/
显示的网页是web文件夹下的index.jsp内容,即该路径访问的是web文件夹下的所有资源,默认寻找index的文件 - 可以在web下新建一个test.html,编写测试代码,然后点击甲壳虫,选择Redeploy(重新部署:因为是Java项目代码发生了改变,因此需要重启Tomcat服务,只需要重新部署Java代码即可),浏览器访问:
http://localhost:8080/hello/test.html
,就可以看到编写的测试代码 - 同理可以在web文件夹下新建html、css、img文件夹(右击web->new->Directory),存放不同的资源用于浏览器访问
登录页面项目创建
- web端代码
-
在web文件夹下新建一个login.html文件,编写登录代码:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>第一个登陆</title> </head> <body> <form action="/hello/login" method="get"> <div>用户名<input name="username"></div> <div>密码<input name="password"></div> <button type="submit">登录</button> </form> </body> </html>
-
- 服务端代码:接收客户端发送过来的登录请求参数
- 如果Java项目需要接收客户端的参数需要依赖一个Servlet这个技术,Servlet这个库在Tomcat中,需要在项目中添加依赖库
- 点击右上角倒数第三个图标(Project Structure…)->点击Modules->01_HelloWorld->Dependencies->点击加号“+”选择Library->选择Tomcat9.0.34->add Selected->点击OK即可; 此时项目文件目录的External Libraries文件夹下面就会多一个Tomcat9.0.34库
- 在src文件目录下,右击new->Create new Servlet->name输入:LoginServlet、包名输入:com.zh.servlet,点击OK
- LoginServlet是类名
- com.zh.servlet:是包名,也是命名空间,每个点代表文件目录的节点,三层文件夹,com文件夹下的zh文件夹下的servlet文件夹下的LoginServlet类
- 包名是用来区分具有相同类名的类,包名的约定俗成:公司的域名反过来写
-
在LoginServlet类中编写接收客户端代码:
/* 处理登录请求 1. 继承HttpServlet,才能处理http请求 2. 使用@WebServlet,说明它要处理的请求路径 * */ @WebServlet("/login") public class LoginServlet extends HttpServlet { //处理get请求 @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("------doget-----------"); //统一函数处理 doPost(req,resp); } //处理post请求 /** * HttpServletRequest req: 请求,用来获取客户端发送的数据 * HttpServletResponse resp:响应,用来给客户端返回数据 * */ @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("-------dopost---------"); //获取客户端发送的数据(请求参数) //按照UTF8编码解析客户达发送过来的数据 req.setCharacterEncoding("UTF-8"); String username = req.getParameter("username"); String password = req.getParameter("password"); System.out.println(username + "---" + password); //设置响应数据的MINE Type和数据编码 resp.setContentType("text/plain;charset=UTF-8"); //2. 判断 if("123".equals(username) && "456".equals(password)){ System.out.println("登录成功"); resp.getWriter().write("Login Success!"); }else { System.out.println("登录失败"); resp.getWriter().write("Login Error!"); } } }
- 验证
- 部署服务,然后浏览器访问:
http://localhost:8080/hello/login.html
- 输入账号:123,密码:456,则响应:
Login Success!
- 部署服务,然后浏览器访问:
如何在一个目录下新建多个Module项目
- 上面项目JavaProject下有个01_HelloWorld,那么其实JavaProject就相当于是一个文件夹,下面有第一个项目(Module)01_HelloWorld,那么如何在JavaProject文件夹下新建一个新的项目(Module)呢?
- 点击外部库(External Libraries),点击菜单栏的File->new->new moudle(新模块)然后同理建立第二个模块(纯java项目),然后在将该模块修改为JavaEE项目
- 这样一个目录下有多个项目(Module),即一个服务器软件下可以部署多个项目,但是注意这多个项目的访问路径不能一样
- 多个项目部署
- 点击Tomcat 9.0.34,点击Edit Configurations…,点击部署(Deployment),点击加号“+”可以选择部署n个项目
- 点击每个项目,可以通过Application context设置每个项目的访问路径
- 删除、导入、复制已存在的模块
- 删除:点击模块,右击->Remove Module
- 复制:值接在项目列表复制粘贴,重新命名文件夹名字,比如原来05_crm复制后修改为06_crm,注意也要将文件目录下的05_crm.iml也修改为06_crm.iml,然后再导入项目
- 导入:
- 导入方法1: File->Project Structure… ->点击左上角+ ->import Module->找到目录的Module,在文件夹中找到xxx.iml文件夹(06_crm.iml),然后点击打开即可
- 导入方法2:File->new ->Moudle from Existing Sources…->找到06_crm文件夹,然后找到里面的06_crm.iml,然后点击打开即可
- 导入完需要部署:打开Project Structure ->左边列 Artifacts ->点击+ ->Web Application Exploded -> from Moudles ->06_crm
直接新建一个(JavaEE)企业项目
- 打开IDEA->New Project->左边选择Java Enterprise
- project SDK选择jdk1.8,javaEE version选择最新版本即可,Additional Libraries and Frameworks勾选->Web Application,点击next
- 输入项目名称(01_HelloWorld)、路径D:\Dev\Java\Codes->点击完成
- 注意:这种方式会自动导入Tomcat、会自动创建web文件夹以及其默认文件(WEB-INF、index.jsp)
- 新建一个JavaEE Module:同理也可以在上面的JavaProject下面,新建一个Module,然后选择Java Enterprise,其余一样,这样就可以直接创建一个JavaEE的项目(Module),不用先创建成纯java项目,再改造成JavaEE项目了
IDEA点击run启动项目的原理
- 点击IDEA工具绿色小锤标识右边的框,选择Edit Configurations…,点击Tomcat 9.0.34,点击Startup/Connection…
- 可以看到run、Debug、Coverage、Profiler对应的下面的脚本
- 本质就是Tomcat安装目录bin目录下的
catalina.bat run
命令与catalina.bat stop
命令
- 本质就是Tomcat安装目录bin目录下的
tomact的源代码分析
将源码包导入到当前项目
- 第一步:给当前项目添加tomact依赖库
- 打开一个已经创建好的项目
- 点击右上角倒数第三个图标(Project Structure…)->点击Modules->选择当前项目(01_HelloWorld)->Dependencies->点击加号“+”选择Library->选择Tomcat9.0.34->add Selected
- 点击OK即可; 此时项目文件目录的External Libraries文件夹下面就会多一个Tomcat9.0.34库
- 第二步:将tomact的源代码导入到当前项目
- 上面仅仅是将tomact这个库导入到项目中了,tomact库是jar的class文件不是源代码
- 但是我们点击进入HttpServlet类,好像看到了源代码,但是这个仍然不是源代码,是IDEA根据tomact库的jar的class文件反编译出来的伪源代码
- 重复第一步的2,在该页面找到已经添加的Tomcat9.0.34库,右击edit(编辑),点击左下角的加号”+”
- 如何删除:点击Classes(类)下的
apache-tomcat-9.0.34-src.zip
文件,点击下面的减号”-“,点击Sources这个标题,点击下面的减号”-“,就是删除已经添加的tomact源码
- 如何删除:点击Classes(类)下的
- 选择当初我们在tomact官方文档下载的
apache-tomcat-9.0.34-src.zip
,点击OK - 此时再经过点击进入HttpServlet类,进入的代码就是真正的源代码了
- 可以看到:External Libraries/tomcat-9.0.34 下面多了一个apache-tomcat-9.0.34-src.zip库
tomact的源代码分析:
- 为什么项目一旦启动就自动加载index.jsp代码?
-
command/ctrl+shift+f全局搜索,index.jsp,在tomcat.java源码文件中可以看到
// Welcome files ctx.addWelcomeFile("index.html"); ctx.addWelcomeFile("index.htm"); ctx.addWelcomeFile("index.jsp");
-
首先加载
index.html
,其次index.htm
,再次index.jsp
-
- main函数在tomcat的哪个文件实现的?
- 搜索中输入’class Bootstrap’,可以找到Bootstrap.java文件
- 该文件中的main函数就是tomcat的入口函数
- 可以看到Bootstrap.java的文件目录在…/catalina/startup/Bootstrap.java
/** * Main method and entry point when starting Tomcat via the provided * scripts. * 当通过脚本启动Tomcat时,进入这个Main方法 * @param args Command line arguments to be processed */ public static void main(String args[]) { ···· }
IDEA常用快捷键
- 如何设置每次点击debug的时候,自动选择“重构(redeploy)”?
- 点击Tomcat 9.0.34,点击Configure…->On “update” action 点击选择redeploy
- 点击OK即可
- 设置debug快捷键为alt+D,在快捷键搜索debug然后设置
-
常用快捷键
Ctrl+D,复制当前行 设置快捷键:在偏好设置的快捷键中搜索引入函数变量(var value..)设置一个快捷键,比如alt+s,作用是当定义了一个之后,直接使用快捷键alt+s就会自动生成变量名和变量类型 双击shift,项目全局搜索 command/ctrl+shift+f 整个IDEA搜索,可以搜索项目配置,库源码 command/ctrl+R 当前文件内容全局替换 command/ctrl+E 最近修改了哪些文件(很常用) Ctrl+Alt+L 整理代码,将代码按照标准格式整理
常用小技巧
- 方法的文档注释:输入
/**
,然后点击回车 - 新增常用代码块(也叫动态模板)
- 双击shift,输入live templates 然后打开
- 点击Java展开,就能看见很多的代码块,比如for循环是iter
- 点击右边的+可以自己添加自己的常用代码块
- 如何快速在左侧 Project 树中定位出文件
- 方式一:点击Project树右边的标准镜
- 方式二:alt+F1,然后点击1
- 方式三:点击Project树右边的设置齿轮图标,勾选Alwasy Select Opened File,打开某个文件会自动定位到Project树树下。