JSP上下文、表单提交

在JSP中,脚本化语言如“<%=contextPath%>”可以从page,request,session及application中取值。
下面的代码可以看到结果是因为contextPath被保存在page中:
<% String contextPath = request.getContextPath(); %>
<form action="<%=contextPath%>/sub/submit.jsp" method="post"> 
</form> 

EL表达式如“${contextPath}”只能从request,session及application中取值。
上述代码修改一下就可以支持EL表达式:
<% 
  String contextPath = request.getContextPath(); 
  // 将contextPath保存到request中
  request.setAttribute("contextPath", contextPath);
%>
<form action="${contextPath}/sub/submit.jsp" method="post"> 

</form> 



需要注意的是HTML的相关路径与绝对路径的问题。
先看一下下面的URL:
http://192.168.1.1:8080/hello/index.html
一个URL由
服务器地址: http://192.168.1.1:8080
WEB应用上下文:  /hello
网页或请求:  /index.html
三个部分组成。
WEB应用发布时,WEB应用上下文可以自行指定,如放在ROOT/下的话,WEB应用上下文就是空,如:
http://192.168.1.1:8080/index.html
它的WEB应用上下文就是空。

HTML协议中要求,form的action属性,以“/”开头是绝对路径,不以“/”开头的是相对路径。
绝对路径是相对于服务器地址而言的,相对路径是相对于当前网页或请求而言的。
举一个例子,你的当前网页位置是:
http://192.168.1.1:8080/hello/page/index.html
其中/hello是WEB应用上下文;/page/index.html是网页。
在这个网页上有一个请求需要指向
http://192.168.1.1:8080/hello/servlet/checkUser.cgi
index.html中的form应该怎么写呢?
可以写成绝对路径(相对于http:/192.168.1.1:8080)
<form action="/hello/servlet/checkUser.cgi" >
...
</form>
也可以写成相对路径(相对于http://192.168.1.1:8080/hello/page)
<form action="../servlet/checkUser.cgi" >
...
</form>

当前如果你的WEB应用是基于JSP的话,有许多第三方的标签库如JSTL或基于Struts的标签库都可以在form中自动为你加上WEB应用上下文,如二楼东走西顾的例子。
如果你准备在JSP使用基本语句生成网页的话,六楼honglei915提供了一个很好的例子,只不过“/”更规范一些,如:
<%!String basePath=request.getContextPath();%> 
<form action="<%=basePath%>/sub/submit.jsp" method="post"> 
</form> 

摘自:from:http://bbs.csdn.net/topics/320188039

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值