Java Web应用开发基础

为了满足开发多层体系结构的企业级应用的需求,在早期的JavaSE基础上,针对企业级应用的各种需求提出了JavaEE。其实JavaEE是一种结构和一套标准,是中间件体系结构标准,可以简化和规划化分布式多层企业应用的开发和部署。

Java EE的13种核心技术有JDBC、JNDI、EJB、RMI、JSP、Java Servlet、XML、JMS、Java IDL、JTS、JTA、JavaMail和JAF

JavaEE应用基础

JavaEE三层架构自上而下将系统分为表示层、逻辑层、持久层。

1、表示层由处理用户交互的客户端组件及其容器所组成

2、业务逻辑层由解决业务问题的组件组成

3、数据层由一个或多个数据库组成,并可包含存储过程。

这种三层架构,在处理客户端的请求时,使客户端不用进行复杂的数据库处理;透明地为客户端执行许多工作,如查询数据库、执行业务规则和连接现有的应用程序;并且能够帮助开发人员创建适用于企业的大型分布式应用程序。

网络应用系统模型

请求-响应模型是网络应用系统中最常见的模型。在这种模型中,一个客户端,如一个Web浏览器向服务器发送一个请求,服务器处理这个请求并返回一个响应。这个过程是同步的,意味着客户端需要等待服务器的响应。这种模型的优点是简单和易于理解,但在处理大量并发请求时可能会导致性能问题。

另外还有观察者模型也被称为发布-订阅模型。在这种模型中,有一个或多个发布者,通常是一个事件或消息源,和多个订阅者就是对这些事件或消息感兴趣的观察者。当发布者发生了一个事件或生成了一个消息,所有订阅的观察者都会收到通知。这个过程是异步的,意味着观察者可以在发布者的事件或消息处理过程中进行其他操作。这种模型的优点是能够处理大量并发事件或消息,但需要谨慎处理避免消息丢失或处理错误。

Servlet技术

servlet是运行在Web服务器中的小型Java程序即服务器端的小应用程序。servlet通常通过HTTP超文本传输协议接收和响应来自Web客户端的请求。

  1. 用于扩展服务器功能的服务器端组件技术
  2. 直接或者间接实现javax.servlet.Servlet接口的类

servlet实例是由web服务器tomcat创建的,它是单例多线程的。单例是指servlet的实例只有一个,多线程是指每次客户端的请求,web服务器都会从线程池中分配一个工作线程去执行servlet的service()方法

Servlet特点

1、高效支持缓存和多线程

2、方便Servlet提供了大量的实用工具例程,如自动地解析和解码HTML表单数据、读取和设置HTTP头、处理Cookie、跟踪会话状态等。

3、功能强大以Java API作为后盾

4、可移植性好 用Java语言编写在服务器端运行

编程方法

安装web服务器软件,推荐免费开源的tomcat。服务器在应用中充当了服务端代理的作用,用于简化采用http协议进行数据传输的通信细节。使开发人员不需要了解通信细节则可以进行服务器端编程。

常见的安装目录:

bin用于存放可执行的文件。后缀为bat的批处理文件用于windows系统,后缀为sh的批处理文件用于Linux系统

        startup.bat用于启动服务器,shutdown.bat用于停止服务器

conf用于存放配置文件

        server.xml配置文件

                连接子配置<Connector port="8080请求端口号" protocol="HTTP/1.1所支持的协议和对应的版本号" connectionTimeout="20000连接请求超时配置,单位毫秒" redirectPort="8443如果使用https协议重定向到8443端口" />

                虚拟主机配置<Host name="localhost主机名称"  appBase="webapps默认部署应用的目录" unpackWARs="true支持自动解压缩" autoDeploy="true支持自动部署">

lib用于存放所共享使用的jar包库文件

logs用于存放系统日志

webapps用于存放在服务器中部署的应用

work工作目录,是服务器运行时存放class文件的位置

在IDEA中的常规开发方式

推荐使用maven开发

如果使用Tomcat10则遵循的是JavaEE9规范,即jakarta.servlet-api

1、添加依赖:需要考虑使用哪个版本的JavaEE

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
 <modelVersion>4.0.0</modelVersion>
 <groupId>com.yan</groupId>
 <artifactId>_0328</artifactId>
 <version>1.0-SNAPSHOT</version>
 <!-- 默认采用的打包方式为jar,web应用对应的打包方式为war-->
 <packaging>war</packaging>
 <dependencies>
   <dependency>
     <groupId>jakarta.servlet</groupId>
     <artifactId>jakarta.servlet-api</artifactId>
     <version>6.0.0</version>
     <scope>provided</scope>
   </dependency>
 </dependencies>
 <build>
   <plugins>
     <plugin>
       <groupId>org.apache.maven.plugins</groupId>
       <artifactId>maven-compiler-plugin</artifactId>
       <version>3.12.1</version>
       <configuration>
         <source>17</source>
         <target>17</target>
         <encoding>utf-8</encoding>
       </configuration>
     </plugin>
     <plugin>
       <groupId>org.apache.maven.plugins</groupId>
       <artifactId>maven-war-plugin</artifactId>
       <version>3.3.2</version>
     </plugin>
   </plugins>
 </build>
</project>

2、实现Servlet接口定义对应的Servlet组件

//Servlet并没有程序的执行起始点main方法,Servlet服务器端小程序是服务器进行创建并调用
public class HelloServlet implements Servlet {
   public void init(ServletConfig servletConfig) throws ServletException {
   }
   public ServletConfig getServletConfig() {
       return null;
   }
   //service方法用于处理客户端请求,并针对客户端请求生成html的响应文档。服务器隐藏具体的http协议通信细节,会将客户端提供的数据封装在ServletRequest对象中,服务器生成的响应需要写入到ServletResponse对象中
   public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
       //设置响应内容类型,MIME多用途互联网邮件扩展协议
       servletResponse.setContentType("text/html;charset=utf-8");
       PrintWriter out = servletResponse.getWriter();
       out.println("<!DOCTYPE html>\n" +
               "<html lang=\"en\">\n" +
               "<head>\n" +
               "    <meta charset=\"UTF-8\">\n" +
               "    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n" +
               "    <title>Document</title>\n" +
               "</head><body><h2>你好!三脚猫</h2></body></html>");
       out.flush();
       out.close();
   }
   public String getServletInfo() {
       return null;
   }
   public void destroy() {
   }
}

3、添加配置,将Servlet组件和一个请求地址建立对应关系

注意所创建的目录名称和位置

web.xml是当前web应用的核心配置文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee
                     https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
        version="5.0">
   <!-- 用于将Servlet类和一个名称建立对应关系,注意名称不能重复 -->
   <servlet>
       <servlet-name>hello</servlet-name>
       <servlet-class>com.yan.HelloServlet</servlet-class>
   </servlet>
   <!-- 将一个名称和一个请求地址建立对应关系 -->
   <servlet-mapping>
       <servlet-name>hello</servlet-name>
       <url-pattern>/hello.do</url-pattern>
   </servlet-mapping>
</web-app>

4、使用IDEA进行应用打包

自动在项目目录中生成target目录,其中包含生成的war文件。将war文件拷贝到tomcat的webapps目录下,由于生成的war文件名称过长,所以修改名称为test.war。然后在cmd中输入命令startup.bat启动服务器

5、打开浏览器输入网址localhost:8080/test/hello.do

Tomcat和Jetty

Tomcat和Jetty都提供一个快速、灵活、可嵌入的Web服务器和Servlet容器,使Java开发人员能够轻松构建高性能的Web应用程序。

Tomcat 和 Jetty 都是作为一个 Servlet 引擎应用的比较广泛,虽然Jetty正成长为一个优秀的 Servlet 引擎,但是目前的 Tomcat 的地位仍然难以撼动。相比较来看,它们都有各自的优点与缺点。Tomcat 经过长时间的发展,它已经广泛的被市场接受和认可,相对 Jetty 来说 Tomcat 还是比较稳定和成熟,尤其在企业级应用方面,Tomcat 仍然是第一选择。但是随着 Jetty 的发展,Jetty 的市场份额也在不断提高,至于原因就要归功与 Jetty 的很多优点了,而这些优点也是因为 Jetty 在技术上的优势体现出来的。

在Maven开发中tomcat提供的插件只有到Tomcat7,所以只能支持较低版本的JavaEE,可以考虑开发时使用Jetty插件,最终部署时可以不部署在Jetty中

  • 7
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值