为了账号安全,请及时绑定邮箱和手机立即绑定

jsp中的请求servlet操作的跳转<a href = 地址与xml中servlet注册的url-pattern到底有什么要求?

在reg.jsp文件中是

<a href = "servlet/TheServlet">gotoServlet</a>

在配置文件中是

      <servlet>
      <servlet-name>TheServlet</servlet-name>
      <servlet-class>servlet.TheServlet</servlet-class>
      <load-on-startup>1</load-on-startup>
      </servlet>
      <servlet-mapping>
      <servlet-name>TheServlet</servlet-name>
      <url-pattern>/servlet/TheServlet</url-pattern>
      </servlet-mapping>

而在工程里面的位置也如视频内提示的一样

src--|

 |      servlet--|

 |                 TheServlet

WebRoot--|

 |               WEB-INF--|

 |                               web.xml

 |               reg.jsp

这样整个的流转流程是怎么样的,在1-4节中的说明中,似乎由reg.jsp的超链接,获得的请求地址进入web.xml进行匹配判断,得到了对应的servlet,再由servlet定义的Class去进行相应的doget()方法。所以1-4节好像在说明:reg.jsp的超链接无论指向何处都没关系,只需要与在web.xml注册的servlet的url-pattern匹配即可

但在1-13节的讲解中,说明了这个reg.jsp的超链接是直接链接到了项目虚拟地址/servlet/TheServlet,而在web.xml注册的servlet的url-pattern,是指项目中的这个servlet的地址(这里存在问题,这个属于地址么?如果是地址,指示一个TheServlet的文件,那么不需要后缀么?),在修改了url-pattern之后,在启动项目都无法进行了,是否相当于url-pattern要绑定(或者说链接)一个servlet.java?如果这样那么还需要所谓的servlet-class来指示类文件么?

所有主要的问题就两个:1、Jsp文件中的这个get方式的请求的超链接,到底是要指向什么?是一个确实的文件?还是一个随意的地址,只要servlet能接收这个超链接请求并返回信息即可?

2、在web.xml配置注册的servlet的url-pattern属性到底是什么东西,为什么没有首/就会出现连服务都无法启动的情况,是因为它要确实指向一个确实存在的servlet实现类吗?还是一个为了和Jsp超链接请求相互匹配进行处理的匹配数据信息,只是因为在jsp中使用的时候有默认添加上下文地址之类的操作,才导致必须添加首/,而在jsp中不能添加首/?


我的问题可能有些乱,初学JSP,不理解servlet,希望能得到指导


正在回答

1 回答

你好

先说你的第一个问题 我的理解是请求的地址,你可以把里面的测试路径随便更改为"http://www.baidu.com" 会发现直接跳转到百度首页了. 因为我使用的是IDE是IDEA,所以使用了JAVA EE 6的注解功能,并没有添加文件到web.xml,所以理解角度可能和你不一样了,我的是这样的,在Servlet文件的开始有如下:

@WebServlet(name = "TestServlet",urlPatterns = {"/servlet/TestServlet"})

假如没有urlPatterns这个参数,无论你的href写什么都会是404;

在回答你第一个问题的时间就牵扯到你第二个问题了,

在web.xml配置注册的servlet的url-pattern属性到底是什么东西

然后你问

这里存在问题,这个属于地址么?如果是地址,指示一个TheServlet的文件,那么不需要后缀么?

那么我们是不是可以理解为 url-pattern 就是路径参数,因为这个就是Servlet的参数,所以是不需要后缀的,也就是说我们的Servlet类文件会注册一个路径(注意我说的是路径.)

然后就回到我们最开始的 1-13中老师有讲相对和绝对对吧.

<%--使用相对路径访问--%>
<%-- /servlet/HelloServlet 第一个/ 表示服务器的根目录 --%>
<a href="servlet/HelloServlet">访问HelloServlet!</a><br>
<%--使用绝对路径访问 可以使用path变量:path变量表示项目的根目录--%>
<a href="<%=path%>/servlet/HelloServlet">访问HelloServlet使用Path</a><br>

------分割线------

我刚才做了一个测试 

@WebServlet(name = "TestServlet",urlPatterns = {"/servlet/TestServlet"})

你可以把urlPatterns的参数改为任意名称,与你的Servlet文件名完全无关,然后在 <a href="servlet/HelloServlet">中改为相同的一样可以跳转.

所以我们可以不可以这样理解呢, url-pattern/urlPatterns 只是给你的Servlet文件起了一个路径,就好像我们每个人都有用户名一样.

只要两处一致,即可跳转访问,这大概也是老师一开始说的注册Servlet的意思呢.


写了这么多可能有点乱,现在重新回答你的两个问题:

1、Jsp文件中的这个get方式的请求的超链接,到底是要指向什么?是一个确实的文件?还是一个随意的地址,只要servlet能接收这个超链接请求并返回信息即可?

A:超链接就是路径,路径当然指向的还是文件. 所以最终还是文件.

2、在web.xml配置注册的servlet的url-pattern属性到底是什么东西,为什么没有首/就会出现连服务都无法启动的情况,是因为它要确实指向一个确实存在的servlet实现类吗?还是一个为了和Jsp超链接请求相互匹配进行处理的匹配数据信息,只是因为在jsp中使用的时候有默认添加上下文地址之类的操作,才导致必须添加首/,而在jsp中不能添加首/?

A:url-pattern这个属性就是一个名字,而且与实际路径无关(可以理解为虚拟路径或者别名),并不是文件真实路径(这样回答会不会与第一个问题的回答冲突),因为这里的首/表示为项目的根目录,没有就会出现找不到加载路径所以无法启动吧.结论无论在普通的Java类中还是Servlet还是JSP,我们都需要一个明确且唯一的路径.(无论相对还是绝对,肯定是唯一的)


1 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

jsp中的请求servlet操作的跳转<a href = 地址与xml中servlet注册的url-pattern到底有什么要求?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信