servlet之获取表单数据

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"> &nbsp; <jsp:getProperty name="regUser" property="username"></td>
</tr>
<tr>
    <td class="title">爱好:</td>
    <td class="content">&nbsp; 
        <%
            String[] favorites = regUser.getFavovites();
            for(String f:favorites)
            { 
        %>
            <%=f%> &nbsp;
        <%
            }
        %>

</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")

  • 13
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值