Java小白进阶之路(二)----Java web

 

1、JSP:

JSP全称Java Server Pages,是一种动态网页开发技术。它使用JSP标签在HTML网页中插入Java代码。标签通常以<%开头以%>结束。中文名叫java服务器页面。

下面通过一个简单的图书管理系统的例子简单介绍JSP等其他的功能。

登陆页面:

form表单的属性:method="post"  是以post的方式进行发送,οnsubmit="return login()"  如果为假值不会继续执行action,在点击提交按钮时先触发onsubmit()函数,然后再将数据发送到Servlet执行action跳转的Servlet。herf="#login"  将会跳转到 id 值为login的地方。

    

用户名:

密码:



忘记密码

2、servlet

当接受的数据发送方式为 post 时,触发doPost方法,在 dopost 的方法里调用 doGet 方法,相当于也是post方式。

protected void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {
        doGet(request, response);
    }

Servlet.login:

通常在Servlet中进行对用户的登陆验证,数据库的查询,以及页面的转发和重定向。

protected void doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {
        // 获取前端的参数
        String username = request.getParameter("user");
        String password = request.getParameter("password");
        String auto = request.getParameter("auto");
        // 初始化一个udao用于数据库查询。
        UserDao udao = new UserDao();
        User user = udao.login(username, password);
        if(user!=null){
            if(auto!=null){
                // 将用户名和密码存进Cookie中,用于自动登陆。
                Cookie cookie = new Cookie("auto",username+"_"+password);
                cookie.setPath("/");
                cookie.setMaxAge(60*60*24);
                response.addCookie(cookie);
            }
            String tag = user.getRule();
            // 初始化一个session对象。将用户对象放进session中。
            HttpSession session = request.getSession();
            session.setAttribute("user",user);
            session.setAttribute("tag","1");  // 加一条信息防止恶意打开其他页面
            if("0".equals(tag)){
                // 转发请求
                request.getRequestDispatcher("/user?flag=select&pno=1").forward(request,response);
            }else {
                request.getRequestDispatcher("/admin?flag=select&pno=1").forward(request,response);
            }
        }else {
            // 请求进行重定向
            request.getRequestDispatcher("/Login.jsp").forward(request,response);
        }
    }

通过request.getParameter("name value"); 获取值的时候,如果遇到汉字就会乱码,对于乱码的地方用:

String name = new String(request.getParameter("name value").getBytes("ISO-8859-1"),"UTF-8");

对于复选框的多个值, 通过 request.getParameterValues(""); 方法获取一个数组。

String[] values = request.getParameterValues("name value");

存一个Cookie:

// 初始化一个Cookie对象,名字为“auto”,值为username和password
Cookie cookie = new Cookie("auto",username+"_"+password);
// 设置Cookie路径
cookie.setPath("/");
// 设置Cookie的最大存活时间,单位为秒
cookie.setMaxAge(60*60*24);
// 添加Cookie
response.addCookie(cookie);

存session:

// 初始化一个session对象
HttpSession session = request.getSession();
// 将一个值或对象加到session中
session.setAttribute("user",user);

存在请求中:

// 请求中加入一个对象或值,并设置key值
request.setAttribute("list",list);

转发和重定向的区别:

1、转发在服务器端完成的;重定向是在客户端完成的。2、转发的速度快;重定向速度慢。3、转发的是同一次请求;重定向是两次不同请求。4、转发不会执行转发后的代码;重定向会执行重定向之后的代码。5、转发地址栏没有变化;重定向地址栏有变化。6、转发必须是在同一台服务器下完成;重定向可以在不同的服务器下完成。重定向,不会共享request。

session和request的区别:

request对象的生命周期:是针对一个客户端(说确切点就是一个浏览器应用程序)的一起请求 当请求完毕之后,request里边的内容也将被释放点,而session的生命周期:也是针对一个客户端 但是却是在别人设置的会话周期内(一般是20-30分钟) session里边的内容将一直存在 即便关闭了这个客户端浏览器 session也不一定会马上释放掉的。 

request和session的优点和缺点很明显 :request占用资源比较少,安全性也比较高,可是相对来说,缺乏持续性。

session则相对来说,对资源的消耗会大点,安全性相对来说也会稍微低点,可是它能实现比如会话跟踪技术。

request的作用域范围只在两个相邻页面起作用,而在三个或三个以上的页面就不行!要用session,session的作用域比request的强!

与数据库有关的操作:

在项目中数据库的地位举足轻重,大体可分为:连接数据、编写sql语句、执行sql语句并处理查询结果、关闭数据库连接。这只是一个简单的单表查询,后面还有多表查询。

public Type get(String id){
        Type type = null;
        try {
            // 连接数据库
            super.connect();
            String sql = "select * from type where status=?";
            // 预编译sql语句
            pstmt = conn.prepareStatement(sql);
            // 将第一个?的值设为id
            pstmt.setString(1,id);
            // 真正执行sql语句
            rs = pstmt.executeQuery();
            // 当有下一个查询结果时才继续执行。
            while (rs.next()){
                type = new Type();
                // type的Status属性设置为从数据库里查询的第一条结果。
                type.setStatus(rs.getString(1));
                type.setContent(rs.getString(2));
            }
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            // 关闭数据库连接
            super.closeAll();
        }
        return type;
    }

3、JSTL(JSP标准标签库)

(1)、EL表达式:在 JSP 中简化表达式的方法,让Jsp的代码更加简化。

1、语法结构:${expression}

 ${x.id}

2、[ ]与.运算符

EL 提供“.“和“[ ]“两种运算符来存取数据。

当要存取的属性名称中包含一些特殊字符,如 . 或 - 等并非字母或数字的符号,就一定要使用“[ ]“。

3、可以使用三目运算符用作判断,当比较两个字符串的值是否相同是用 ‘==’,不用equals。当使用${user.username}时相当于<%user.getUsername()%>,  当${user.username}不存在时不会报错错误<%user.getUsername()%>

(2)、taglib指令:定义一个标签库以及其自定义标签的前缀.。

使用之前需要导入jstl的jar包和一条指令:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

指令:就是判断指令

// test用于条件的判断

    条件为真执行我

指令:for循环指令

// var 就是用于迭代的变量,items 是一个可迭代的对象

      我是循环体

指令:就是赋值语句

// var是变量的名字,value是要赋的值,scope是作用于范围

在项目中用于循环生成一些表格数据:

        
            
                ${x.id}
                ${x.name}
                ${x.author}
                ${x.price}
                ${x.storage_time}
                ${x.content.content}
                删除
            
        

 

 

你可能感兴趣的:(Java)