在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接收不到表单数据?的主要内容,如果未能解决你的问题,请参考以下文章
使用javascript进行表单提交 ,form0是表单的ID,但是为啥跳转后的页面接收不到该页面传递的参数呢?