java获取网页表单数据,转发与重定向,使用application统计访问次数

这是一个关于Java Web应用中处理用户注册的示例,涉及到表单数据获取、重定向与转发、会话(session)及应用程序(application)作用域的使用。当用户提交的姓名不是'张三'时,会话中存储信息并重定向到错误页面;否则,使用转发显示注册成功页面,并更新访问次数。此外,还讨论了session的管理,包括设置会话过期时间和清除session内容。
摘要由CSDN通过智能技术生成

初始界面

 提交后跳转到doUser来处理信息

 在<%%>内可以写进java代码,来获得表单内部用户提交的信息

​​​​<%
           request.setCharacterEncoding("UTF-8");

           String name=request.getParameter("name");
           String pwd=request.getParameter("pwd");
           String sex=request.getParameter("sex");
           //爱好
            String[] loves=request.getParameterValues("love");
       %>

如果姓名不为张三则进入注册失败的页面

使用的是重定向:

response.sendRedirect(request.getContextPath()+"/shibai.jsp");

其中request.getContextPath()为,返回上一级目录

因为request的作用域只有一次请求内,重定向进行了两次请求,而session的作用域是一整个会话,所以这里使用了session来保存用户的信息,

(session保存的本质是键值对,这里的爱好是一个字符数组,是不建议保存在session里的)

姓名为张三则进入注册成功页面

使用的是转发:

request.getRequestDispatcher("chengg.jsp").forward(request,response);
<%

           if (!name.equals("张三")){
               session.setAttribute("name",name);
               session.setAttribute("pwd",pwd);
               session.setAttribute("sex",sex);
                session.setAttribute("loves",loves);
//               request.setAttribute("mess","注册失败");
              response.sendRedirect(request.getContextPath()+"/shibai.jsp");
           }
       else{
           request.setAttribute("mess","注册成功");
           request.getRequestDispatcher("chengg.jsp").forward(request,response);

       }
       %>

session:

ession更像服务器用来记录客户状态的一种机制

每一个sessin都有个自己的ID,可以区别每个用户的操作并且区分开

一次session就叫一次会话

一次会话就是用户访问一次服务器的过程

会话比请求(request)范围更大,会话可以包含多个请求

同一个机器同一个浏览器是同一个session

不一样的浏览器是不一样的session

可以用

out.print(session.getId());

来查看当前的session的id

以进入失败页面为例:

因为注册成功时成功页面的跳转使用的方法是转发,只进行了一次请求(request)所以可以在进入成功页面后再使用request来获取用户信息,除了可以使用request这个区别,其他的和失败页面类似

进入失败页面后

因为session里保存的是键值对,所以使用键名来获得值

访问次数:使用application

application内数据也是键值对

先创建一个cont,若是第一次访问,这时cont为null,给它赋值为1

第一次之后的访问时cont不为null,set application内的cont值加一

application的数据是整个项目共享的,而且不同的session可以操作同一个数据

所以不同的session访问这个项目的网页都会增加访问次数

若是重启服务器,则application里的数据会重置

 <%
        Object name=session.getAttribute("name");
        Object pwd=session.getAttribute("pwd");
        Object sex=session.getAttribute("sex");
        Object aihao=session.getAttribute("loves");
//        Object[] loves=request.getParameterValues("love");
        Object cont=application.getAttribute("cont");
        if(cont==null){
            application.setAttribute("cont",1);
        }else {
            Integer i=(Integer)cont;
            application.setAttribute("cont",i+1);
        }

        Integer i=(Integer)application.getAttribute("cont");
        out.println("访问次数:"+i);
    %>
    <br/>
    用户名:<%=name%><br/>
    密码:<%=pwd%><br/>
    性别:<%=sex%><br/>
    爱好:<%
        String[] str=(String[])aihao;
        for (String hobby:str){
            String hobb=(String)hobby ;
            out.print(hobb+",");

        }%>

session是放服务器端的,所以东西尽量不放在session里,会影响服务器的性能,所以可以对session做清除和过期的操作

方法一:会话失效:

session.invalidate();

方法二:通过键名移除session内的属性

session.removeAttribute("username");

方法三:服务器主动清除长期没有发出请求的会话

public void setMaxinactiveInterval(int interval);

Servlet 容器指示该 session 会话无效之前,指定客户端请求之间的时间,以秒为单位

方法四:在配置文件中(web.xml)里更改会话过期时间

<session-config>
<session-timeout> 30</session-timeout>
</session-config>

单位为分钟

四个jsp的源码:

初始页面

<%@ page import="javax.xml.crypto.Data" %>
<%@ page import="java.time.LocalDate" %><%--

--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
    <link rel="stylesheet" href="./css/css.css">
    <script type="text/javascript" src="./js/jquery-3.5.1.js"></script>
    <script src="./js/js.js"type="text/javascript"></script>



</head>
<body>
<div class="zong">
    <div class="head">
        <p>注册 | 登录 | 帮助</p>
        <%
            String hello="hello world";
            LocalDate date = LocalDate.now();
        %>
        <% out.print("当前时间是:"+date); %>
    </div>
    <div class="register">
        <form action="doUser.jsp" id="userform" name="userform" method="get">
            <p>
                <label for="">编&#12288;&#12288;&#12288;&#12288;&#12288;号:</label><input name="code" disabled="disabled" value="10010" <!-- required -->/>
            </p>

            <p>
                <label for="">姓&#12288;&#12288;&#12288;&#12288;&#12288;名:</label><input type="text" id="Name" value="请输入你的练习时长" name="name" pattern="[\u4e00-\u9fa5]{2,6}" /> <span class="name">2-6位中文组成</span>
            </p>
            <p>
                <label for="">请&#8194;输&#8194;入&#8194;密&#8194;码:</label><input type="password" name="pwd"> <span class="pwd">请输入6-12位密码</span>
            </p>
            <p>
                <label for="">请再次输入密码:</label><input type="password" name="pwd1" value="请输入正确的邮箱"> <span class="pwd1">请再次输入密码</span>
            </p>
            <p>
                <label for="">性&#12288;&#12288;&#12288;&#12288;&#12288;别:</label><input type="radio" value="男" name="sex" checked/>男
                <input type="radio" value="女" name="sex"/>女
            </p>
            <p>
                <label for="">爱好:</label>
                <input type="checkbox" checked="checked"name="love" value="唱"> 唱
                <input type="checkbox" checked name="love" value="跳">跳
                <input type="checkbox" name="love" value="rap">rap
                <input type="checkbox" name="love" value="篮球">篮球
                <input type="checkbox" name="love" value="music">music
            </p>
            <p>
                <label for="">家&#12288;&#12288;&#12288;&#12288;&#12288;乡:</label>
                <select name="hometown">
                    <option value="1" selected="selected">北京</option>
                    <option value="2">上海</option>
                    <option value="3">广东</option>
                </select>

            </p>
            <p>
                <label for="">Email:&#12288;&#12288;&#12288;&#12288;&#12288;</label> <input type="text" name="email" value=""> <span class="email">ex:123456@qq.com</span>
            </p>

            </p>
            <p>
                <label for="">电&#12288;&#12288;&#12288;&#12288;&#12288;话:</label><input type="text" name="tel" value="请输入您的电话号码" required "> <span class="tel">请输入11位电话号码</span>
            </p>
            <p>

                <input type="submit" value="登录" name="btn" id="submit">
                <%
//                    out.print(session.getId());
                %>
            </p>
        </form>
    </div>
</div>
</body>

<script>

</script>

</html>

初始页面的css


.head
{
    width: 100%;
    text-align: center;
    border-bottom: solid;
    border-bottom-color:#154e79;
    margin: 0px;
}
.register
{
    width: 100%;
    text-align: center;

}

.zong
{
    background-color:#7591ad;
    margin: 0%;
    width:40%;
    border: solid;
    border-radius: 10px;
    border-color:#154e79;
    position: relative;
    left: 30%;
}
label
{
    margin-left: 10%;
    text-align: left;
}
.register p
{
    width: 100%;
    text-align: left;
}
#submit
{
    margin-left: 30%;
}

doUser

<%--
 
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>

       <%
           request.setCharacterEncoding("UTF-8");

           String name=request.getParameter("name");
           String pwd=request.getParameter("pwd");
           String sex=request.getParameter("sex");
           //爱好
            String[] loves=request.getParameterValues("love");
       %>
       用户名:<%=name%><br/>
       密码:<%=pwd%><br/>
       性别:<%=sex%><br/>

       <%

           if (!name.equals("张三")){
               session.setAttribute("name",name);
               session.setAttribute("pwd",pwd);
               session.setAttribute("sex",sex);
                session.setAttribute("loves",loves);
//               request.setAttribute("mess","注册失败");
              response.sendRedirect(request.getContextPath()+"/shibai.jsp");
           }
       else{
           request.setAttribute("mess","注册成功");
           request.getRequestDispatcher("chengg.jsp").forward(request,response);

       }
       %>

</body>
</html>

chengg

<%--

--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
注册成功!
<%
    Object cont=application.getAttribute("cont");
    if(cont==null){
        application.setAttribute("cont",1);
    }else {
        Integer i=(Integer)cont;
        application.setAttribute("cont",i+1);
    }

    Integer i=(Integer)application.getAttribute("cont");
    out.println("访问次数:"+i);
    out.println("用户选择了:");
    String name=request.getParameter("name");
    String pwd=request.getParameter("pwd");
    String sex=request.getParameter("sex");
    String[] loves=request.getParameterValues("love");
%>
<br/>
用户名:<%=name%><br/>
密码:<%=pwd%><br/>
性别:<%=sex%><br/>
爱好:<%
    for (String hobby:loves){
    out.print(hobby+",");
}%>
</body>
</html>

shibai

<%--

--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    注册失败!
    <%
        Object name=session.getAttribute("name");
        Object pwd=session.getAttribute("pwd");
        Object sex=session.getAttribute("sex");
        Object aihao=session.getAttribute("loves");
//        Object[] loves=request.getParameterValues("love");
        Object cont=application.getAttribute("cont");
        if(cont==null){
            application.setAttribute("cont",1);
        }else {
            Integer i=(Integer)cont;
            application.setAttribute("cont",i+1);
        }

        Integer i=(Integer)application.getAttribute("cont");
        out.println("访问次数:"+i);
    %>
    <br/>
    用户名:<%=name%><br/>
    密码:<%=pwd%><br/>
    性别:<%=sex%><br/>
    爱好:<%
        String[] str=(String[])aihao;
        for (String hobby:str){
            String hobb=(String)hobby ;
            out.print(hobb+",");

        }%>



</body>
</html>


 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wsy286047981

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值