1.实战:Springboot集成jsp页面报404四种解决方案
2.Java Web开发实战—Listener详解—Listener简介、战源Listener开发、战源Listener的战源API、Listener应用
3.Struts 2çResult Type
4.深入浅出Spring原理及实战「技术原理」为大家介绍一下Spring中的战源Ant路径匹配工具组件AntPathMatcher
实战:Springboot集成jsp页面报404四种解决方案
在使用Springboot集成jsp页面过程中,可能会遇到错误的战源情况。具体问题出现在搭建简单的战源晨风配置源码Springboot+maven+jsp项目时,访问jsp页面时出现错误,战源错误信息显示为。战源
首先,战源分析可能的战源原因。网上查找解决方案后,战源发现可能的战源解决方法有三个:不符合条件,直接排除。战源接着,战源检查是战源否配置了端口,发现使用默认端口,因此访问地址应为。怎么读qt源码但仍然无法解决问题,排除此原因。
最终,通过在IDEA中配置项目目录,找到了解决办法。修改箭头所指向的配置项为当前目录即可。如果该选项未出现,确保执行了maven clean和compile操作后,问题即可解决。
因此,在使用Springboot集成jsp页面时,应仔细检查配置项和端口设置,确保正确的访问路径。同时,利用IDEA的目录配置功能,可以有效解决错误问题。软件源码如何提取通过上述步骤,可以更直观地解决问题,避免无效的尝试,提高开发效率。
Java Web开发实战—Listener详解—Listener简介、Listener开发、Listener的API、Listener应用
深入探索Java Web开发实战:Listener的奥秘 在Java Web开发的世界里,Listener扮演着至关重要的角色,它如同后台的观察者,默默地监听并响应Web应用程序中的各种关键事件。本篇文章将带你走进Listener的世界,从基础概念、开发实践到API应用,一一详解。Listener基础与机制
Listener的源码资本 袁迪核心在于其监听机制,它通过8种接口监听Web应用中的ServletContext、HttpSession和ServletRequest事件。在Eclipse中,只需选择对应的接口,如默认的javax.servlet.ServletContextListener,即可创建Listener,如TestListener,它将自动配置到web.xml中,确保监听器的执行顺序。创建Listener实战
在Eclipse中,选择Listener接口,如TestListener,勾选后自动生成相应的类,Eclipse会自动在web.xml中添加和元素,支持多Listener配置。
Listener接口详解
Java EE提供了一系列强大的弹弹堂5.3源码Listener接口,如ServletContextListener关注ServletContext的生命周期,而ServletContextAttributeListener则关注属性的增删改。重点掌握这两大接口,如contextInitialized和contextDestroyed,分别在ServletContext创建和销毁时触发。示例代码展示
contextInitialized(ServletContextEvent): 当ServletContext创建时,执行TestListener的初始化逻辑,控制台输出"ServletContext对象被创建了"。
contextDestroyed(ServletContextEvent): ServletContext销毁时,执行销毁逻辑,控制台输出"ServletContext对象被销毁了"。
后续的Listener接口如HttpSessionListener和ServletRequestListener同样具有类似的生命周期方法,如sessionCreated(HttpSessionEvent)和requestInitialized(ServletRequestEvent),它们各自负责监听和操作相应的生命周期事件。Listener应用实战
例如,我们可以创建一个名为TestListener的类,继承HttpSessionBindingListener,用于存储用户信息。结合UserInfo单例模式,实现在线用户的管理。在Servlet中,监听用户登录和登出事件,实时更新显示信息。小结与提升
通过理解Listener的原理和使用方法,你能灵活地编写程序实现Web应用的特殊功能,如用户登录状态管理、会话统计等。在Context的jsp目录中,实践这些Listener的应用,例如,jsp.jsp通过JSTL展示用户信息,Servlet的删除操作则触发TestListener中的清理逻辑。重启Tomcat,一步步见证Listener的力量。 总而言之,掌握Listener是Java Web开发不可或缺的一部分,它能让你的应用更为智能,更加灵活。深入理解Listener的接口、机制和应用,将为你的Web开发之路增添无限可能。Struts 2çResult Type
å¨é»è®¤æ¶ï¼<result>æ ç¾çtypeå±æ§å¼æ¯âdispatcherâï¼å®é ä¸å°±æ¯è½¬åï¼forwardï¼ãå¼å人åå¯ä»¥æ ¹æ®èªå·±çéè¦æå®ä¸åçç±»åï¼å¦redirectãstreamçãå¦ä¸é¢ä»£ç æ示ï¼<result name=save type=redirect>
/result.jsp
</result>
è¿æ¤result-typeå¯ä»¥å¨struts2-core-2.0..1.jarå æstruts2æºä»£ç ä¸çstruts-default.xmlæ件ä¸æ¾å°ï¼å¨è¿ä¸ªæ件ä¸æ¾å°<result-types>æ ç¾ï¼ææçresult-typeé½å¨éé¢å®ä¹äºã代ç å¦ä¸ï¼ <result-types><result-type name=chain class=com.opensymphony.xwork2.ActionChainResult/><result-type name=dispatcher class=org.apache.struts2.dispatcher.ServletDispatcherResult default=true/><result-type name=freemarker class=org.apache.struts2.views.freemarker.FreemarkerResult/><result-type name=.opensymphony.xwork2.ActionChainResultchainå ¶å®åªæ¯å¨ä¸ä¸ªactionæ§è¡å®æ¯ä¹åï¼forwardå°å¦å¤ä¸ä¸ªactionï¼æ以ä»ä»¬ä¹é´æ¯å ±äº«HttpServletRequestçãå¨ä½¿ç¨chainä½ä¸ºResultæ¶ï¼å¾å¾ä¼é å使ç¨ChainingInterceptorãChainingInterceptorçä½ç¨æ¯å¨Actionç´æ¥ä¼ éæ°æ®ãäºå®ä¸ï¼æºActionä¸ValueStackçæ°æ®ä¼è¢«åä¸æ¬¡Copyï¼è¿æ ·ï¼2个Actionä¸çæ°æ®é½å¨ValueStackä¸ï¼ä½¿å¾å¯¹äºåå°æ¥è¯´ï¼éè¿ValueStackæ¥åæ°æ®ï¼æ¯éæèå ±äº«çãæ¯å¦è¯´ï¼ä¸å¼ 页é¢ä¸ï¼ä½ å¯è½æ许å¤æ°æ®è¦æ¾ç¤ºï¼èæäºæ°æ®çè·åæ¹å¼å¯è½è¢«å¾å¤ä¸åç页é¢å ±äº«ï¼å ¸åæ¥è¯´ï¼âæ¨èæç« âè¿ä¸ªå°æ ç®çæ°æ®è·åï¼å¯è½ä¼è¢«å¾å¤é¡µé¢æå ±äº«ï¼ãè¿ç§æ åµä¸ï¼å¯ä»¥æè¿é¨åé»è¾æ½åå°ä¸ä¸ªç¬ç«Actionä¸ï¼å¹¶ä½¿ç¨chainï¼å°è¿ä¸ªActionä¸ä¸»Action串èèµ·æ¥ãè¿æ ·ï¼æåå°è¾¾é¡µé¢çæ¶åï¼é¡µé¢å§ç»å¯ä»¥å¾å°æ¯ä¸ªActionä¸çæ°æ®ã
ä»å®æä¸è®²ï¼ä½¿ç¨chainä½ä¸ºResultä¹çç¡®åå¨çä¸é¢æ说ç许å¤é®é¢ï¼æ个人ä¹æ¯é常ä¸æ¨å´æ»¥ç¨è¿ç§Resultãå°¤å ¶æ¯ï¼å¯¹äºä½¿ç¨SpringåHibernateçæåæ¥è¯´ï¼å¦æä½ å¼å¯OpenSessionInView模å¼ï¼é£ä¹Hibernateçsessionæ¯è·éHttpServletRequestçï¼æ以sessionå¨æ´ä¸ªactioné¾ä¸å ±äº«ãè¿ä¼ä¸ºæ们çç¼ç¨å¸¦æ¥æ大ç麻ç¦ãå 为æ们ç¥éHibernateçsessionä¼ä¿çä¸ä»½ä¸çº§ç¼åï¼å¨actioné¾ä¸ï¼å ±äº«ä¸çº§ç¼åæ çä¼ä¸ºä½ çè°è¯å·¥ä½å¸¦æ¥å¾å¤§çä¸æ¹ä¾¿ã
æ以ï¼è°¨æ 使ç¨chainä½ä¸ºä½ çResultï¼åºè¯¥æ为ä¸æ¡æä½³å®è·µã éå®åå°ä¸ä¸ªURL org.apache.struts2.dispatcher.ServletRedirectResultå¦æä½ å¨Actionæ§è¡å®æ¯åï¼å¸ææ§è¡å¦ä¸ä¸ªActionï¼æ2ç§æ¹å¼å¯ä¾éæ©ãä¸ç§æ¯forwardï¼å¦å¤ä¸ç§æ¯redirectãæå ³forwardåredirectçåºå«ï¼è¿éæå°±ä¸åå±å¼ï¼è¿åºè¯¥å±äºJavaç¨åºåçåºæ¬ç¥è¯ãå¨Struts2ä¸ï¼åå«å¯¹åºè¿ä¸¤ç§æ¹å¼çResultï¼å°±æ¯chainåredirectã
å æ¥è°è°redirectï¼æ¢ç¶æ¯éå®åï¼é£ä¹æºå°åä¸ç®æ å°åä¹é´æ¯2个ä¸åçHttpServletRequestãæ以ç®æ å°åå°æ æ³éè¿ValueStackçStruts2çç¹æ§æ¥è·åæºActionä¸çæ°æ®ã
åæ¶ï¼RedirectçResultæ¯æå¨é ç½®æ件ä¸ï¼è¯»å并解ææºActionä¸ValueStackçå¼ï¼å¹¶æ为åæ°ä¼ éå°Redirectçå°åä¸ã éå®åå°ä¸ä¸ªAction org.apache.struts2.dispatcher.ServletActionRedirectResult
深入浅出Spring原理及实战「技术原理」为大家介绍一下Spring中的Ant路径匹配工具组件AntPathMatcher
Spring框架中的路径匹配规则遵循Ant标准,这不仅体现在SpringMVC中,整个Spring框架的路径解析亦是如此。具体实现可见于`org.springframework.util.AntPathMatcher`类,其遵循Ant的匹配规则。
在Spring MVC中,我们常使用如`.jsp`、`//dir/file.`、`/example`、`/app/.x`等格式的URL地址。负责判断是否匹配的工具类便是`AntPathRequestMatcher`。该类内部遵循Ant Path Matcher的匹配规则,提供了一套定义标准的符号规则。
`?`符号要求为一个字符,且不能是路径分隔符`/`。而`*`符号能够匹配多个任意字符,但不能用来替代`.`,因为`*`代表的字符串不能表示目录或路径本身。例如,`*.jsp`可以匹配多个以`.jsp`结尾的文件名,但`*`无法替代`.`实现`dir/file.jsp`这样的路径。
`**`符号代表0个或多个目录,但它不需要包含`/`。如`/app/**`可以匹配`/app/`、`/app/dir`等路径。
`{ spring:[a-z]+}`示例展示了更复杂的规则,如在权限校验中,设置管理员的访问路径为`/admin/**`,意味着任何以`/admin/`开头的URI操作地址都应匹配。这里的`{ spring:[a-z]+}`匹配以`spring`开头、后跟多个小写字母的字符串。
`PathMatcher`接口主要用于判断路径是否匹配模式,并解析出路径参数。在实际使用中,通过`AntPathMatcher`类的有参构造方法初始化该对象时,需要注意传递正确的路径分隔符参数`pathSeparator`,以防止在不同操作系统下匹配文件路径出错。
匹配操作遵循最长匹配原则,即越精确的模式优先级越高。例如,URL请求`/app/dir/file.jsp`在存在模式`//.jsp`和`/app/dir/.jsp`时,会优先使用`/app/dir/*.jsp`进行匹配。
若觉得`AntPathMatcher`功能不够强大,可以考虑使用`RegexRequestMatcher`,它支持使用正则表达式进行URL地址匹配。对于更定制化的路由匹配需求,开发者还可以自行重写`RequestMatcher`接口。
`match`与`matchStart`方法的区别在测试用例中会较为明显,前者用于判断整个路径是否匹配模式,后者则仅关注路径的开始部分。`extractPathWithinPattern`方法用于从模式中提取路径,而`extractUriTemplateVariables`方法则用于解析URI模板变量,最后`combine`方法则用于组合匹配结果。