jsp之javaweb在学习

来源:互联网 发布:java项目获取src路径 编辑:程序博客网 时间:2024/05/07 14:04

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>
0 0
原创粉丝点击