客户端/服务器
优点:
在web服务器软件中,可以部署web项目,让用户通过浏览器访问这些项目,故也称为web容器。 web服务器可以帮我们处理繁琐的应用层协议,将报文中有用的信息提取并封装到对象中,方便程序员使用。
常见的JavaWeb服务器软件:
JavaEE:Java语言在企业级开发中使用的一套设计思想、软件架构、13项大的技术规范(Servlet、EJB、JMS等)。 JavaEE最核心的组件就是基于Servlet标准的Web服务器,开发者编写的应用程序是基于Servlet API并运行在Web服务器内部的。
所有用户访问得到同样的结果。 如:HTML、CSS、JavaScript等。
每次访问同样的URL,得到的结果可能不一样,是服务器动态生成后以静态资源方式返回的。 如:Servlet/JSP、PHP、ASP等。
bin/startup.sh
bin/shutdown.sh
<Connector port=“8080” protocol=“HTTP/1.1” connectionTimeout=“20000” redirectPort=“8445” />
<Host>
<Context docBase="D:\hello" path="/hehe">
<!--docBase:项目存放路径,path:映射的虚拟访问目录-->
</Host>
在文件中编写<Context docBase=“D:\hello” />
public class ServletDemo implements Servlet
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>HelloWorld</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/servlets/HelloWorld</url-pattern>
</servlet-mapping>
<url-pattern>
对应映射的Servlet <servlet>
<servlet-name>hello</servlet-name>
<servlet-class>HelloWorld</servlet-class>
<!-- 配置启动时机,负数为延迟加载,自然数为饿汉 -->
<load-on-startup>1</load-on-startup>
</servlet>
Servlet的init方法只执行一次,说明是单例的。 注意,多个用户同时访问可能存在线程安全问题,所以尽量不要使用成员变量。
每次访问Servlet时,Service方法都会被调用一次。
服务器关闭时执行destroy方法,只执行一次。
public class ServletDemo implements Servlet
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface WebServlet {
String name() default ""; // 相当于<servlet-name>
String[] value() default {}; // 等价于配置urlPatterns,用于简化配置
String[] urlPatterns() default {}; // 等价于<url-pattern>
int loadOnStartup() default -1; // 配置Servlet加载时机
WebInitParam[] initParams() default {};
boolean asyncSupported() default false;
......
}
IDEA为每个web项目单独创建一份配置目录。
/Users/simplekang/Library/Caches/JetBrains/IntelliJIdea2020.1/tomcat/Tomcat_9_0_38_ServletTest
方式:带参启动Tomcat。配置CATALINA_BASE等参数,将配置文件重定向至IDEA创建的配置目录(见第三种配置方式)。在xml文件中,配置虚拟目录,以及映射docBase为IDEA的项目out目录等。
<Context path="/ServletTest_war_exploded" docBase="/Users/simplekang/IdeaProjects/Test/ServletTest/out/artifacts/ServletTest_war_exploded" />
/Users/simplekang/IdeaProjects/Test/ServletTest
工作空间目录/out/artifacts/ServletTest_war_exploded