月之荣光
2016-07-07 15:20
在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>
而在工程里面的位置也如视频内提示的一样
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,希望能得到指导
其实老师讲的内容有一定的误解。
先回答斜杠的问题:
jsp页面中有相对路径和绝对路径的问题是因为jsp页面其实是一个网页,通过超文本或者action的方式可以连接到任何url,这里的任何url指的是可以是本项目的,或者另外项目的,或者甚至是外部链接,比如你这么写: action =“http://www.baidu.com”,那么这个form的数据就提交给百度了,所以一定要区分相对和绝对路径,默认不加斜杠就是相对路径:当前主机+端口+上下文(项目)+当前目录,那么剩下的就是绝对路径了,你加上斜杠以后web服务器不知道你要把这个form或者url链接到什么地方(万一你要链接同一台服务器上的另外一个工程ServletLoginDemo2)所以web服务器就把/表示主机的根目录,所以你要是写成action="/servlet/Servlet"的话就会让你去访问localhost:8080/servlet/Servlet目录,其实这里还是一个相对路径(是相对于本主机的一个绝对路径)。
而servlet是不能够链接到别的项目的servlet的,所以这里面没有一个相对路径和绝对路径的概念,一定是本项目下的,所以在tomcat得servlet容器的代码里面就是这么实现的,url-patten一定要加上/:host+port+context+servlet-patten组成这个servlet的访问地址,否则启动的时候检查xml就会报错不能启动。
另外你问的url-patten是否一定要指向某个类,这个也是老师为了讲解方便把url-patten直接写成实际的目录结构给你产生的误导,url-patten并不需要指向具体的类,你可以理解成一个别名,他主要的作用是用来匹配路径和隐藏一些内部实现,url-patten有三种匹配规则你可以搜索下,举个例子url-patten可以模糊匹配,你如说你可以写成这样
<url-pattern>/test/*</url-pattern>那么所有访问host+port+context/test/后面跟任何内容的地址都会去访问这个servlet。
同时你可以写成/login.do这样可以隐藏你的内部实现,你甚至可以写成/login.jsp或者/login/login/login(除了第一个/表示当前目录,后面的/不代表任何目录的意思,他就是一个符号).
所以servelt的url-pattern你可以随意写。
url-pattern具体设置时没有限制,只是你在访问这个servlet的时候用你设定的url-pattern的那个访问名。
web.xml配置文件中的好像只是映射路径,具体的与JSP跳转没关系
因为你建的jsp本来就和你下载的jsp都在一个文件夹里面
而你新建的servlet是在src这个文件夹里所有要..回到上级目录在查询用"../加上你要跳转的jsp文件"
而你说的xml文件要配置那是servlet必须要的啊 和jsp跳转好像没关系
JAVA遇见HTML——Servlet篇
160615 学习 · 1029 问题
相似问题