java web 01
start at 2022/10/01?

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的用户组之类的东西

2022/10/01
> CLICK TO back <