JavaWeb——JSP_06学习笔记

JSP_06

前言:JSP_05大概了解了cookie和session,现在开始实际应用。

 

一、回顾

加深对cookie和session的了解。

 

二、Cookie的使用

1、七天免登录

dologin.jsp

<%@page import="com.dao.impl.UserDao"%>
<%@page import="java.net.URLEncoder"%>
<%@page import="java.net.URLDecoder"%>
<%@page import="oracle.jdbc.driver.OracleDriver"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
​
    <-- jsp标签 待会补充说明-->
    <jsp:useBean id="u" class="com.entity.Users"></jsp:useBean>
    <jsp:setProperty property="uname" name="u"/>
    <jsp:setProperty property="pwd" name="u"/>
    
<%
//设置编码方式
request.setCharacterEncoding("UTF-8");
​
//获取表单信息
String name=u.getUname();
String pwd=u.getPwd();
        
//判断是否记住密码
String jzmm=request.getParameter("jzmm");
        
//如果登录验证成功
if(new UserDao().login(name, pwd)){
    //为session添加一个值--对象u
    session.setAttribute("user", u);
    //创建cookie,以utf-8编码保存
    Cookie c=new Cookie("uname",URLEncoder.encode(name,"utf-8"));
    //设置保存时间7天
    c.setMaxAge(60*60*24*7);
    //响应给浏览器,保存到硬盘
    response.addCookie(c);
    
    //创建记住密码的cookie
    Cookie c1=null;
    if(jzmm!=null){
        //如果记住密码保存用户密码
        c1=new Cookie("upwd",URLEncoder.encode(pwd,"utf-8"));
    }else{
        //否则保存 ""
        c1=new Cookie("upwd","");
    }
    c1.setMaxAge(60*60*24*7);
    response.addCookie(c1);
    
    //在线人数 application 
    //获得在线人数
    Object count=application.getAttribute("online");
    //如果不为空,在原来的基础上+1
    if(count!=null){
    application.setAttribute("online",((Integer)application.getAttribute("online"))+1);
    }else{
    //否则初始化application
        application.setAttribute("online", 1);
    }
    response.sendRedirect("/Web_01/news/index.jsp");
}else{
    out.print("<script>alert('登录失败');location.href='/Web_01/login.jsp'</script>");
}
​
%>

再看看登录界面login.jsp

<%
//用户不是第一次登录且保存的cookie没有到期,每次进来都可以拿到该页面的cookie
String name="";
String pwd=""; 
//通过request获得cookie
Cookie []cs=request.getCookies();
if(cs!=null){
for(Cookie c:cs){
    if(c.getName().equals("uname")){
        //utf-8解码赋值给name
        name=URLDecoder.decode(c.getValue(),"utf-8");
    }
    if(c.getName().equals("upwd")){
        pwd=URLDecoder.decode(c.getValue(),"utf-8");
    }
}
}
​
//如果用户选择了记住了密码,即pwd不为 "",然后创建session并且自动登录
if(!pwd.equals("")){
session.setAttribute("username", name);
out.print("<script>alert('已自动登录');location.href='/Web_01/news/index.jsp'</script>");
}
%>
​
​
<-- 表单部分 将我们取到的cookie值赋值到输入框中 记住密码为复选框 使用了一个三元运算符
    pwd==""?"":"checked" 如果密码不为空字符,就输出checked 默认复选框选中
-->
<form action="dologin.jsp" method="get" onsubmit="return checkForm()">
                   <div id="user">    用 户
                     <input value="<%=name %>" id="a1" type="text" name="uname" />
                   </div>
                   <div id="password">密   码
                     <input value="<%=pwd %>" id="a2" type="password" name="pwd" />
                   </div>
                   <div id="yzm">     验证码
                     <input id="a3" type="text" name="yzm" /><sapn id="a4">XXXX</sapn>
                   </div>
                   <div>              记住密码
                     <input <%=pwd==""?"":"checked" %> type="checkbox" name="jzmm" />
                   </div>
                   <div id="btn">
                        <button type="submit">登录</button>
                        <button type="reset">清空</button>
                   </div>
              </form>

捋一下顺序,

首先是进入login.jsp,如果用户第一次访问,浏览器并未保存有他的cookie,为输入框赋值都为空字符,并没有记住密码的效果。

登录(请求仅携带保存了sessionid的cookie访问主界面)之后会由网络服务器产生cookie并响应给浏览器保存。中途会访问dologin.jsp,服务器编译dologin.jsp,在编译该句session.setAttribute("user", u);时,服务器根据携带过来的sessionid找到对应session赋值。再创建cookie并响应给浏览器。之后进入主界面(访问主界面index.jsp),服务器编译index.jsp中该句<%=session.getAttribute("user")%>时,也会根据请求带过来的sessionid觉得拿对应session取值。当session到期时,就会得到null,就让用户重新登录,重新建立联系。

下次该用户访问可以实现免登录了。

cookie是以明文保存的,所有用户密码应该经过不可逆加密算法加密后保存为上策。

Java中自带一个包:security分享我学习到的一个加密算法(来自一位博主)。我打开了源码进行翻译之后为大家写上了助于理解的注释。

•import java.security.MessageDigest;
​
    //定义char数组
    private static char[] hex={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
    
    /**
     * 加密算法 将密码以以下运算符计算规律的加密
     * @param bytes 
     * @return  
     */
    private static String byte2str(byte []bytes) {
        int len=bytes.length;
        StringBuffer result=new StringBuffer();
        for (int i = 0; i < len; i++) {
            byte byte0=bytes[i];
            result.append(hex[byte0 >>> 4 & 0xf]);
            result.append(hex[byte0 & 0xf]);
        }
        return result.toString();
    }
    
    /**
     * 加密方法
     * @param pwd 需要加密的密码
     * @return 加密后的密码
     */
    public String myMd5(String pwd) {
        String str="";
        try {
            //创建指定算法的信息摘要对象
            MessageDigest md5 =MessageDigest.getInstance("MD5");
            //使用指定的字节数组(pwd)更新摘要 可以理解为为信息摘要对象的摘要赋值
            md5.update(pwd.getBytes());
  //md5.digest() 返回通过执行诸如填充之类的最终操作来完成哈希计算的哈希值的字节数组,然后更新摘要    
  //理解为将摘要进行计算后返回一个字节数组,再初始化摘要
            //调用加密算法加密机
            str=byte2str(md5.digest());
            return str;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return str;
    }

2、浏览记录

可以根据程序需求用cookie保存信息。

思路:用户执行某操作后使用cookie保存信息,需要时使用request取出对应cookie使用即可,可以自己尝试实现。

三、application应用级别对象

一个tomcat只有一个,值是全局共享的,整个tomcat都是一个application。可以用application来做在线人数功能。dologin.jsp有使用。

 

四、jsp标签

1、6个常用jsp标签。

1.<jsp:include page="页面"> 包含

2.<jsp:param name="name" value="va"> 传参

3.<jsp:foward page="页面"> 转发

4.<jsp:useBean id="u" class="com.entity.Users">相当于实例化类

5.<jsp:setProperty property="uname" name="u"/>给useBean属性设置值

6.<jsp:getProperty property="uname" name="u"/>取值

注意:使用userBean时,class的格式要求

实践可得:setProperty的name要和实体类中的属性一致,应用到表单提交也要和表单中的input标签的name一致,否则取值为null或者报错。

在上面的cookie七天免登录中有使用到过。

<jsp:useBean id="u" class="com.entity.Users">等于Users u=new Users();

<jsp:setProperty property="uname" name="u"/>等于u.setUname("张三");

<jsp:getProperty property="uname" name="u"/>等于u.getUname();

 

2、jsp包含标签和包含指令的区别:

<%@include file="../yz.jsp"%>

  • 不会对yz.jsp进行编译,运行之后可以在tomcat的work目录下查看是否有编译yz.jsp文件。

  • 不能传参

<jsp:include page="页面">

  • 会对页面进行编译

  • 能传参

下面是一个分类实例:

type.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
//设置编码方式
request.setCharacterEncoding("utf-8");
​
//获得类型id
String ntid=request.getParameter("ntid");
​
//里氏替换原则实例化UserBiz()
IUserBiz iub=new UserBiz();
​
//根据类别id查出新闻
List<News> li=iub.getByT(ntid);
//便利
if(li!=null){
%>
 <h1> <img src="/Web_01/images/title_<%=ntid %>.gif" /> </h1>
 <div class="side_list">
 <ul>
<% 
    for(News n:li){
%>
        <li> <a href='/Web_01/news/read.jsp?nid=<%=n.getNid() %>'><b><%=n.getNtitle() %> </b></a> </li>
<%
    }
}
%>
 </ul>
    </div>

index.jsp

<div class="sidebar">
    <jsp:include page="type.jsp">
        <jsp:param value="1" name="ntid"/>
    </jsp:include>
    <jsp:include page="type.jsp">
        <jsp:param value="2" name="ntid"/>
    </jsp:include>
    <jsp:include page="type.jsp">
        <jsp:param value="3" name="ntid"/>
    </jsp:include>
  </div>

如果不使用包含标签是不是要在主界面进行三次便利集合,操作麻烦。而这里仅仅使用标签即可,标签上的type.jsp会进行编译。效果如下

五、总结

加深理解了cookie和session的区别和使用。理论知识助于理解,动手敲才是真理。住大家学业有成,工作顺利!!!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
JSP(JavaServer Pages)是一种服务器端的动态网页开发技术,它可以将 Java 代码嵌入 HTML 页面中,从而实现动态网页的生成。 JSP 的基本原理是将 JSP 页面翻译成 Servlet,在服务器端执行 Servlet 代码,再将执行结果返回给客户端。因此,我们在使用 JSP 开发网页时,需要先了解 Servlet 的相关知识。 JSP 的语法基本上就是 HTML 标签加上 Java 代码。以下是一些基本的 JSP 标签: 1. <% ... %>:嵌入 Java 代码,可以用于定义变量、写循环、判断语句等。 2. <%= ... %>:输出 Java 代码的执行结果。 3. <%-- ... --%>:注释,不会被翻译成 Servlet。 4. <jsp:include ... />:包含其他 JSP 页面或 HTML 页面。 5. <jsp:forward ... />:将请求转发到其他资源(JSP 页面、Servlet 或 HTML 页面)。 6. <jsp:useBean ... />:创建 JavaBean 对象。 7. <jsp:setProperty ... />:为 JavaBean 对象设置属性。 8. <jsp:getProperty ... />:取得 JavaBean 对象的属性值。 在 JSP 页面中,我们还可以使用 EL 表达式和 JSTL 标签库来简化代码编写,提高开发效率。 EL(Expression Language)表达式是一种简化的表达式语言,可以用于取值、赋值、计算等操作。例如,${name} 表示取得名为 name 的变量的值。 JSTL(JavaServer Pages Standard Tag Library)是一套标签库,提供了循环、条件判断、格式化、国际化等常用功能的标签。例如,<c:forEach> 标签可以用于循环遍历集合,<c:if> 标签可以用于条件判断。 除了以上标签库,JSP 还支持自定义标签库。我们可以通过编写标签处理器来扩展 JSP 的功能。 JSP 的优点是可以将 Java 代码嵌入 HTML 页面中,使得网页的开发更加灵活和方便。但是,由于 JSP 页面需要翻译成 Servlet,因此会增加服务器的负担和响应时间。此外,JSP 页面中夹杂着 Java 代码,也不利于代码的维护和调试。因此,在开发大型网站时,建议使用 MVC 设计模式,将业务逻辑和视图分离,使得代码更加清晰和易于维护。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小张同学_java

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

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

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

打赏作者

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

抵扣说明:

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

余额充值