关于本篇,可以结合之前一篇来理解:
【IDEA】javaweb下的web.xml文件中出现servlet should have mapping问题/servlet的映射问题
另外本篇博客参考了另外一位大佬博主(@WinstonLau)的文章,非常感谢大佬
另外,IDEA确实是一款很好用的IDEA,在逐步上手后我逐渐喜欢上了它……
————————————————————————————————————————————————————————
IDEA在出上手学习时,甚至说在刚开始学习JSP时,我们最大的一个问题在于对文件路径的使用
这是我的一个:
项目结构
如图看出,大体上我们的创建的项目文件为两大部分,一部分在包中,一部分在web文件夹中
默认访问路径
- 项目的基本配置后(基本配置方法在这里),启动 Tomcat,会发现直接出现的是 index.jsp 页面,此时浏览器的地址栏显示的是:
localhost:8080
,也就是说项目默认跳转到了 index.jsp 页面,而且打开 web.xml 文件后,我们发现这里并没有配置 index.jsp 为首页(注:关于首页问题,也可以参考:在这里) - 非常重要的一点:做开发测试时,如果用了 index.jsp 这个页面做测试,一定要分清楚项目是启动的时候直接就跳转到了这个页面,还是经过了其它的路径才跳转到了这个页面,如果没有这个意识的话,很可能在实际开发中会出现问题,所以一般不推荐用 index.jsp 作为测试页面
- 还是之前的设置不变,当我们在浏览器输入 localhost:8080/index.jsp 时,会发现显示的仍然是 index.jsp 页面,也就是说,jsp 页面的访问路径是直接从项目的 web 目录的下一级目录开始的,我们这里的 index.jsp 由于就是直接处于 web 目录的下一级,所以直接在 localhost:8080/ 后面加上文件名
idea中独有的路径配置
如图,这里的值是idea一个非常独特的路径地址设置
Application context 中填写的值会直接加到 localhost:8080 的后面
以之前的例子来说,本来 index 的访问路径是 localhost:8080/index,如果在 Application context 中填写的是 /haha,那么其访问路径就变成了 localhost:8080/haha/index
这对于类和 jsp 页面的访问路径也是同样的道理
jsp页面的访问路径
因为默认访问路径就是web 目录的下一级目录
所以在使用时直接/name.jsp即可
如果在web目录的某个文件夹下,则变成/文件夹/name.jsp即可
servlet文件的访问路径
- servlet 文件的访问路径我们可以在 web.xml 中自己配置(使用的是 url-pattern 标签,搭配mapping使用,详情见:【IDEA】javaweb下的web.xml文件中出现servlet should have mapping问题/servlet的映射问题),或者是使用注解的形式(使用的是 urlPatterns 属性)
- 不管采用哪种形式,其对应的值都和我们的访问路径有关(如果两种形式同时采用,实测只有 web.xml 中的配置生效,也就是说此时如果以注解中配置的路径来访问 servlet 是会报 404 的)
web.xml 中自己配置的方式:
如果我们在 web.xml 中对其所做配置如下,则访问路径为 localhost:8080/save
或者是 localhost:8080/taor.no72.save
特别注意:如果这里mapping里的 url-pattern 的值写的是 /*,那么当我们在浏览器的地址栏输入 localhost:8080 甚至是 localhost:8080/index.jsp 或者是 localhost:8080 后面跟上任何合法的字符串,访问的都是save这个 servlet 类,换而言之,基本上通过这个方式可以实现屏蔽用户的自由访问
使用注解的形式:
(这里直接引用@WinstonLau的文章)
如果我们使用注解的方式对其所做配置如下,则访问路径为 localhost:8080/DemoServlet
特别注意:name 属性的值需要和web-inf中对应的servlet类名一致!
注意!mapping和注解在使用上还是有区别的!
刚刚在写留言本页面时,使用了jsp的form表单传递给servlet,然后再在原jsp上显示新增留言内容的一个结构
刚开始使用mapping,最后出现jsp页面提交后刷新一下没变化(没提交到servlet,使用debug模式没有到断点)
之后在改用注解
@WebServlet("/show")//这里原先使用了mapping功能,失败后使用注解成功
并且将相关的servlet在web.xml文件中注释掉后,则留言本刷新成功
这里出现的原理日后研究后,会在这里给出