表单数据"/>
servlet之获取表单数据
-
-
- 1.写一个.java文件——实体类(用于储存表单数据)
- 2.写html表单,并使用action将表单提交至对应映射地址
- 3.servlet页面中——覆写dopost或doget
- 4.编写servlet跳转后的页面
- 5.关于路径跳转——相对路径问题(非常重要,不清楚的话很容易404)
-
1.写一个.java文件——实体类(用于储存表单数据)
假设是一个用户注册的表单,那么就要写一个user.java。它的属性要和能从表单上获得的数据进行对应。
2.写html表单,并使用action将表单提交至对应映射地址
关于表单的介绍可以参考这篇博客:html表单
这里就写一个最简单的表单示例好了:
<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 = request.getParameter("username");//获取字符串 和之前jsp页面中标签的名字对应(name属性)favorites = request.getParameterValues("favorites");//获取字符串数组(用于获取多个复选按钮的值)u.setUsername(username);…//把注册成功的用户对象保存在session中request.getSession().setAtrribute("regUser",u)//跳转到注册成功页面request.getRequestDispatcher("../XXX.jsp").forward(request,response);//..表示上一级 request和response这两个参数就是doGet和Post函数的参数}
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. request.getSession.setAttribute("curruser", curruser)
这个方法和上面唯一的区别就是作用域,就是在整个程序启动的时候,如果在session中保存了数据,那么在你这个无论你在哪个页面,在什么时候都可以获取到这个值,。session默认的过期时间是30分钟,过期无效,当然session的过期时间是可以被修改的。(我之后应该也会写session吧..小声bb).
4.编写servlet跳转后的页面
servlet跳转后的jsp页面(也就是上文getRequestDispatcher的XXX.jsp)
//写在开头,import上面的servlet文件
<%@ page import="xxx.xxx" %>//包名.类名//写在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 = regUser.getFavovites();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 = request.getContextPath();
%>
②相对路径
form表单的action中:/代表服务器根目录,而不是项目根目录,也即在写映射地址时不需要在前面加上/(直接写映射地址),如果在最前面加了/则需要写为/项目或者叫工程名/映射地址。区别就是要在中间多写一个工程名。
例如:在映射地址为@webservlet("/loginAction")
时,可以这样写:action = "loginAction"
或action = "/webProjectName/loginAction"
web.xml文档的url-pattern中:/表示项目根目录,而不再是服务器根目录。 因此在web.xml中配置时需要在最前面加上/,如果在这个文件中写错了的话服务器启动的时候可能就会报错。
请求重定向方式跳转时 /表示服务器根目录,要跳转到项目根目录下的某文件:
response.sendRedirect(request.getContextPath()+"/XXX.jsp");
或者直接response.sendRedirect("XXX.jsp");
请求转发(服务器内部跳转)getRequestDispatcher
中的 XX.jsp,/表示的是项目根目录。
此时getRequestDispatcher("xx.jsp")
等同于getRequestDispatcher("/xx.jsp")
更多推荐
servlet之获取表单数据
发布评论