JSP-实验:表单传值-提交表单并传递、获取数据
说明: 参考链接在最后1
我这个版本运行过,反正没大问题,但是用参考的那个网页上的内容,就会出错……原因也写在后面了。
实验
实验内容:
利用表单传递数据,此题目包含01.html、01.jsp、02.jsp、03.jsp、04.jsp共五个程序。
以下图1-5分别是这5个程序运行后的截图。编写程序代码实现截图效果。
下载地址(实验内容/源代码):
01.html
01.jsp
02.jsp
03.jsp
04.jsp
相关知识
jsp表单form传值
页面间链接和数据传递的三种方式:
(1)通过form将数据提交到下一个页面;
(2)通过链接将数据提交到下一个页面;
(3)通过Session将数据提交到后续页面。
session是一次会话只要浏览器不关闭就不会关闭会话,一般默认保存30分钟可以根据自己的需要更改。(关于如何更改,暂时没有涉及)
源代码
参考链接1
参考链接的代码有部分无法运行,重新修改了。
【备注】只粘贴部分代码,源代码自己下载吧。
01.html
<h2>利用表单传递数据</h2>
<form name="form1" method="post" action="02.jsp">
<p>你的姓名:
<input type="text" name="name">
</p>
<p>你的爱好:
<input type="text" name="hobby">
</p>
<p>你所从事的行业:
<select name="work">
<option></option> <!--默认为空,从下拉菜单中选择-->
<option value="学生">学生</option>
<option value="IT业">IT业</option>
<option value="商业">商业</option>
<option value="制造业">制造业</option>
<option value="服务业">服务业</option>
</select>
</p>
<p>
<input type="Submit" value="提交">
<input type="Reset" value="重置">
</p>
</form>
02.jsp
<p>
<%
//从表单中获取数据
String name=new String(request.getParameter("name").getBytes("iso-8859-1"), "utf-8");
String hobby=new String(request.getParameter("hobby").getBytes("iso-8859-1"), "utf-8");
String work=new String(request.getParameter("work").getBytes("iso-8859-1"), "utf-8");
%>
<%
//验证"名字(name)"的长度是否符合要求
if(name.length()<2||name.length()>8)
out.println("你输入的名字长度不符合要求");
else{
out.println("你的姓名是:"+name+"<br>");
out.println("你的爱好是:"+hobby+"<br>");
out.println("你所从事的工作是:"+work+"<br>");
//将"名字(name)"保存到session对象中,让后续页面(下个页面、下下个页面、……)引用
session.setAttribute("name",name);
}
%>
<br>
<!--将"爱好(hobby)"和"工作(work)"以链接的形式传递给下个页面-->
<a href="03.jsp?hobby=<%=hobby%>&work=<%=work%>">提交</a>
</p>
<hr>
<p><font size="2">*将"名字(name)"保存到session对象中,让后续页面(下个页面、下下个页面、……)引用</font></p>
<p><font size="2">*将"爱好(hobby)"和"工作(work)"以链接的形式传递给下个页面</font></p>
03.jsp
<body>
<p>从session对象中获取"名字(name)"的值;<br>从链接中获取"爱好(hobby)"和"工作(work)"</p>
<SCRIPT language="JavaScript">
function submit1()
{
document.forms["form1"].action="04.jsp";
document.form1.submit();
}
function edit1()
{
document.forms["form1"].action="01.jsp";
document.form1.submit();
}
</SCRIPT>
<body>
<h3>从session对象中获取"名字(name)"的值;从链接中获取"爱好(hobby)"和"工作(work)"</h3>
<%
String name=(String)session.getAttribute("name");
String hobby=request.getParameter("hobby");
String work= request.getParameter("work");
out.println("你的姓名是:"+name+"<br>");
out.println("你的爱好是:"+hobby+"<br>");
out.println("你所从事的工作是:"+work+"<br>");
//将"爱好(hobby)"和"工作(work)"保存在session对象中
session.setAttribute("hobby",hobby);
session.setAttribute("work",work);
%>
<form name="form1" method="post">
<input type="hidden" name="name" value="<%=name%>">
<input type="hidden" name="hobby" value="<%=hobby%>">
<input type="hidden" name="work" value="<%=work%>">
<p><h3>确认提交这些信息吗?</h3></p>
<input type="Button" name="Submit" value="确认" onClick="javascript:submit1()">
<input type="Button" name="Edit" value="修改" onClick="javascript:edit1()">
</form>
<hr>
<p><font size="2">*将"爱好(hobby)"和"工作(work)"保存在session对象中,让后续页面(下个页面、下下个页面、……)引用</font></p>
<p><font size="2">*由于"名字(name)"在上个页面中已经保存在session对象中了,这里没必要再次保存</font></p>
</body>
04.jsp
<%
//从sessoin对象中获取数据
String name=(String)session.getAttribute("name");
String work=(String)session.getAttribute("work");
String hobby=(String)session.getAttribute("hobby");
%>
<p>
<font color="#0000FF"><%=name%></font>,你好!你所从事的工作是<font color="#0000FF"><%=work%></font>,在业余时间喜欢<font color="#0000FF"><%=hobby%></font>。
</p>
01.jsp
<title>利用表单传递数据</title>
</head>
<%
String name=new String(request.getParameter("name").getBytes("iso-8859-1"), "utf-8");
String hobby=new String(request.getParameter("hobby").getBytes("iso-8859-1"), "utf-8");
String work=new String(request.getParameter("work").getBytes("iso-8859-1"), "utf-8");
%>
<body>
<h3>利用表单传递数据</h3>
<form name="form1" method="post" action="02.jsp">
<p>你的姓名:
<input type="text" name="name" value="<%=name%>">
</p>
<p>你的爱好:
<input type="text" name="hobby" value="<%=hobby%>">
</p>
<p>你所从事的行业:
<select name="work">
<%if(work.equals("学生")){%>
<option value="学生" selected>学生</option>
<option value="IT业">IT业</option>
<option value="商业">商业</option>
<option value="制造业">制造业</option>
<option value="服务业">服务业</option>
<%}else if(work.equals("IT业")){%>
<option value="学生">学生</option>
<option value="IT业" selected>IT业</option>
<option value="商业">商业</option>
<option value="制造业">制造业</option>
<option value="服务业">服务业</option>
<%}else if(work.equals("商业")){%>
<option value="学生">学生</option>
<option value="IT业">IT业</option>
<option value="商业" selected>商业</option>
<option value="制造业">制造业</option>
<option value="服务业">服务业</option>
<%}else if(work.equals("制造业")){%>
<option value="学生">学生</option>
<option value="IT业">IT业</option>
<option value="商业">商业</option>
<option value="制造业" selected>制造业</option>
<option value="服务业">服务业</option>
<%}else if(work.equals("服务业")){%>
<option value="学生">学生</option>
<option value="IT业">IT业</option>
<option value="商业">商业</option>
<option value="制造业">制造业</option>
<option value="服务业" selected>服务业</option>
<%}%>
</select>
</p>
<p>
<input type="Submit" value="提交">
<input type="Reset" value="重置">
</p>
</form>
</body>
遇到的问题
- 部分内容的中文乱码。
而实际情况是:已经选择了UTF-8了,虽然一部分正常但还有一部分(也就是提交的那部分内容,明明是中文,但显示出来的是乱码)- 原因:tomcat没有配置好UTF-8
- 刚开始只配置了Eclipse:
JSP-(技巧)Eclipse默认新建文件设置为适合中文的类型(UTF-8等)——解决中文乱码问题 - amosC’s - CSDN博客 - 其实还需要配置Tomcat的server.xml文件:
JSP-tomcat设置编码格式 配置utf-8(以防网页框以及网页显示的时候中文乱码) - amosC’s - CSDN博客
- 在Eclipse无法运行,然而在浏览器上可以运行,完全没出错……
- 直接在Eclipse运行之后,复制一下网址再实验吧……
- 具体就是第一个页面还可以,第二个也没问题
- 到了第3个页面就出错了
- 报错内容:
HTTP Status 400 – Bad Request
Type Exception Report
Message Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
Description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).
Exception
java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:467)
org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:294)
org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:770)
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1415)
org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
java.lang.Thread.run(Unknown Source)
Note The full stack trace of the root cause is available in the server logs.
Apache Tomcat/9.0.11
预览效果
01 html:
02 jsp:
03 jsp:
04 jsp:
01 jsp:
返回03,点击“修改”,跳转到01.jsp
。图和01.html
的一样。
既然看到了最后,那就直接给个压缩包吧,可以直接点击下载源代码:
备注:修改了一次,问题不大,然后也就没有重新上传源文件了。
//end
其他说明可以点击 简 介 说 明 查看。
转载请联系作者。
【赞赏&支持&福利】
│ 支持&福利(+每日领红包) │ 备用链