精华内容
下载资源
问答
  • tomcat部署java项目

    2021-02-26 10:16:29
    第一种:首先yum下载jdk-1.8.0包,然后修改/etc/profile.d/java.sh填入:export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.201.b09-2.el7_6.x86_64export JRE_HOME=$JAVA_HOME/jreexport PATH=$JAVA_HOME/...

    第一种:

    首先yum下载jdk-1.8.0包,然后修改/etc/profile.d/java.sh

    填入:

    export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.201.b09-2.el7_6.x86_64

    export JRE_HOME=$JAVA_HOME/jre

    export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

    source  /etc/proflie.d/java.sh使环境变量生效

    使用java -version验证安装成功

    然后推荐使用二进制安装tomcat9,去官网下载tomcat,如果没有特殊要求,那么不需要重新编译安装tomcat,比如:通过加载apache模块,否则直接解压后使用就可以

    修改默认端口8080成80端口。/usr/local/tomcat/conf/server.xml修改端口

    启动tomcat,/usr/local/tomcat/bin/catalina.sh start启动tomcat,打开浏览器可以看到tomcat界面

    到开源中国下载开源项目,jeesns项目,基于java开发的,旧版本是开源的,新版本闭源

    下载jeesns.zip后,解压包,把解压后的/jeesns/jeesns-web/database/jeesns.sql导入到数据库中

    把里面的jeesns.war复制到/usr/loca/tomcat/webapps/下面

    由于是自动安装,所以会在目录下面生成jeesns目录

    打开/usr/local/tomcat/webapps/jeesns/WEB-INF/classes/jeesns.properties修改数据库的账号密码

    重启tomcat服务器

    通过nginx的ip_hash实现tomcat集群session会话保持

    基于tomcat会话保持实现lnmt会话保持,注意在server.xml中不要加入这段代码,否则会报错且tomcat启动不成功,当删除这段代码后tomcat启动成功且能实现session会话保持(这段代码报错原因未知,后续知晓再更新)

    参考:http://www.cnblogs.com/along21/p/8024719.html#auto_id_4

    展开全文
  • java篇-(java使用内嵌Tomcat开发javaWeb项目-中级篇)

    千次阅读 热门讨论 2021-04-30 21:06:33
    java使用内嵌tomcat开发web项目写在前面在pom.xml里面加入spring相关依赖编写spring相关配置及代码java语言添加spring的DispatcherServlet,并在main方法里面调用添加spring-mvc.xml根据配置文件,创建对应测试文件...

    写在前面

    这一篇博客,是在java篇-(java使用内嵌Tomcat开发javaWeb项目-初级篇)这篇博客之上进行扩展,整合spring mvc,让spring来管理路由关系
    java篇-(java使用内嵌Tomcat开发javaWeb项目-初级篇)
    这里删除初级篇文章里面的部分代码,只保留如下结构
    在这里插入图片描述
    EmbedTomcatApplication.java

    package com.lhstack.embed;
    
    import org.apache.catalina.Context;
    import org.apache.catalina.startup.Tomcat;
    import org.apache.tomcat.util.descriptor.web.FilterDef;
    import org.apache.tomcat.util.descriptor.web.FilterMap;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.net.URL;
    import java.util.Objects;
    
    /**
     * @author lhstack
     */
    public class EmbedTomcatApplication {
        public static void main(String[] args) throws Exception {
            int port = 8080;
            Tomcat tomcat = new Tomcat();
            tomcat.setPort(port);
            tomcat.getConnector().setPort(port);
            URL resource = Thread.currentThread().getContextClassLoader().getResource("");
            Context context = tomcat.addContext("/", Objects.nonNull(resource) ? resource.getPath() : null);
            addCharacterFilter(context,"UTF-8");
            //启动tomcat
            tomcat.start();
    
        }
    
        private static void addCharacterFilter(Context context, String encoding) {
            //定义filter
            FilterDef filterDef = new FilterDef();
            filterDef.setFilterName("CharacterEncodingFilter");
            filterDef.setFilter((req, res, chain) -> {
    
                if(req instanceof HttpServletRequest){
                    req.setCharacterEncoding(encoding);
                }
                if(res instanceof HttpServletResponse){
                    res.setCharacterEncoding(encoding);
                }
                chain.doFilter(req,res);
            });
    
            //定义filter映射
            FilterMap filterMap = new FilterMap();
            filterMap.setFilterName("CharacterEncodingFilter");
            filterMap.addURLPattern("/*");
    
            //添加filter
            context.addFilterDef(filterDef);
            context.addFilterMap(filterMap);
        }
    }
    
    

    EmbedTomcatApplication.kt

    package com.lhstack.embed
    
    import org.apache.catalina.Context
    import org.apache.catalina.startup.Tomcat
    import org.apache.tomcat.util.descriptor.web.FilterDef
    import org.apache.tomcat.util.descriptor.web.FilterMap
    import java.util.*
    import javax.servlet.Filter
    import javax.servlet.http.HttpServletRequest
    import javax.servlet.http.HttpServletResponse
    
    fun main() {
        val port = 9090
        val tomcat = Tomcat()
        tomcat.setPort(port)
        tomcat.connector.port = port
        val resource = Thread.currentThread().contextClassLoader.getResource("")
        val context = tomcat.addContext("/", if(Objects.nonNull(resource)) resource!!.file else null  )
        addCharacterFilter(context,"UTF-8")
        tomcat.start()
    }
    
    fun addCharacterFilter(context: Context?, encoding: String) {
        val filterDef = FilterDef()
        filterDef.filterName = "CharacterFilterEncoding"
        filterDef.filter = Filter { req, res, chain ->
            if(req is HttpServletRequest){
                req.characterEncoding = encoding
            }
            if(res is HttpServletResponse){
                res.characterEncoding = encoding
            }
            chain.doFilter(req,res)
        }
    
        val filterMap = FilterMap()
    
        filterMap.addURLPattern("/*")
        filterMap.filterName = "CharacterFilterEncoding"
    
        context?.addFilterDef(filterDef)
        context?.addFilterMap(filterMap)
    }
    
    

    在pom.xml里面加入spring相关依赖

    在这里插入图片描述
    pom.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xmlns="http://maven.apache.org/POM/4.0.0"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <artifactId>embed-tomcat-example</artifactId>
        <groupId>com.lhstack</groupId>
        <version>0.0.1</version>
        <packaging>jar</packaging>
    
        <name>embed-tomcat-example</name>
    
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <kotlin.code.style>official</kotlin.code.style>
            <kotlin.compiler.jvmTarget>11</kotlin.compiler.jvmTarget>
            <tomcat.embed.version>9.0.31</tomcat.embed.version>
            <thymeleaf.version>3.0.12.RELEASE</thymeleaf.version>
            <spring.version>5.3.5</spring.version>
        </properties>
    
        <dependencies>
    
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
                <version>${spring.version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.thymeleaf</groupId>
                <artifactId>thymeleaf</artifactId>
                <version>${thymeleaf.version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.jetbrains.kotlin</groupId>
                <artifactId>kotlin-test-junit</artifactId>
                <version>1.4.10</version>
                <scope>test</scope>
            </dependency>
    
            <dependency>
                <groupId>org.apache.tomcat.embed</groupId>
                <artifactId>tomcat-embed-core</artifactId>
                <version>${tomcat.embed.version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.jetbrains.kotlin</groupId>
                <artifactId>kotlin-stdlib-jdk8</artifactId>
                <version>1.4.10</version>
            </dependency>
        </dependencies>
    
        <repositories>
            <repository>
                <id>mavenCentral</id>
                <url>https://repo1.maven.org/maven2/</url>
            </repository>
        </repositories>
    
        <build>
            <sourceDirectory>src/main/kotlin</sourceDirectory>
            <testSourceDirectory>src/test/kotlin</testSourceDirectory>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.8.1</version>
                    <configuration>
                        <target>11</target>
                        <source>11</source>
                        <encoding>UTF-8</encoding>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.jetbrains.kotlin</groupId>
                    <artifactId>kotlin-maven-plugin</artifactId>
                    <version>1.4.10</version>
                    <executions>
                        <execution>
                            <id>compile</id>
                            <phase>compile</phase>
                            <goals>
                                <goal>compile</goal>
                            </goals>
                        </execution>
                        <execution>
                            <id>test-compile</id>
                            <phase>test-compile</phase>
                            <goals>
                                <goal>test-compile</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>2.22.2</version>
                </plugin>
                <plugin>
                    <artifactId>maven-failsafe-plugin</artifactId>
                    <version>2.22.2</version>
                </plugin>
            </plugins>
        </build>
    </project>
    

    编写spring相关配置及代码

    java语言

    添加spring的DispatcherServlet,并在main方法里面调用

    在这里插入图片描述

    private static void addDispatcherServlet(Context context) {
            DispatcherServlet dispatcherServlet = new DispatcherServlet();
            dispatcherServlet.setContextConfigLocation("classpath:spring-*.xml");
            Wrapper servlet = Tomcat.addServlet(context, "DispatcherServlet", dispatcherServlet);
            //跟着tomcat一起启动
            servlet.setLoadOnStartup(1);
            servlet.addMapping("/");
        }
    

    添加spring-mvc.xml

    在这里插入图片描述

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
           xmlns:context="http://www.springframework.org/schema/context"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
        <!--  开启注解驱动  -->
        <mvc:annotation-driven />
        <!--  添加静态资源映射  -->
        <mvc:resources mapping="/static/**" location="classpath:/static/" />
        <context:component-scan base-package="com.lhstack.embed.controller" />
    </beans>
    

    根据配置文件,创建对应测试文件

    1.在static目录下面创建index.html
    在这里插入图片描述

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    this is static directory html file
    </body>
    </html>
    

    2.在controller包下面创建HelloController.java
    在这里插入图片描述

    package com.lhstack.embed.controller;
    
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    /**
     * @author lhstack
     */
    @RequestMapping
    @RestController
    public class HelloController {
    
        @GetMapping
        public String hello(){
            return "hello world";
        }
    }
    
    

    启动项目,通过浏览器访问

    在这里插入图片描述
    访问controller接口
    在这里插入图片描述
    访问静态资源
    在这里插入图片描述

    使用kotlin语言

    添加DispatcherServlet

    在这里插入图片描述

    启动项目,使用浏览器访问

    在这里插入图片描述
    访问controller接口
    在这里插入图片描述
    访问静态资源
    在这里插入图片描述

    添加json序列化支持

    pom文件里面添加fastjson依赖

    在这里插入图片描述

    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>fastjson</artifactId>
      <version>${fastjson.version}</version>
    </dependency>
    

    在配置文件里面添加fastjson序列化支持

    spring-mvc.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
           xmlns:context="http://www.springframework.org/schema/context"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
        <!--  开启注解驱动  -->
        <mvc:annotation-driven>
            <mvc:message-converters>
                <bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
                    <property name="defaultCharset" value="UTF-8" />
                    <property name="fastJsonConfig">
                        <bean class="com.alibaba.fastjson.support.config.FastJsonConfig">
                            <property name="charset" value="UTF-8" />
                            <property name="dateFormat" value="yyyy-MM-dd HH:mm:ss" />
                            <property name="writeContentLength" value="true" />
                        </bean>
                    </property>
                    <property name="supportedMediaTypes">
                        <array>
                            <value>application/json</value>
                            <value>application/json;charset=utf-8</value>
                        </array>
                    </property>
                </bean>
            </mvc:message-converters>
        </mvc:annotation-driven>
        <!--  添加静态资源映射  -->
        <mvc:resources mapping="/static/**" location="classpath:/static/" />
        <context:component-scan base-package="com.lhstack.embed.controller" />
    </beans>
    

    在controller添加复杂对象输出

    在这里插入图片描述

    package com.lhstack.embed.controller;
    
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import java.util.Date;
    import java.util.HashMap;
    import java.util.Map;
    
    /**
     * @author lhstack
     */
    @RequestMapping
    @RestController
    public class HelloController {
    
        @GetMapping
        public String hello(){
            return "hello world";
        }
    
        @GetMapping("map")
        public Map<String,Object> map(){
            Map<String,Object> result = new HashMap<>();
            result.put("currentTime",new Date());
            result.put("msg","hello world");
            result.put("number",1);
            result.put("map",System.getenv());
            return result;
        }
    }
    
    

    启动项目,通过浏览器访问

    在这里插入图片描述
    访问controller接口
    在这里插入图片描述

    添加validation验证器

    添加pom依赖

    在这里插入图片描述
    pom.xml,这里内容太多了,我只复制了使用的部分

    	...
    	...
    	<properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <kotlin.code.style>official</kotlin.code.style>
            <kotlin.compiler.jvmTarget>11</kotlin.compiler.jvmTarget>
            <tomcat.embed.version>9.0.31</tomcat.embed.version>
            <thymeleaf.version>3.0.12.RELEASE</thymeleaf.version>
            <spring.version>5.3.5</spring.version>
            <fastjson.version>1.2.73</fastjson.version>
            <validation-api.version>2.0.1.Final</validation-api.version>
            <hibernate-validator.version>6.2.0.Final</hibernate-validator.version>
            <javax.el-api.version>3.0.0</javax.el-api.version>
        </properties>
    
        <dependencies>
    
            <!-- https://mvnrepository.com/artifact/org.glassfish/javax.el -->
            <dependency>
                <groupId>org.glassfish</groupId>
                <artifactId>javax.el</artifactId>
                <version>${javax.el-api.version}</version>
            </dependency>
            
            <dependency>
                <groupId>javax.el</groupId>
                <artifactId>javax.el-api</artifactId>
                <version>${javax.el-api.version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.hibernate.validator</groupId>
                <artifactId>hibernate-validator</artifactId>
                <version>${hibernate-validator.version}</version>
            </dependency>
    
            <dependency>
                <groupId>javax.validation</groupId>
                <artifactId>validation-api</artifactId>
                <version>${validation-api.version}</version>
            </dependency>
            ...
            ...
    

    配置validator支持

    在spring-mvc.xml里面配置validator支持

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
           xmlns:context="http://www.springframework.org/schema/context"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
        <!--  配置validator  -->
        <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
            <property name="providerClass" value="org.hibernate.validator.HibernateValidator" />
        </bean>
        <!--  开启注解驱动,并使用validator  -->
        <mvc:annotation-driven validator="validator">
            <mvc:message-converters>
                <bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
                    <property name="defaultCharset" value="UTF-8" />
                    <property name="fastJsonConfig">
                        <bean class="com.alibaba.fastjson.support.config.FastJsonConfig">
                            <property name="charset" value="UTF-8" />
                            <property name="dateFormat" value="yyyy-MM-dd HH:mm:ss" />
                            <property name="writeContentLength" value="true" />
                        </bean>
                    </property>
                    <property name="supportedMediaTypes">
                        <array>
                            <value>application/json</value>
                            <value>application/json;charset=utf-8</value>
                        </array>
                    </property>
                </bean>
            </mvc:message-converters>
        </mvc:annotation-driven>
        <!--  添加静态资源映射  -->
        <mvc:resources mapping="/static/**" location="classpath:/static/" />
        <context:component-scan base-package="com.lhstack.embed.controller" />
    </beans>
    

    创建entity,添加验证注解

    在这里插入图片描述
    Message.java

    package com.lhstack.embed.entity;
    
    import javax.validation.constraints.NotEmpty;
    
    /**
     * @author lhstack
     */
    public class Message {
    
        @NotEmpty(message = "msg不能为空")
        private String msg;
    
        public void setMsg(String msg) {
            this.msg = msg;
        }
    
        public String getMsg() {
            return msg;
        }
    
        @Override
        public String toString() {
            return "Message{" +
                    "msg='" + msg + '\'' +
                    '}';
        }
    }
    
    

    在controller添加对应接口

    在这里插入图片描述

    package com.lhstack.embed.controller;
    
    import com.lhstack.embed.entity.Message;
    import org.springframework.validation.annotation.Validated;
    import org.springframework.web.bind.annotation.*;
    
    import java.util.Date;
    import java.util.HashMap;
    import java.util.Map;
    
    /**
     * @author lhstack
     */
    @RequestMapping
    @RestController
    public class HelloController {
    
    
        @PostMapping("msg")
        public Message message(@RequestBody @Validated Message message){
            return message;
        }
    
        @GetMapping
        public String hello(){
            return "hello world";
        }
    
        @GetMapping("map")
        public Map<String,Object> map(){
            Map<String,Object> result = new HashMap<>();
            result.put("currentTime",new Date());
            result.put("msg","hello world");
            result.put("number",1);
            result.put("map",System.getenv());
            return result;
        }
    }
    
    

    启动项目,使用postman测试接口

    只传空对象,然后报了400的错误,这里没法直接看到异常,后面加入异常拦截器之后,可以处理
    在这里插入图片描述
    传了msg字段
    在这里插入图片描述

    添加log4j2作为日志支持

    添加pom依赖

    在这里插入图片描述

    这里同样也只复制部分

    	...
    	<properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <kotlin.code.style>official</kotlin.code.style>
            <kotlin.compiler.jvmTarget>11</kotlin.compiler.jvmTarget>
            <tomcat.embed.version>9.0.31</tomcat.embed.version>
            <thymeleaf.version>3.0.12.RELEASE</thymeleaf.version>
            <spring.version>5.3.5</spring.version>
            <fastjson.version>1.2.73</fastjson.version>
            <validation-api.version>2.0.1.Final</validation-api.version>
            <hibernate-validator.version>6.2.0.Final</hibernate-validator.version>
            <javax.el-api.version>3.0.0</javax.el-api.version>
            <slf4j.version>1.7.30</slf4j.version>
            <log4j2.version>2.14.1</log4j2.version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-api</artifactId>
                <version>${log4j2.version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-core</artifactId>
                <version>${log4j2.version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
                <version>${slf4j.version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
                <version>${slf4j.version}</version>
            </dependency>
        ...
    

    添加log4j2.xml文件,配置日志

    在这里插入图片描述

    <?xml version="1.0" encoding="UTF-8"?>
    <Configuration status="warn" name="MyApp" packages="">
        <Appenders>
            <!--        控制台输出debug级别以上的日志-->
            <Console name="DebugConsole" target="SYSTEM_OUT">
                <ThresholdFilter level="DEBUG" onMatch="ACCEPT" onMismatch="DENY"/>
                <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
            </Console>
            <!--        控制台输出info级别以上的日志-->
            <Console name="InfoConsole" target="SYSTEM_OUT">
                <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
                <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
            </Console>
    
            <!--        info-->
            <RollingRandomAccessFile name="InfoAppendLogger" fileName="logs/info/info.log"
                                     filePattern="logs/info/%d{yyyy-MM-dd}-%i.log">
                <PatternLayout>
                    <Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
                </PatternLayout>
                <LevelMatchFilter level="INFO" />
                <Policies>
                    <OnStartupTriggeringPolicy />
                    <!--                以日志的pattern决定,如果后面是d,则interval是天,如果是h,则是小时,依次类推-->
                    <TimeBasedTriggeringPolicy modulate="true" interval="1"/>
                    <!--                当日志达到多大时,才进行切割-->
                    <SizeBasedTriggeringPolicy size="50 MB"/>
                </Policies>
    
                <DefaultRolloverStrategy>
                    <Delete basePath="logs/info/" maxDepth="1">
                        <IfFileName glob="*.log"/>
                        <IfLastModified age="7d"/>
                    </Delete>
                </DefaultRolloverStrategy>
            </RollingRandomAccessFile>
    
            <Async name="AsyncInfoLoggerAppender">
                <AppenderRef ref="InfoAppendLogger"/>
            </Async>
    
            <!--        error-->
            <RollingRandomAccessFile name="ErrorAppendLogger" fileName="logs/error/error.log"
                                     filePattern="logs/error/%d{yyyy-MM-dd}-%i.log">
                <PatternLayout>
                    <Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
                </PatternLayout>
                <ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/>
                <Policies>
                    <OnStartupTriggeringPolicy />
                    <TimeBasedTriggeringPolicy modulate="true" interval="1"/>
                    <SizeBasedTriggeringPolicy size="50 MB"/>
                </Policies>
                <DefaultRolloverStrategy>
                    <Delete basePath="logs/error/" maxDepth="2">
                        <IfFileName glob="*.log"/>
                        <IfLastModified age="7d"/>
                    </Delete>
                </DefaultRolloverStrategy>
            </RollingRandomAccessFile>
            <Async name="AsyncErrorLoggerAppender">
                <AppenderRef ref="ErrorAppendLogger"/>
            </Async>
    
            <!--        warn-->
            <RollingRandomAccessFile name="WarnAppendLogger" fileName="logs/warn/warn.log"
                                     filePattern="logs/warn/%d{yyyy-MM-dd}-%i.log">
                <PatternLayout>
                    <Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
                </PatternLayout>
                <LevelMatchFilter level="WARN"/>
                <Policies>
                    <OnStartupTriggeringPolicy />
                    <TimeBasedTriggeringPolicy modulate="true" interval="1"/>
                    <SizeBasedTriggeringPolicy size="50 MB"/>
                </Policies>
                <DefaultRolloverStrategy>
                    <Delete basePath="logs/warn/" maxDepth="2">
                        <IfFileName glob="*.log"/>
                        <IfLastModified age="7d"/>
                    </Delete>
                </DefaultRolloverStrategy>
            </RollingRandomAccessFile>
            <Async name="AsyncWarnLoggerAppender">
                <AppenderRef ref="WarnAppendLogger"/>
            </Async>
    
            <!--        debug-->
            <RollingRandomAccessFile name="DebugAppendLogger" fileName="logs/debug/debug.log"
                                     filePattern="logs/debug/%d{yyyy-MM-dd}-%i.log">
                <PatternLayout>
                    <Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
                </PatternLayout>
                <LevelMatchFilter level="DEBUG"/>
                <Policies>
                    <OnStartupTriggeringPolicy />
                    <!--                已日志的pattern决定,如果后面是d,则interval是天,如果是h,则是小时,依次类推-->
                    <TimeBasedTriggeringPolicy modulate="true" interval="1"/>
                    <!--                当日志达到多大时,才进行切割-->
                    <SizeBasedTriggeringPolicy size="50 MB"/>
                </Policies>
    
                <DefaultRolloverStrategy>
                    <Delete basePath="logs/debug/" maxDepth="2">
                        <IfFileName glob="*.log"/>
                        <IfLastModified age="7d"/>
                    </Delete>
                </DefaultRolloverStrategy>
            </RollingRandomAccessFile>
    
            <Async name="AsyncDebugLoggerAppender">
                <AppenderRef ref="DebugAppendLogger"/>
            </Async>
    
        </Appenders>
        <Loggers>
    
            <Root level="debug">
                <AppenderRef ref="AsyncInfoLoggerAppender"/>
                <AppenderRef ref="AsyncErrorLoggerAppender"/>
                <AppenderRef ref="AsyncWarnLoggerAppender"/>
    <!--            <AppenderRef ref="AsyncDebugLoggerAppender"/>-->
                <AppenderRef ref="InfoConsole"/>
            </Root>
        </Loggers>
    </Configuration>
    

    启动项目,查看日志情况

    启动之后,控制台情况
    在这里插入图片描述
    访问接口,并且输入验证失败的数据
    在这里插入图片描述
    输出了验证失败的日志信息
    在这里插入图片描述

    添加异常处理器

    在controller包下面创建ExceptionHandlerController.java

    在这里插入图片描述
    ExceptionHandlerController.java

    package com.lhstack.embed.controller;
    
    import org.springframework.web.bind.MethodArgumentNotValidException;
    import org.springframework.web.bind.annotation.ExceptionHandler;
    import org.springframework.web.bind.annotation.RestControllerAdvice;
    
    import java.util.Map;
    import java.util.stream.Collectors;
    
    /**
     * @author lhstack
     * 异常处理器
     */
    @RestControllerAdvice
    public class ExceptionHandlerController {
    
        @ExceptionHandler(value = {Exception.class,RuntimeException.class})
        public Map<String,Object> exceptionHandler(Exception e){
            e.printStackTrace();
            return Map.of("status",500,"success",false,"message",e.getMessage());
        }
    
        @ExceptionHandler(value = MethodArgumentNotValidException.class)
        public Map<String,Object> methodArgumentNotValidExceptionHandler(MethodArgumentNotValidException e){
            String message = e.getBindingResult().getFieldErrors()
                    .stream().map(item -> item.getField() + "=" + item.getDefaultMessage())
                    .collect(Collectors.joining(","));
            return Map.of("status",500,"success",false,"message",message);
        }
    
    }
    
    

    在HelloController.java中添加异常接口

    在这里插入图片描述

     	@GetMapping("e")
        public void exception(){
            throw new RuntimeException("this is exception throw");
        }
    

    启动项目,测试异常handler

    在这里插入图片描述
    测试空消息,测试验证失败
    在这里插入图片描述
    测试异常接口
    在这里插入图片描述

    展开全文
  • 一、将项目文件夹或war包直接拷贝到tomcat的webapps下二、在Tomcat\conf\Catalina\localhost下建立xml文件修改内容如下其中:path为http://localhost:8080/后的项目名docBase为你编辑项目的地址workDir为tomcat编译...

    一、将项目文件夹或war包直接拷贝到tomcat的webapps下

    二、在Tomcat\conf\Catalina\localhost下建立xml文件

    修改内容如下

    其中:

    path为http://localhost:8080/后的项目名

    docBase为你编辑项目的地址

    workDir为tomcat编译jsp存放的地址

    如果用eclipse+tomcat,记得配置context directory指向xml所在文件夹,这种context片断提供了一种便利的方法来部署web应用,不需要编辑server.xml

    三、在Tomcat的server.xml文件中Host节点下添加:

    注意点:

    tomcat识别web项目主要通过项目下的WEB-INF文件夹,我们可以得出一个标准的WEB-INF结构

    webproject

    -WEB-INF

    -classes

    -lib

    web.xml

    classes文件夹下存放src编译后的.class文件,lib里面存放项目需要用到的jar包(如果没有,启动tomcat的时候控制台会提示找不到相关类)。

    知道这些就对eclipse或者myeclipse的项目部署理解的更轻松了。

    展开全文
  • 很多初学,尤其自学JavaWeb的朋友首次在eclipse下配置tomcat时,总会有种难下手的感觉,在此,通过图文解说的方法,最直观的向大家演示一遍该配置过程。第一部分:eclipse环境下如何配置tomcat1.下载并成功安装...

    很多初学,尤其自学JavaWeb的朋友首次在eclipse下配置tomcat时,总会有种难下手的感觉,在此,通过图文解说的方法,最直观的向大家演示一遍该配置过程。

    第一部分:eclipse环境下如何配置tomcat

    1.下载并成功安装Eclipse和Tomcat

    2.打开Eclipse,单击“window”菜单,选择下方的“Preferences” 。

    87c64ddeaf79b249643734d92b5c8e30.png

    3. 点击 Add 添加Tomcat。

    4c8813794972781ce95ae70bd3b19b8a.png

    4. 选中自己安装的tomcat路径。

    25a8083ace4b8105d13b1d97d81e79f3.png

    5. 选择jdk 版本。

    d37d2e27bcb7b28c087e672a02507c1e.png

    6. 选择自己的jdk版本。

    1bd2fa7899f0b86e278fff5663d18e68.png

    7. 点击  add添加。

    a852135a27804b1c60c4cd8d82f9b8d5.png

    8. 选择jdk 安装路径。

    519532ffaf671a77a3defc15f3711bf7.png

    9. 选择完成。自动添加,然后点击完成按钮。

    30fd2ba300568022df624065529cb531.png

    0c879eea951355dbcb83ed07e9f13d1e.png

    10. 选中刚刚我们安装的jre。

    d786985b46ebb811d3fdbf35ff0d153f.png

    11. 完成。

    767bc23085f0a4b0602c606be9cf5c5d.png

    第二部分: 把项目部署到Tomcat服务器上

    1. 新建项目。打开eclipse,菜单栏下,File--New--Other...,打开后找到web--Dynamic Web Project,然后单击Next。

    d092f1783ca05e40c950d9bd216e4052.png

    Project name:TomcatTest

    Target runtime:点 击右侧“New Runtime”,选择自己用的服务器,这里我们选择:Apache -- Apache Tomcat v7.0,选择后,单击"Next",出现一项:Tomcat installation directory:,在该处找到你解压的Tomcat7的位置。然后单击"Finish"。

    Configuration:点击右侧“Modify”,可以进行适当的配置,但根据我初学时候的经验,完全使用默认的就行了,不要去动里面的东西。等用到里面的配置时,你已经算是个老鸟了。

    151239177e625e0f1b48a420314556df.png

    33967166e10b12797f3c14841c9518a0.png

    2. 注意事项。

    *如果需要和myeclipse里面的目录相同,那么可以更改目录的名字。

    *如果要生成xml文件,那么可以在选项上打上勾。(最好勾上)

    3d6e6e0da3fcbe765fbd33c126db4e40.png

    3. 效果如下:

    835882c661083eedb0840ea995e6b44a.png

    4. 让Tomcat服务器显示在控制台上。

    721ee0881ec160fe6a971e22c1a6ce21.png

    8eb81effc99d140148c54401b6d5b3f5.png

    5. 选择Tomcat版本 。

    a1949eae2935ac0987b5c8d1c38c2968.png

    6. 添加我们的项目。

    a6c6e61c58162af830960f1a4f9c4002.png

    7. 选中点击add,或是双击都可以添加到右边。

    c3b9d1ded89c30beed7350b3d4a95f13.png

    8. 点击小虫子启动。

    00c40e38ebc69a89446661939e56c711.png

    9 . 直接启动访问 :http://localhost:8080/TomcatTest/

    会发现会报404 的错误。

    ** 是因为我们没有添加主页。下面添加的内容。

    248006baccc0876d90c108df5574f043.png

    源码如下:

    欢迎页面

    再一次来访问该链接:http://localhost:8080/TomcatTest/

    效果如下:

    7d9be64e4c7a488b2c2f1dbe3410d9d2.png

    完成。可能排版有点乱,但是希望能帮助大家。

    注意如果是多个项目,那么需要加入以来项目的里面。

    部署程序集(Web Deployment Assembly)

    c57d1eb0b1e4d1e6468efd1116ebc131.png

    2ee7cd1ea84d38b095b4c340cf002a0d.png

    展开全文
  • java.lang.NoSuchMethodException异常解决 ** 1、检查action层是否存在该方法 2、检查该方法是否为 public 3、检查此方法是否传了参数 action的方法有参数 4、Struts.xml文件中的action 5、检查jar包 6、清理缓存,...
  • 点击运行项目时显示 a java exception has occurred.'starting tomcat v9.0 server at localhost' has oncountered a problem.server tomcat v9.0 server at localhost failed tostart.并显示以下两个弹框同时控制台...
  • Tomcat中部署Java Web应用程序有两种方式:静态部署和动态部署。在下文中$CATALINA_HOME指的是Tomcat根目录。一、静态部署静态部署指的是我们在服务器启动之前部署我们的程序,只有当服务器启动之后,我们的Web...
  • IDEA创建一个传统JAVA WEB项目(不使用maven构建)方法一File --> NEW --> Project --> Java (勾选Web Application)方法二File --> NEW --> Project --> Java Enterprise(勾选Web Application)IDEA...
  • 在linux下用tomcat部署java web项目的过程与注意事项一.安装JDK到http://www.oracle.com/technetwork/java/javase/downloads/index.html下载Java SE 6 Update 27根据操作系统选择Linux x64 - RPM Installer或Linux ...
  • 写好代码后,直接war到tomcat就可以自动加载其内容,可以不使用web.xml配置了,直接在这些 实现类中加入 filter,servlet 等等。 package com.xy.annotaion.handler.servlet3.initializer; import javax.servlet....
  • 一、静态部署1、直接将web项目文件件拷贝到webapps 目录中Tomcat的Webapps目录是Tomcat默认的应用目录,当服务器启动时,会加载所有这个目录下的应用。所以可以将JSP程序打包成一个 war包放在目录下,服务器会自动...
  • 创建Web项目1、File -> New Project,进入创建项目窗口2、在WEB-INF目录下点击右键,New -> Directory,创建classes和lib两个目录3、File -> Project Structure,进入 Project Structure窗口4、点击Modules...
  • 选择Tomcat版本,我这里选的10最新版,Tomcat版本要与dynamic web module(版本4)的版本匹配 点击Next,本地没有对应版本Tomcat,点Download下载(右下角显示进度, 完成后点击Finishes。然后打开Server界面,...
  • JavaWeb项目部署到tomcat服务之后设置不需要输入项目名称即可访问?Tomcat部署web项目,如何直接通过域名访问,不加项目名称?怎么不用输入工程名就可以直接访问改web工程?Tomcat下访问Web项目,jsp项目不需要输入项目...
  • Java Tomcat 的日志文件说明详解发布时间:2019-09-22编辑:星王原创阅读(574)tomcat提供的日志机制为我们提供了维护便利,在这里对log日志文件一些用处加入说明。一、位置:tomcat的日志在tomcat文件目录的log目录下...
  • 1、你怎样给tomcat调优JVM参数调优-Xms表示JVM初始化堆的大小,-Xmx表示JVM堆的最大值。这两个值的大小一般根据需要进行设 置。当应用程序需要的内存超出堆的最大值时虚拟机就会提示内存溢出, 并且导致应用服务崩溃...
  • 我用的公司电脑,win7 64位。软件需要找到适合自己操作系统的东西配置。第一步下载并安装jdk....(不能都安装在java文件夹的根目录下,jdk和jre安装在同一文件夹会出错)。路径一般默认即可,也可以更改不同的...
  • 这两天一直在研究java web项目的发布,总是遇到各种各样的bug,也在不断的解决这些问题,现在就来总结一下这两天的收获。开发环境:IDEA 2018.2.2流程:首先创建web 项目:按照图示勾选即可自定义项目名称和工程路径...
  • 一、前提条件1、1查看linux的系统版本:[root@llyLinux ~]# uname -aLinux llyLinux 2.6.32-573.el6.x86_64 #1 SMP Thu Jul 23 15:44:03 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux1、2创建jdk和tomcat软件的存放路径...
  • 通过本篇文章可获得以下知识如何新建一个JavaWeb项目如何在JavaWeb项目中配置Tomcat如何创建一个最基本的HelloWorld Serverlet1、如何新建一个JavaWeb项目这里需要预先下载Tomcat,并且配置好环境变量选中Java ...
  • CentOS 7 下安装部署java+tomcat+mysql一.Java1.1先检查是否有自带jdkrpm -qa | grep -i java若有输出,则删除# rpm -e --nodeps 后面跟jdk的文件名1.2 java配置1、进入或新建到一个目录,用于存放下载的java包#cd ...
  • 如何在Eclipse中将应用程序添加到Tomcat?我有一个使用Maven构建的Web应用程序。大多数时候,我使用Intellij IDEA构建应用程序,但是现在我想在Eclipse中导入该应用程序以在此IDE中看到内容。mvn eclipse:eclipse...
  • 新建一个dynamic web项目: 客户端(Web主页)代码: 1 <%@ page language="java"import="java.util.*"pageEncoding="UTF-8"%> 2 ();4 StringbasePath=request.getScheme()+"://"+request.getServerName()+":"+...
  • 在linux下用tomcat部署java web项目的过程与注意事项(原创)一.安装JDK到http://www.oracle.com/technetwork/java/javase/downloads/index.html下载JavaSE 6 Update 27根据操作系统选择Linux x64 - RPM Installer或...
  • 发现内置Tomcat打开一个SpringBoot项目,我们发现,有tomcat的依赖 接下来让我们把tomcat的依赖找到 首先找到spring-boot-starter-web 点进去之后我们看到他用的是2.1.0版本,我们继续点击去 果然在里面找到tomcat的...
  • 这篇文章分为好几部分,先看一下目录,然后选择你需要看哪一部分:文章目录一、在IDEA中创建一个javaweb项目的步骤二、在IDEA中部署Tomcat的步骤三、项目部署到Tomcat服务器,并直接用浏览器访问的方法方式一方式二...
  • 查看TomcatJVM内存占用:TOMCAT运行时,实时监控当前应用JVM的使用情况;可以利用Tomcat自带的应用manager查看详情。首先,确认服务目录webapps下有manager应用其次,需要创建角色manager和对应的用户,修改/conf/...
  • (修改类不用重启--热加载)在使用Eclipse+Tomcat开发Java项目的时候常常会碰到这样的情况,已修改Java文件Tomcat就会自动重启,接下来就是漫长的等待服务重启完毕。那其实大多数的Java文件修改是没有必要重启服务的,...
  • IDEA中Tomcat设置说明 Tomcat最好使用干净的版本 不同的版本适配不同的JDK 设置Tomcat基本信息 加载项目(war和war exploed模式简单说明) 配置完项目后警告消失 应用后启动 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 82,183
精华内容 32,873
关键字:

tomcat加入java项目

java 订阅