{"id":3105,"date":"2023-03-19T11:11:01","date_gmt":"2023-03-19T10:11:01","guid":{"rendered":"https:\/\/bob-team.de\/wordpress\/?p=3105"},"modified":"2023-03-19T11:21:10","modified_gmt":"2023-03-19T10:21:10","slug":"servlet-4-0-5-0-nach-3-1","status":"publish","type":"post","link":"https:\/\/bob-team.de\/wordpress\/2023\/03\/19\/servlet-4-0-5-0-nach-3-1\/","title":{"rendered":"Servlet 4.0\/5.0 nach 3.1"},"content":{"rendered":"<p>Unterschied 4.0 zu 5.0 ist neuer Paketname; aus <code>javax<\/code> wurde <code>jakarta<\/code><\/p>\n<p>Methoden von <code>ServletContextListener<\/code> haben Standardimplementierung (leere Methoden entfallen damit)<\/p>\n<p><code>GenericFilter<\/code> bringt Standardimplementierung f\u00fcr Filter-Methoden und ist von <code>HttpFilter<\/code> abgeleitet (Cast auf Http-Klassen entf\u00e4llt)<\/p>\n<p>Zeichencodierung in <code>web.xml<\/code> mit &lt;request-character-encoding&gt; und &lt;response-character-encoding&gt; einstellbar<\/p>\n<p>Zeichenkodierung in <code>ServletContextListener<\/code> mit <code>setRequestCharacterEncoding()<\/code> und <code>setResponseCharacterEncoding()<\/code> von <code>ServletContext<\/code> einstellbar<\/p>\n<p>Unterst\u00fctzung f\u00fcr HTTP\/2 gekommen (vor Einsatz den Anwendungsfall\/Stand genau hinterfragen)<\/p>\n<p>neue Schnittstelle <code>HttpServletMapping<\/code> mit <code>getMatchValue()<\/code> vereinfacht Auswertung vom Aufruf (siehe unten)<\/p>\n<p><code>ServletContext<\/code> hat Methoden <code>getSessionTimeout()<\/code> und <code>setSessionTimeout()<\/code> bekommen (damit kann Timeout in <code>ServletContextListener<\/code> gesetzt werden; siehe unten)<\/p>\n<p><code>ServletContext<\/code> hat mit <code>addJspFile(String servletName, String jspFilePath)<\/code> eine Methode zum registrieren von JSPs bekommen<\/p>\n<p><code>isTrailerFieldsReady()<\/code> und <code>getTrailerFields()<\/code> von <code>HttpServletRequest<\/code> vereinfachen Zugriff auf <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Headers\/Trailer\">Trailer<\/a>; ein Servlet kann mit <code>setTrailerFields()<\/code> von <code>HttpServletResponse<\/code> einfach Trailer setzen (Unterst\u00fctzung Browser und JavaScript\/fetch nicht gegeben)<\/p>\n<p><a href=\"https:\/\/marian-caikovski.medium.com\/how-servlet-4-0-and-5-0-are-even-more-convenient-than-the-perfect-3-1-782b87aa21b7\">hier<\/a> gelesen<\/p>\n<pre lang=\"java\">@WebServlet({\"\/servlet\/*\", \"*.ext\"})\r\npublic class Servlet2 extends HttpServlet {protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {\r\n        res.setContentType(\"text\/plain\");\r\n        try ( PrintWriter out = res.getWriter()) {\r\n            HttpServletMapping match = req.getHttpServletMapping();\r\n            out.println(\"getMatchValue():\\t\" + match.getMatchValue());\r\n            out.println(\"getPattern():\\t\\t\" + match.getPattern());\r\n            out.println(\"getServletName():\\t\" + match.getServletName());\r\n            out.println(\"getMappingMatch():\\t\" + match.getMappingMatch());\r\n        }\r\n    }\r\n}<\/pre>\n<pre lang=\"java\">@WebListener\r\npublic class ServletContextListener2 implements ServletContextListener {public void contextInitialized(ServletContextEvent sce) {\r\n        sce.getServletContext().setSessionTimeout(30));\r\n    }\r\n}<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Unterschied 4.0 zu 5.0 ist neuer Paketname; aus javax wurde jakarta Methoden von ServletContextListener haben Standardimplementierung (leere Methoden entfallen damit) GenericFilter bringt Standardimplementierung f\u00fcr Filter-Methoden und ist von HttpFilter abgeleitet (Cast auf Http-Klassen entf\u00e4llt) Zeichencodierung in web.xml mit &lt;request-character-encoding&gt; und &lt;response-character-encoding&gt; einstellbar Zeichenkodierung in ServletContextListener mit setRequestCharacterEncoding() und setResponseCharacterEncoding() von ServletContext einstellbar Unterst\u00fctzung f\u00fcr HTTP\/2 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[209],"tags":[21],"class_list":["post-3105","post","type-post","status-publish","format-standard","hentry","category-javaee","tag-tomcat","entry"],"_links":{"self":[{"href":"https:\/\/bob-team.de\/wordpress\/wp-json\/wp\/v2\/posts\/3105","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bob-team.de\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bob-team.de\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bob-team.de\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bob-team.de\/wordpress\/wp-json\/wp\/v2\/comments?post=3105"}],"version-history":[{"count":11,"href":"https:\/\/bob-team.de\/wordpress\/wp-json\/wp\/v2\/posts\/3105\/revisions"}],"predecessor-version":[{"id":3116,"href":"https:\/\/bob-team.de\/wordpress\/wp-json\/wp\/v2\/posts\/3105\/revisions\/3116"}],"wp:attachment":[{"href":"https:\/\/bob-team.de\/wordpress\/wp-json\/wp\/v2\/media?parent=3105"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bob-team.de\/wordpress\/wp-json\/wp\/v2\/categories?post=3105"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bob-team.de\/wordpress\/wp-json\/wp\/v2\/tags?post=3105"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}