在tomcat服务器下为啥我JSP接收不到表单数据?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在tomcat服务器下为啥我JSP接收不到表单数据?相关的知识,希望对你有一定的参考价值。

现在有authen.html(用户认证界面),和处理它提交内容的JSP—search.jsp,代码如下:
authen.jsp
<!--User Authentication page edited by alren-->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>用户认证</title>

<style type="text/css">
.bodytext p
text-align: center;
font-size: 14px;

</style>
</head>

<body>
<br class="br">
<span class="bodytext">
<p>您现在访问的是布告栏信息,请您先登录再继续查看</p>
</span><span class="bodytext">
</span>
<br class="br">

<form name="LOGIN" method="get" action="../search.jsp">

<table width="361" border="1" align="center">

<table align="center">
<tr>
<td height="27" align="center">用户名:</td>
<td width="200" height="37"><input type="text" name="name"></td>
</tr>
<tr>
<td height="27" align="center">口 令:</td>
<td width="200" height="37"><input type="password" name="password"></td>
</tr>
<tr>
<td height="37" colspan="2" align="center">
<input type="submit" name="submit" value="提交"> 
<input type="reset" name="reset" value="重置"> 
<input type="button" name="retreat"value="返回" ></td>
</table>
</form>
</body>
</html>

search.jsp(部分代码)
<a href="../authen.html">认证</a>
<%
String name = (String)request.getParameter("name") ;
String pwd = (String)request.getParameter("password") ;
if(pwd.equals(""))

out.println("fei kong ");


就是这样一个简单的传参过程,可是JSP无法接收到表单提交内容,在authen页面下输入用户名和口令,点提交和重置都无效。。。但是如果只是单独点开authen页面的话,提交和重置是有效果的,请问我的问题出在哪里了?
由于我是初学JSP,对这里面的工作机制不是很清楚,只能依样画瓢,感觉是我的理解有问题。先谢过各位前辈了!

相对路径问题
在jsp头部加上下面代码
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
在<head></head>标签之间加上<base href="<%=basePath%>">
提交的action直接写search.jsp就ok了
参考技术A 现在你提交的时候能访问到接收数据那个jsp页面吗

为啥在jsp更改时tomcat不需要重启

【中文标题】为啥在jsp更改时tomcat不需要重启【英文标题】:why tomcat does not require restart when jsp is changed为什么在jsp更改时tomcat不需要重启 【发布时间】:2012-03-29 17:09:31 【问题描述】:

我使用JSP,Servlet 已经有一段时间了。我知道每当我们更改 Servlet 中的任何内容时,我们都需要重新启动 Tomcat 服务器以获取更改。而在 JSP 更改的情况下,tomcat 不需要重新启动。

据我所知,JSP 页面仅在编译时才会转换为 Servlet。所以,毕竟它是一个Servlet。所以,如果没有Tomcat 重新启动,它是如何工作的。

我知道 JSP 页面在服务器重启后首次访问等情况下被编译的情况。

【问题讨论】:

【参考方案1】:

不仅仅是JSP的一些容器也支持servlet类的重载,如果修改了。

由容器决定何时加载 servlet。 A servlet can be loaded at runtime on demand。并来到 JSP,JSP translated to servlet can also be loaded at runtime

回答你的问题,

为什么 Tomcat 不需要重启?

因为Tomcat is capable of adding/modifying classpath to Web Application classloader at runtime。 Tomcat 将拥有他们的custom Classloader implementation which allows them to add the classpaths at runtime

自定义类加载器如何工作?

实现此功能的一种方法是修改 Servlet/JSP,a new classloader is created for the Servlet/JSP with Application classloader as parent classloader . And the new classloader will load the modified class again

【讨论】:

【参考方案2】:

因为默认情况下,tomcat 是在开发模式下启动的,这意味着当检测到更改时会重新编译 JSP 派生的 servlet。这是一个很好的问题 JVM 如何加载新类 - 可能是 tomcat 类加载器被配置为这样做。

一些相关说明:

您可以关闭生产环境的开发选项 您也可以重新加载 servlet - 您必须使用debug mode 中的 JVM 启动 tomcat。

【讨论】:

when a change is detected - tomcat 如何确定有变化?【参考方案3】:

因为当Tomcat被要求执行一个JSP时,它会将JSP文件的修改日期与该JSP对应的编译类的修改时间进行比较,如果较新,它会在执行之前即时重新编译。

这是顺便说一句,应该在生产中关闭的选项,因为执行此检查需要时间。

详情请见http://tomcat.apache.org/tomcat-7.0-doc/jasper-howto.html。

【讨论】:

是的,但是 JVM 应该有某种方式加载新类。默认情况下它不会。我认为是 tomcat 的自定义类加载器允许它。 @:JB 谢谢.. 我知道它会比较 JSP 文件的最后修改日期和已编译的类来决定是否重新编译。

以上是关于在tomcat服务器下为啥我JSP接收不到表单数据?的主要内容,如果未能解决你的问题,请参考以下文章

为啥在jsp更改时tomcat不需要重启

使用javascript进行表单提交 ,form0是表单的ID,但是为啥跳转后的页面接收不到该页面传递的参数呢?

php 注册表单 为啥在显示注册成功后却在数据库里找不到呢 给20分!!

jsp页面报错 找不到页面

Tomcat 找不到我要转发的 jsp 页面

为啥我的 Tomcat 服务器在编译 JSP 时会抛出间歇性 404?