发表于: 2025-05-25 20:16:53

0 52


今天完成的事情:(一定要写非常细致的内容,比如说学会了盒子模型,了解了Margin)

jetty,resin,tomcat的常见配置有哪些,内存,端口,日志文件都怎么配置? 

对于Jetty、Resin和Tomcat这些常见的Java Servlet容器/应用服务器,它们各自有一些特定的配置项。下面简要介绍如何配置内存设置、端口以及日志文件。

Jetty

内存配置

Jetty本身并不直接管理JVM的内存分配,而是通过启动脚本中的JVM参数来控制。例如,在start.ini或命令行中添加:

shell

深色版本

-Xms512m -Xmx1024m

端口配置

在start.ini或jetty.xml中配置HTTP连接器的端口:

<Configure id="Server" class="org.eclipse.jetty.server.Server">

  <Call name="addConnector">

    <Arg>

      <New class="org.eclipse.jetty.server.nio.SelectChannelConnector">

        <Set name="port">8080</Set>

      </New>

    </Arg>

  </Call>

</Configure>

日志配置

Jetty使用SLF4J作为其日志API,并且默认实现为Logback。可以在resources/logback.xml中进行配置。

<configuration>

  <appender name="FILE" class="ch.qos.logback.core.FileAppender">

    <file>jetty.log</file>

    <encoder>

      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>

    </encoder>

  </appender>

  <root level="info">

    <appender-ref ref="FILE" />

  </root>

</configuration>

Resin

内存配置

在resin.properties或者启动脚本中指定JVM参数:

jvm_args : -Xms512m -Xmx1024m

端口配置

在resin.xml中配置HTTP监听器的端口:

<http address="*" port="8080"/>

日志配置

Resin的日志可以通过resin.xml中的<log>元素进行配置:

xml

深色版本

<log path="${resin.home}/log/jvm-memory.log" level="info"/>

Tomcat

内存配置

在catalina.sh(Linux/Mac)或catalina.bat(Windows)中设置JVM参数:

JAVA_OPTS="-Xms512m -Xmx1024m"

端口配置

在conf/server.xml中修改Connector元素的端口号:

<Connector port="8080" protocol="HTTP/1.1"

           connectionTimeout="20000"

           redirectPort="8443" />

日志配置

Tomcat的日志配置主要位于conf/logging.properties文件中,可以调整日志级别、格式等:

handlers = 1catalina.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler

.level = INFO

1catalina.org.apache.juli.FileHandler.level = ALL

1catalina.org.apache.juli.FileHandler.directory = ${catalina.base}/logs

1catalina.org.apache.juli.FileHandler.prefix = catalina.

jetty,resin,tomcat的差别在哪里,在线上服务应该选择哪一种WEB服务器?

Jetty

轻量级:Jetty以其轻量级特性著称,适合嵌入式应用或需要快速启动的应用。

模块化设计:Jetty采用高度模块化的架构,允许用户根据需求加载必要的组件,减少不必要的资源消耗。

灵活性与扩展性:支持多种协议(如HTTP/2, WebSocket),非常适合开发动态Web应用和服务端推送技术。

社区活跃度高:拥有强大的开源社区支持,易于定制和扩展。

Resin

商业支持与企业功能:Caucho Technology提供的Resin不仅有开源版本,还有Pro和Enterprise版本,提供高级特性和商业支持。

高性能:特别优化了处理大量并发请求的能力,适合需要高性能的应用场景。

Quercus PHP引擎:Resin自带Quercus,一个完全用Java编写的PHP解析器,可以运行PHP应用程序。

集成EJB支持:对于需要EJB的企业级应用来说是一个加分点。

Tomcat

广泛使用和支持:作为最流行的Servlet容器之一,Tomcat被广泛用于各种规模的应用部署,拥有庞大的用户基础和丰富的文档资源。

简单易用:配置相对简单,易于上手,适合大多数标准Web应用。

良好的兼容性:对Java EE标准的支持良好,能够很好地与其他Apache项目集成。

社区和生态系统强大:有大量的插件和工具可用于增强其功能。

maven常用的打包插件有哪些?有什么区别?如何使用 ?

maven-jar-plugin

用途:主要用于打包Java项目的输出为JAR文件。

使用示例:

<plugin>

  <groupId>org.apache.maven.plugins</groupId>

  <artifactId>maven-jar-plugin</artifactId>

  <version>3.2.0</version>

  <configuration>

    <!-- 配置项 -->

  </configuration>

</plugin>

maven-war-plugin

用途:专门用于Web应用项目,将其打包为WAR文件。

使用示例:

<plugin>

  <groupId>org.apache.maven.plugins</groupId>

  <artifactId>maven-war-plugin</artifactId>

  <version>3.3.1</version>

  <configuration>

    <!-- 配置项 -->

  </configuration>

</plugin>

maven-assembly-plugin

用途:允许创建你自定义格式的打包,支持从项目中收集、组装并打包任意结构的文件。非常适合需要高度定制化打包需求的场景。

使用示例:

<plugin>

  <groupId>org.apache.maven.plugins</groupId>

  <artifactId>maven-assembly-plugin</artifactId>

  <version>3.3.0</version>

  <configuration>

    <descriptorRefs>

      <descriptorRef>jar-with-dependencies</descriptorRef>

    </descriptorRefs>

  </configuration>

  <executions>

    <execution>

      <id>make-assembly</id>

      <phase>package</phase>

      <goals>

        <goal>single</goal>

      </goals>

    </execution>

  </executions>

</plugin>

maven-shade-plugin

用途:用于创建“uber” JAR(也称为fat JAR),即包含所有依赖的JAR包。特别适合于CLI应用程序或独立运行的应用程序。

使用示例:

<plugin>

  <groupId>org.apache.maven.plugins</groupId>

  <artifactId>maven-shade-plugin</artifactId>

  <version>3.2.4</version>

  <executions>

    <execution>

      <phase>package</phase>

      <goals>

        <goal>shade</goal>

      </goals>

    </execution>

  </executions>

</plugin>

War包是什么,为什么WEB服务通常打出来的都是War包?

标准化规范:遵循Java EE/Jakarta EE标准,所有Servlet容器(Tomcat/Jetty/Resin)均支持WAR部署。

便捷的部署方式:只需将WAR文件放入容器的webapps目录,自动解压并加载(如Tomcat的热部署)。

依赖隔离:依赖库(JAR)存放在WEB-INF/lib中,与容器和其他应用隔离,避免冲突。

兼容性:传统企业应用(如Struts、Spring MVC)通常基于WAR架构设计。

Put请求在Linux下的Tomcat或者是Resin中会收不到数据,怎么解决这个问题,原因是什么?为什么本地使用Jetty的时候往往是正常的?.

原因分析

服务器配置问题:不同的Web容器对HTTP请求的处理方式有所不同。例如,某些容器默认可能没有开启对特定HTTP方法(如PUT)的支持。

防火墙或安全设置:有时候,Linux服务器上的防火墙或其他安全软件可能会阻止非标准HTTP方法的数据传输。

权限问题:文件或目录权限设置不正确可能导致Web容器无法读取或写入数据。

客户端和服务端编码问题:确保客户端发送的数据格式与服务端期待的数据格式相匹配,特别是在处理二进制数据或者大文件上传时。

Servlet API版本差异:不同Web容器使用的Servlet API版本可能存在差异,导致处理请求的方式有所不同。

解决方案

检查Web容器配置:

对于Tomcat,确保web.xml中的servlet配置允许PUT请求,并且没有任何过滤器阻止这些请求。

在Resin中,类似地,检查相关的配置文件以确保正确支持PUT请求。

调整防火墙或安全设置:如果是因为防火墙或安全设置导致的问题,可以尝试暂时关闭它们进行测试,以确认是否为根本原因。如果是的话,需要适当配置防火墙规则来允许PUT请求。

验证权限设置:确保Web应用运行所需的文件和目录具有正确的访问权限。

对比环境差异:由于本地开发环境中使用Jetty工作正常,而生产环境下的Tomcat或Resin出现问题,应该仔细比较两个环境之间的差异,包括但不限于操作系统版本、Java版本、Web容器版本等。

调试与日志记录:启用更详细的日志记录来跟踪请求处理过程,以便更好地理解在哪个环节数据丢失了。

Content-type中的数据类型,在Spring MVC中都怎么接收数据?

application/json

这是最常见的类型之一,用于发送JSON格式的数据。

接收方式:可以使用@RequestBody注解将请求体中的JSON数据直接映射到一个Java对象。

@PostMapping("/example")

public ResponseEntity<String> exampleMethod(@RequestBody MyDataObject data) {

    // 处理接收到的数据

    return new ResponseEntity<>("Success", HttpStatus.OK);

}

其中MyDataObject是与请求体中的JSON结构相匹配的Java类。

2. application/xml

用于发送XML格式的数据。

接收方式:同样使用@RequestBody注解,但需要确保项目中包含支持XML转换的库,如Jackson XML扩展或JAXB。

@PostMapping(value = "/example", consumes = MediaType.APPLICATION_XML_VALUE)

public ResponseEntity<String> exampleMethod(@RequestBody MyXmlDataObject data) {

    // 处理接收到的数据

    return new ResponseEntity<>("Success", HttpStatus.OK);

}

3. application/x-www-form-urlencoded

用于HTML表单提交的数据。

接收方式:可以通过方法参数直接接收,使用@RequestParam获取单个参数值,或者用@ModelAttribute将一组参数绑定到一个对象。

@PostMapping("/example")

public ResponseEntity<String> exampleMethod(@ModelAttribute FormData formData) {

    // 处理接收到的数据

    return new ResponseEntity<>("Success", HttpStatus.OK);

}

4. multipart/form-data

通常用于上传文件时使用。

接收方式:利用@RequestParam注解来接收文件或其他表单数据。

@PostMapping("/upload")

public ResponseEntity<String> handleFileUpload(@RequestParam("file") MultipartFile file) {

    if (!file.isEmpty()) {

        // 处理文件上传

    }

    return new ResponseEntity<>("Uploaded successfully", HttpStatus.OK);

}

5. text/plain

纯文本格式。

接收方式:可以使用@RequestBody来接收纯文本内容。

@PostMapping(value = "/text", consumes = MediaType.TEXT_PLAIN_VALUE)

public ResponseEntity<String> receiveText(@RequestBody String body) {

    // 处理接收到的文本

    return new ResponseEntity<>(body, HttpStatus.OK);

}

什么是restful?rest的请求方法有哪些,有什么区别?

REST(Representational State Transfer) 是一种软件架构风格,用于指导如何设计网络应用程序,特别是Web服务。RESTful服务是遵循REST原则设计的服务,利用标准的HTTP方法来对资源进行操作,并强调无状态性。

常见的REST请求方法及其特点:

GET:用于从服务器获取资源。它是安全且幂等的,意味着不会修改资源的状态,并且多次相同请求的效果是一致的。

POST:用于向服务器提交数据,通常会导致在服务器上创建一个新的资源。它既不安全也不幂等,因为每次请求可能会创建不同的资源。

PUT:用于更新已存在的资源或创建指定URL的新资源。它是幂等的,无论请求多少次,结果都是相同的。但是,如果资源不存在,则可能根据实现不同而创建新资源。

DELETE:用于删除资源。它是幂等的,意味着多次相同DELETE请求的结果应该是一样的,即资源被删除。

PATCH:用于部分更新资源,与PUT不同的是,PATCH仅发送需要更改的部分而不是整个资源的完整表示。并非所有情况下都保证幂等。

HEAD:类似于GET请求,但只请求资源的头部信息,而不返回主体内容。常用于检查资源是否存在或者获取元数据。它是安全且幂等的。

OPTIONS:用于查询针对目标资源有效的通信选项。例如,允许客户端确定服务器支持哪些HTTP方法。它也是安全且幂等的。

明天计划的事情:(一定要写非常细致的内容)

遇到的问题:(遇到什么困难,怎么解决的)

收获:(通过今天的学习,学到了什么知识)



返回列表 返回列表
评论

    分享到