2828< meta property ="og:description " content ="Tomcat JRE报错 一般教程会让我们配置JAVA_HOME和JRE_HOME,然后启动Tomcat; 然而,在JDK9以后,就不默认包含JRE了。 此时,我们使用命令 jlink --module-path jmods --add-modules java.desktop --output jre 生成一个JRE后,启动Tomcat,就会报错: WARNING: Unknown modu ">
2929< meta property ="og:locale " content ="zh_CN ">
3030< meta property ="article:published_time " content ="2024-11-27T16:00:00.000Z ">
31- < meta property ="article:modified_time " content ="2024-11-28T02:36:02.369Z ">
31+ < meta property ="article:modified_time " content ="2024-11-29T03:19:54.427Z ">
3232< meta property ="article:author " content ="SIMULEITE ">
3333< meta property ="article:tag " content ="笔记 ">
3434< meta name ="twitter:card " content ="summary ">
138138 < div class ="sidebar-panel-container ">
139139 <!--noindex-->
140140 < div class ="post-toc-wrap sidebar-panel ">
141- < div class ="post-toc animated "> < ol class ="nav "> < li class ="nav-item nav-level-1 "> < a class ="nav-link " href ="#tomcat "> < span class ="nav-text "> Tomcat</ span > </ a > < ol class ="nav-child "> < li class ="nav-item nav-level-2 "> < a class ="nav-link " href ="#jre%E6%8A%A5%E9%94%99 "> < span class ="nav-text "> JRE报错</ span > </ a > </ li > </ ol > </ li > < li class ="nav-item nav-level-1 "> < a class ="nav-link " href ="#cookies "> < span class ="nav-text "> Cookies</ span > </ a > < ol class ="nav-child "> < li class ="nav-item nav-level-2 "> < a class ="nav-link " href ="#remember-me "> < span class ="nav-text "> Remember-me</ span > </ a > </ li > < li class ="nav-item nav-level-2 "> < a class ="nav-link " href ="#session "> < span class ="nav-text "> Session</ span > </ a > </ li > </ ol > </ li > < li class ="nav-item nav-level-1 "> < a class ="nav-link " href ="#servlet "> < span class ="nav-text "> Servlet</ span > </ a > < ol class ="nav-child "> < li class ="nav-item nav-level-2 "> < a class ="nav-link " href ="#%E4%B8%8A%E4%BC%A0%E6%96%87%E4%BB%B6 "> < span class ="nav-text "> 上传文件</ span > </ a > </ li > </ ol > </ li > </ ol > </ div >
141+ < div class ="post-toc animated "> < ol class ="nav "> < li class ="nav-item nav-level-1 "> < a class ="nav-link " href ="#tomcat "> < span class ="nav-text "> Tomcat</ span > </ a > < ol class ="nav-child "> < li class ="nav-item nav-level-2 "> < a class ="nav-link " href ="#jre%E6%8A%A5%E9%94%99 "> < span class ="nav-text "> JRE报错</ span > </ a > </ li > </ ol > </ li > < li class ="nav-item nav-level-1 "> < a class ="nav-link " href ="#cookies "> < span class ="nav-text "> Cookies</ span > </ a > < ol class ="nav-child "> < li class ="nav-item nav-level-2 "> < a class ="nav-link " href ="#remember-me "> < span class ="nav-text "> Remember-me</ span > </ a > </ li > < li class ="nav-item nav-level-2 "> < a class ="nav-link " href ="#session "> < span class ="nav-text "> Session</ span > </ a > </ li > </ ol > </ li > < li class ="nav-item nav-level-1 "> < a class ="nav-link " href ="#servlet "> < span class ="nav-text "> Servlet</ span > </ a > < ol class ="nav-child "> < li class ="nav-item nav-level-2 "> < a class ="nav-link " href ="#%E4%B8%8A%E4%BC%A0%E6%96%87%E4%BB%B6 "> < span class ="nav-text "> 上传文件</ span > </ a > </ li > < li class ="nav-item nav-level-2 "> < a class ="nav-link " href ="#context "> < span class ="nav-text "> Context</ span > </ a > </ li > </ ol > </ li > < li class ="nav-item nav-level-1 "> < a class ="nav-link " href ="#filter "> < span class ="nav-text "> Filter</ span > </ a > </ li > </ ol > </ div >
142142 </ div >
143143 <!--/noindex-->
144144
@@ -223,9 +223,15 @@ <h1 class="post-title" itemprop="name headline">
223223 < i class ="far fa-calendar "> </ i >
224224 </ span >
225225 < span class ="post-meta-item-text "> 发表于</ span >
226-
227226
228- < time title ="创建时间:2024-11-28 00:00:00 / 修改时间:10:36:02 " itemprop ="dateCreated datePublished " datetime ="2024-11-28T00:00:00+08:00 "> 2024-11-28</ time >
227+ < time title ="创建时间:2024-11-28 00:00:00 " itemprop ="dateCreated datePublished " datetime ="2024-11-28T00:00:00+08:00 "> 2024-11-28</ time >
228+ </ span >
229+ < span class ="post-meta-item ">
230+ < span class ="post-meta-item-icon ">
231+ < i class ="far fa-calendar-check "> </ i >
232+ </ span >
233+ < span class ="post-meta-item-text "> 更新于</ span >
234+ < time title ="修改时间:2024-11-29 11:19:54 " itemprop ="dateModified " datetime ="2024-11-29T11:19:54+08:00 "> 2024-11-29</ time >
229235 </ span >
230236
231237
@@ -246,6 +252,7 @@ <h2 id="jre报错"><a class="markdownIt-Anchor" href="#jre报错"></a> JRE报错
246252< p > 生成一个JRE后,启动Tomcat,就会报错:</ p >
247253< figure class ="highlight shell "> < table > < tr > < td class ="code "> < pre > < span class ="line "> WARNING: Unknown module: java.rmi specified to --add-opens</ span > < br > < span class ="line "> Exception in thread "main" java.lang.NoClassDefFoundError: java/util/logging/Logger</ span > < br > < span class ="line "> at org.apache.juli.logging.DirectJDKLog.<init>(DirectJDKLog.java:61)</ span > < br > < span class ="line "> at org.apache.juli.logging.DirectJDKLog.getInstance(DirectJDKLog.java:181)</ span > < br > < span class ="line "> at org.apache.juli.logging.LogFactory.getInstance(LogFactory.java:133)</ span > < br > < span class ="line "> at org.apache.juli.logging.LogFactory.getInstance(LogFactory.java:156)</ span > < br > < span class ="line "> at org.apache.juli.logging.LogFactory.getLog(LogFactory.java:211)</ span > < br > < span class ="line "> at org.apache.catalina.startup.Bootstrap.<clinit>(Bootstrap.java:49)</ span > < br > < span class ="line "> Caused by: java.lang.ClassNotFoundException: java.util.logging.Logger</ span > < br > < span class ="line "> at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)</ span > < br > < span class ="line "> at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)</ span > < br > < span class ="line "> at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525)</ span > < br > < span class ="line "> ... 6 more</ span > < br > </ pre > </ td > </ tr > </ table > </ figure >
248254< p > 这时候,只需要把jre文件和< code > JRE_HOME</ code > 环境变量删除,Tomcat就能正常启动</ p >
255+ < span id ="more "> </ span >
249256< h1 id ="cookies "> < a class ="markdownIt-Anchor " href ="#cookies "> </ a > Cookies</ h1 >
250257< h2 id ="remember-me "> < a class ="markdownIt-Anchor " href ="#remember-me "> </ a > Remember-me</ h2 >
251258< figure class ="highlight html "> < table > < tr > < td class ="code "> < pre > < span class ="line "> < span class ="tag "> << span class ="name "> div</ span > ></ span > </ span > < br > < span class ="line "> < span class ="tag "> << span class ="name "> label</ span > ></ span > </ span > < br > < span class ="line "> < span class ="tag "> << span class ="name "> input</ span > < span class ="attr "> type</ span > =< span class ="string "> "checkbox"</ span > < span class ="attr "> placeholder</ span > =< span class ="string "> "记住密码"</ span > < span class ="attr "> name</ span > =< span class ="string "> "remember-me"</ span > ></ span > </ span > < br > < span class ="line "> 记住密码</ span > < br > < span class ="line "> < span class ="tag "> </< span class ="name "> label</ span > ></ span > </ span > < br > < span class ="line "> < span class ="tag "> </< span class ="name "> div</ span > ></ span > </ span > < br > </ pre > </ td > </ tr > </ table > </ figure >
@@ -276,6 +283,17 @@ <h2 id="上传文件"><a class="markdownIt-Anchor" href="#上传文件"></a> 上
276283< figure class ="highlight html "> < table > < tr > < td class ="code "> < pre > < span class ="line "> < span class ="comment "> <!-- multipart 传文件 --></ span > </ span > < br > < span class ="line "> < span class ="tag "> << span class ="name "> form</ span > < span class ="attr "> method</ span > =< span class ="string "> "post"</ span > < span class ="attr "> action</ span > =< span class ="string "> "file"</ span > < span class ="attr "> enctype</ span > =< span class ="string "> "multipart/form-data"</ span > ></ span > </ span > < br > < span class ="line "> < span class ="tag "> << span class ="name "> div</ span > ></ span > </ span > < br > < span class ="line "> < span class ="tag "> << span class ="name "> input</ span > < span class ="attr "> type</ span > =< span class ="string "> "file"</ span > < span class ="attr "> name</ span > =< span class ="string "> "test-file"</ span > ></ span > </ span > < br > < span class ="line "> < span class ="tag "> </< span class ="name "> div</ span > ></ span > </ span > < br > < span class ="line "> < span class ="tag "> << span class ="name "> div</ span > ></ span > </ span > < br > < span class ="line "> < span class ="tag "> << span class ="name "> button</ span > ></ span > 上传文件< span class ="tag "> </< span class ="name "> button</ span > ></ span > </ span > < br > < span class ="line "> < span class ="tag "> </< span class ="name "> div</ span > ></ span > </ span > < br > < span class ="line "> < span class ="tag "> </< span class ="name "> form</ span > ></ span > </ span > < br > </ pre > </ td > </ tr > </ table > </ figure >
277284< p > 后端定义Post方法</ p >
278285< figure class ="highlight java "> < table > < tr > < td class ="code "> < pre > < span class ="line "> < span class ="meta "> @MultipartConfig</ span > < span class ="comment "> // 文件传输注解</ span > </ span > < br > < span class ="line "> < span class ="meta "> @WebServlet("/file")</ span > </ span > < br > < span class ="line "> < span class ="keyword "> public</ span > < span class ="keyword "> class</ span > < span class ="title class_ "> FileServlet</ span > < span class ="keyword "> extends</ span > < span class ="title class_ "> HttpServlet</ span > {</ span > < br > < span class ="line "> </ span > < br > < span class ="line "> < span class ="meta "> @Override</ span > </ span > < br > < span class ="line "> < span class ="keyword "> protected</ span > < span class ="keyword "> void</ span > < span class ="title function_ "> doPost</ span > < span class ="params "> (HttpServletRequest req, HttpServletResponse resp)</ span > < span class ="keyword "> throws</ span > ServletException, IOException {</ span > < br > < span class ="line "> < span class ="keyword "> try</ span > (< span class ="type "> FileOutputStream</ span > < span class ="variable "> stream</ span > < span class ="operator "> =</ span > < span class ="keyword "> new</ span > < span class ="title class_ "> FileOutputStream</ span > (< span class ="string "> "/Users/nagocoler/Documents/IdeaProjects/WebTest/test.png"</ span > )){</ span > < br > < span class ="line "> < span class ="type "> Part</ span > < span class ="variable "> part</ span > < span class ="operator "> =</ span > req.getPart(< span class ="string "> "test-file"</ span > );</ span > < br > < span class ="line "> IOUtils.copy(part.getInputStream(), stream);</ span > < br > < span class ="line "> resp.setContentType(< span class ="string "> "text/html;charset=UTF-8"</ span > );</ span > < br > < span class ="line "> resp.getWriter().write(< span class ="string "> "文件上传成功!"</ span > );</ span > < br > < span class ="line "> }</ span > < br > < span class ="line "> }</ span > < br > < span class ="line "> }</ span > < br > </ pre > </ td > </ tr > </ table > </ figure >
286+ < h2 id ="context "> < a class ="markdownIt-Anchor " href ="#context "> </ a > Context</ h2 >
287+ < blockquote >
288+ < p > ServeletContext属于整个Web应用程序,全局唯一</ p >
289+ </ blockquote >
290+ < figure class ="highlight java "> < table > < tr > < td class ="code "> < pre > < span class ="line "> < span class ="type "> ServeltContext</ span > < span class ="variable "> context</ span > < span class ="operator "> =</ span > getServletContext();</ span > < br > < span class ="line "> context.setAttribute(< span class ="string "> "key"</ span > , < span class ="string "> "value"</ span > );</ span > < br > </ pre > </ td > </ tr > </ table > </ figure >
291+ < h1 id ="filter "> < a class ="markdownIt-Anchor " href ="#filter "> </ a > Filter</ h1 >
292+ < blockquote >
293+ < p > Filter相当于在所有访问前加了一堵墙,来自浏览器的所有访问请求都会首先经过Filter。</ p >
294+ </ blockquote >
295+ < p > 只有Filter允许通过的请求,才可以顺利到达Servlet。</ p >
296+ < figure class ="highlight java "> < table > < tr > < td class ="code "> < pre > < span class ="line "> < span class ="meta "> @WebFileter("/*")</ span > </ span > < br > < span class ="line "> < span class ="keyword "> public</ span > < span class ="keyword "> class</ span > < span class ="title class_ "> MyFilter</ span > < span class ="keyword "> implements</ span > < span class ="title class_ "> Filter</ span > {</ span > < br > < span class ="line "> < span class ="meta "> @Override</ span > </ span > < br > < span class ="line "> < span class ="keyword "> public</ span > < span class ="keyword "> void</ span > < span class ="title function_ "> doFilter</ span > < span class ="params "> (req, resp, chain)</ span > {</ span > < br > < span class ="line "> ...</ span > < br > < span class ="line "> chain.doFilter(req, res);</ span > < br > < span class ="line "> }</ span > < br > < span class ="line "> }</ span > < br > </ pre > </ td > </ tr > </ table > </ figure >
279297 </ div >
280298
281299
0 commit comments