Java Web开发基础知识
关于静态和动态网页
静态和动态是相对于浏览器而言的,浏览器可以直接渲染静态代码,但浏览器不能直接渲染动态代码,需要第三方翻译成静态代码才能渲染
Servlet容器
Apache,Nginx,Tomcat都是Web服务器软件,但是它们之间是有区别的
前两个软件只能处理静态代码,处理动态代码只能借助Servlet代码或者JSP代码翻译成静态代码,Servlet容器就是能把动态代码翻译成静态代码的软件
最后一个软件提供了Servlet容器,所以我们只需要安装Tomcat就能拥有Java Web的开发环境
资源文件分类
资源可以分为两类,静态资源文件和动态资源文件
如果一个资源文件只包含静态代码,它就是静态资源文件
如果一个资源文件有动态代码,哪怕只有一行,它就是动态资源文件
web服务器一般通过文件后缀名来识别资源文件,一般动态资源文件的后缀名是.jsp
或者.java
,常见的静态资源文件后缀名有.html
,.htm
,.css
,.js
,.jpg
其他说明
通常情况下,一台web服务器能同时部署多个web项目,一个web项目包含多个资源文件,web开发人员工作的本质就是开发web项目所需要的各种静态和动态资源文件,将他们整合,然后部署在服务器上测试、运行
web工作人员有web设计人员和web开发人员,web设计人员通常使用html,css设计网站页面,侧重于美工,web开发人员使用服务器端脚本语言编写动态页面,也会参与web设计,也可能帮助维护动态网站使用的数据库
环境配置
安装JDK和Tomcat即可
书中是windows系统,所以不适用,直接
sudo pacman -S jdk
sudo pacman -S tomcat9
即可
还需要开启tomcat的服务
sudo systemctl start tomcat9
没配置过的tomcat会默认搭载在8080端口上,在浏览器上打开http://localhost:8080
如果没出问题的话会看到一个全英文的界面,上面有一只汤姆猫(虎?)
想要修改的话在/usr/share/tomcat9/conf/server.xml
中,修改之后记得重启服务才能生效
这个网页的本地位置在/var/lib/tomcat9/webapps/ROOT/index.jsp
实际访问时我们并不需要指定index.jsp
,那是因为在tomcat的conf文件夹里的web.xml
里有
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
表示如果没有指定就默认依次找该目录下的这些文件
实践1
在ROOT目录新建abc.jsp
编辑
<%@ page pageEncoding="utf-8"%>
<%
System.out.println("你好,Tomcat控制台");
String realPath = request.getServletContext().getRealPath("");
response.getWriter().print("Web项目的根目录绝对路径是"+realPath);
%>
一般情况下在ROOT中是没有权限的,需要777
然后访问http://localhost:8080/abc.jsp
就能看到这条信息了
编码问题
如果你在上面的实践中删掉第一行,可能会出现乱码的情况
Tomcat默认使用UTF-8编码,这个要注意
斜杠
:8080/abc/
访问的是abc
目录,而不是abc
文件,斜杠就代表一定是目录名而不是文件名
但是反过来:8080/abc
可以访问到abc
文件,如果没有找到文件,则会访问到abc
文件夹的index
文件,这时候实际上是浏览器发起了两次访问请求,一次是请求/abc
,收到了存在abc
文件夹之后发起了第二次请求/abc/
为了避免浏览器发起二次访问,要尽量避免网址中资源名和物理路径目录名同名
webapps和ROOT
在Tomcat的配置文件server.xml
里有
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
表示webapps目录也可以存放web程序,ROOT就位于webapps文件夹里,ROOT相当于webapps的默认资源目录,如果他们之间发生冲突的话是有优先级来处理的
当webapps目录和Root目录存在abc目录时,tomcat会直接找webapps里的abc,ROOT里的abc文件夹相当于是隐身了,除此之外ROOT目录下同名的文件也会隐身
所以在开发的时候要避免web目录下的目录名和目标资源名同名
任意物理绝对路径部署web项目
在server.xml里写<Context docBase="path/in/computer" path="target/path"/>
或者在conf/C开头的文件夹
里放name.xml
写<Context docBase="path/in/computer"/>
,访问8080/name
然后重启一下tomcat9就可以部署绝对路径的项目了
然而linux里不知道抽了什么风,没法成功
成功了,是指定目标文件夹的权限问题,作为代价我把一些文件夹chmod 777
了,之后再研究一下tomcat的用户组之类的东西