servlet之获取表单数据
1.写⼀个.java⽂件——实体类(⽤于储存表单数据)
假设是⼀个⽤户注册的表单,那么就要写⼀个user.java。它的属性要和能从表单上获得的数据进⾏对应。
2.写html表单,并使⽤action将表单提交⾄对应映射地址
关于表单的介绍可以参考这篇博客:
这⾥就写⼀个最简单的表单⽰例好了:
<form action=""><!--注意这⾥双引号的内容是处理它的servlet映射地址,也即servlet中@webservlet相同-->
⽤户名:<input type="text"name="username"><br/>
<input type="submit"value="提交">
</form>
3.servlet页⾯中——覆写dopost或doget
request.setCharacterEncoding("utf-8");
user u = new user();
string username;
try
{
username = Parameter("username");//获取字符串和之前jsp页⾯中标签的名字对应(name属性)
favorites = ParameterValues("favorites");//获取字符串数组(⽤于获取多个复选按钮的值)
u.setUsername(username);
…
//把注册成功的⽤户对象保存在session中
//跳转到注册成功页⾯
}
catch(Exception ex)
{
ex.printStackTrace();
}
解释⼀下这⾥的setAttribute:
setAttribute这个⽅法,在JSP内置对象session和request都有这个⽅法,这个⽅法作⽤就是保存数据,可以⽤getAttribute⽅法来取出。⽐如现在有个User对象:User curruser = new User("zhangsan", 20, "
男");,那么将它保存下来有两种⽅法:
1. request.setAttribute(“curruser”, curruser)
这个⽅法是将curruser这个对象保存在request作⽤域中,然后在转发进⼊的页⾯就可以获取到你的值,如果你会⼀些框架的话,那些框架标签也可以获取到,⽐如struts标签,还有jstl。
2. Session.setAttribute("curruser", curruser)
这个⽅法和上⾯唯⼀的区别就是作⽤域,就是在整个程序启动的时候,如果在session中保存了数据,那么在你这个⽆论你在哪个页⾯,在什么时候都可以获取到这个值,。session默认的过期时间是30分钟,过期⽆效,当然session的过期时间是可以被修改的。(我之后应该也会写session吧..⼩声bb).
4.编写servlet跳转后的页⾯
servlet跳转后的jsp页⾯(也就是上⽂getRequestDispatcher的XXX.jsp)
html中提交表单用什么属性//写在开头,import上⾯的servlet⽂件
<%@ page import="" %>//包名.类名
/
/写在body,这⾥⽤到了javabean,会在之后的博客中介绍(希望我能记得回来加上链接)
//id对应上⽂set的Attribute,class对应user那个类的完整名称:包名.users
<jsp:useBean id="regUser"class=""scope="session"/>
<table>
<tr>
<td class="title">⽤户名:</td>
<td class="content"> <jsp:getProperty name="regUser"property="username"></td>
</tr>
<tr>
<td class="title">爱好:</td>
<td class="content">
<%
String[] favorites = Favovites();
for(String f:favorites)
{
%>
<%=f%>
<%
}
%>
</tr>
5.关于路径跳转——相对路径问题(⾮常重要,不清楚的话很容易404)
①绝对路径
绝对路径可以使⽤path变量:<a href="<%=path%>/servlet/HelloServlet"></a>
关于path-
⼀般置于jsp⽂档开头(可以看成是项⽬根⽬录,/代表的是服务器根⽬录)
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%
String path = ContextPath();
%>
②相对路径
form表单的action中:/代表服务器根⽬录,⽽不是项⽬根⽬录,也即在写映射地址时不需要在前⾯加
上/(直接写映射地址),如果在最前⾯加了/则需要写为/项⽬或者叫⼯程名/映射地址。区别就是要在中间多写⼀个⼯程名。
例如:在映射地址为@webservlet("/loginAction")时,可以这样写:action = "loginAction"或action = "/webProjectName/loginAction"
请求重定向⽅式跳转时 /表⽰服务器根⽬录,要跳转到项⽬根⽬录下的某⽂件:
response.ContextPath()+"/XXX.jsp");
或者直接response.sendRedirect("XXX.jsp");
请求转发(服务器内部跳转)getRequestDispatcher中的 XX.jsp,/表⽰的是项⽬根⽬录。
此时getRequestDispatcher("xx.jsp")等同于getRequestDispatcher("/xx.jsp")
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论