jsp之javaweb在学习

本文详细介绍了JSP内置对象的使用方法,包括request、response、session等,通过具体示例展示了如何利用这些对象处理用户请求、响应及会话管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Jsp内置对象

  • request对象

客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应。它是HttpServletRequest类的实例。request对象具有请求域,即完成客户端的请求之前,该对象一直有效。常用方法如下:

  1. String getParameter(String name) 返回name指定参数的参数值
  2. String[] getParameterValues(String name) 返回包含参数name的所有值的数组
  3. void setAttribute(String, Object) 存储此请求中的属性
  4. Object getAttribute(String name) 返回指定属性的属性值
  5. String getContentType() 得到请求体的MIME类型
  6. String getProtocol() 返回请求用的协议类型及版本号
  7. String getServerName() 返回接收请求的服务器主机名

--

用户注册表单

<body>
<h1>用户注册</h1>
<hr>
<form name="regForm" action="request.jsp" method="post"">
<table>
    <tr>
        <td>用户名</td>
        <td><input type="text" name="username"> </td>
    </tr>

    <tr>
        <td>
            <input type="checkbox" name="favorite" value="read"> 读书
            <input type="checkbox" name="favorite" value="music"> 音乐
            <input type="checkbox" name="favorite" value="movie"> 电影
            <input type="checkbox" name="favorite" value="internet"> 上网
        </td>
    </tr>

    <tr>
        <td colspan="2"> <input type="submit" value="提交"> </td>
    </tr>

</table>
</form>
</body>

request.jsp

<body>
    <h1>request内置对象</h1>
    <%
        request.setCharacterEncoding("utf-8"); //解决中文乱码
    %>
    用户名:<%= request.getParameter("username") %><br>
    爱好:<% 
            String[] favor = request.getParameterValues("favorite");
            for(int i=0; i<favor.length; i++){
                out.println(favor[i]+" ");
            }
        %><br>

    请求体的MIME类型:<%= request.getContentType() %><br>
    协议类型及版本号:<%= request.getProtocol() %><br>
    服务器主机名:<%= request.getServerName() %><br>
    服务器端口号:<%= request.getServerPort() %><br>
    请求客户端的IP地址:<%= request.getRemoteAddr() %><br>
    请求的真实路径:<%= request.getRealPath("request.jsp")  %><br>
</body>
  • response对象

response对象包含了响应客户请求的有关信息,但在Jsp中很少直接用到它。它是HttpServletResponse类的实例。response对象具有页面作用域,即访问一个页面时,该页面内的response对象只能对这次访问有效,其它页面的response对象对当前页面无效

常用方法如下: 
1. String getCharacterEncoding() 返回响应用的是何种字符编码 
2. void setContentType(String type) 设置响应的MIME类型 
3. PrintWriter getWriter() 返回可以向客户端输出字符的一个对象 
4. sendRedirect(java.lang.String.location) 重新定向客户端的请求

  • 请求转发与请求重定向

请求重定性

客户端行为,response.sendRedirect(),从本质上讲等同于两次请求,第一次请求对象不会保存,地址栏的URL地址会改变。

转发请求

服务器行为,request.getRequestDispatcher().forward(req,resp)是一次请求,转发后请求对象会保存,地址栏的URL地址不会改变。

例如:

login.jsp

response.jsp

<% 
    response.setContentType("text/html;charset=utf-8"); 

    out.println("<h1>response内置对象<h1>");

    //请求重定向
    //response.sendRedirect("request.jsp");

    //请求转发
    //request.getRequestDispatcher("request.jsp").forward(request, response);

%>      

request.jsp

  • session

session表示客户端与服务器的一次会话 
Web中的session指的是用户在游览某个网站时,从进入网站到游览器关闭所经过的这段时间,也就是用户游览这个网站所花费的时间 

从上述定义中可以看到,session实际上是一个特定的时间概念

  • session对象

session对象是一个Jsp内置对象。 
session对象在第一个Jsp页面被装载时自动创建,完成会话期管理。 
从一个客户打开游览器并连接服务器开始,到客户关闭游览器离开这个服务结束,被称为一个会话。 
当一个客户访问一个服务器时,可能会在服务器的几个页面之间切换,服务器应当通过某种办法知道这是一个客户,就需要session对象。 
session对象是HttpSession类的实例。

session对象常用方法

  1. long getCreationTime() 返回Session创建时间
  2. String getId() 返回session创建时Jsp引擎为它设置的唯一ID号
  3. void setAttribute(String name, Object value) 使用指定名称将对象绑定到此会话
  4. Object getAttribute(String name) 返回与此会话中的指定名称绑定在一起的对象,如果没有对象绑定在该名称下,则返回null。
  5. String[] getValueNames() 返回一个包含此session中所有可用属性的数组
  6. void setMaxInactiveInterval(int max) 设置session最大生存期限(单位秒)
  7. int getMaxInactiveInterval() 返回两次请求间隔多长时间此session被取消(单位秒)

--

例如

session_page01.jsp

<h1> session 内置对象</h1>
<% 
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
    session.setAttribute("username", "Jack");
    session.setAttribute("password", "11111");

    //设置当前session最大生存期限单位是秒
    session.setMaxInactiveInterval(5);
%>

session创建时间<%=sdf.format(session.getCreationTime()) %> <br>
session的ID编号<%=session.getId() %> <br>
从session中获取用户名:<%=session.getAttribute("username") %> <br>

<a href="session_page02.jsp">跳转到session_page02</a> <br>

session_page02.jsp

<h1>session内置对象</h1>

session的ID编号<%= session.getId() %> <br>
从session中获取用户名:<%=session.getAttribute("username") %> <br>
session中保存的属性有:<% 
                    String names[] = session.getValueNames();
                    for(int i=0; i<names.length; i++){
                        out.println(names[i] + " ");
                    }
                    %><br>
  • session生命周期

创建

当客户端第一次访问某个Jsp或者Servlet时候,服务器会为当前会话创建一个sessionId,每次客户端向服务器发送请求时,都会将此sessionId携带过去,服务端会对此sessionId进行校验。

活动

  • 某次会话当中通过超链接打开的新页面属于同一次会话
  • 只要当前会话页面没有全部关闭,重新打开新的游览器窗口访问同一项目资源时属于同一次会话。
  • 除非本次会话的所有页面都关闭后再重新访问某个Jsp或者Servlet将会创建新的会话。
  • 注意原有会话还存在,只是这个旧的sessionId仍然存在于服务器,只不过再也没有客户端会携带它然后交于服务器校验。

销毁

  1. 调用session.invalidate()方法
  2. session过期(Tomcat默认超时时间为30分钟)
  3. 服务器重新启动
  • 实现用户登录(不带数据库的)

用户名admin,密码admin,登录成功使用服务器内部转发到login_success.jsp页面,并且提示登录成功的用户名。如果登录失败,则请求重定向到login_failure.jsp页面。

login.jsp

<body>

<h1>用户登录</h1>
<hr>
<form action="dologin.jsp" name="loginForm" method="post">

<table>
<tr>
    <td>用户名:</td>
    <td><input type="text" name="userName"></td>
</tr>

<tr>
    <td>密码:</td>
    <td><input type="password"" name="password"></td>
</tr>

<tr>
    <td colspan="2"><input type="submit" value="登录">  </td>
</tr>


</table>
</form>

</body>

dologin.jsp

<% 
String userName = request.getParameter("userName");
String password = request.getParameter("password");

if("admin".equals(userName) && "admin".equals(password)){
    session.setAttribute("user", "admin");
    //服务器内部转发
    request.getRequestDispatcher("login_success.jsp").forward(request, response);
}else{
    //请求重定向
    response.sendRedirect("login_fail.jsp");
}
%>

login_success.jsp

<body>
<% 
    String user = ""; 
    if(session.getAttribute("user") != null){
        user = session.getAttribute("user").toString();
    }
%>
<h1>欢迎<font color="red"><%= user %>  </font>登陆成功</h1>
</body>

login_fail.jsp

<body>
<h1>登陆失败,请检查</h1>
<a href="login.jsp">返回</a>
</body>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值