Java Web简单学习路线相关案例

JSP元素

一、JSP执行过程

Web容器处理JSP请求有三个阶段:转译(translate)——>编译(compile)——>解释(interpret)

客户端发出请求
Web容器将JSP转译成Servlet源代码
Web容器将产生的源代码进行编译
Web容器加载编译后的代码并执行
把执行结果响应至客户端

第一次请求之后,Web容器可以重用已经编译好的字节码文件。

注意:如果对JSP文件进行了修改,Web容器会重新对JSP文件进行翻译和编译。

二、JSP元素

创建Web项目JSPElementsDemo:
在这里插入图片描述
在web目录创建demo01.html页面:
在这里插入图片描述
在web目录里创建demo02.jsp页面:
在这里插入图片描述
demo02.jsp页面代码:

<%-- 页面指令 --%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%-- 标签库指令 --%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<html>
<head>
    <title>demo02</title>
</head>
<body>
    <%-- 包含指令 --%>
    <%@include file="demo01.html"%>

    <%-- 脚本元素 --%>
    <%
        String msg1 = "Welcome to JSP World!";
    %>

    <%-- 表达式元素 --%>
    <h3><%= msg1 %></h3>

    <%-- 采用标签库和表达式语言(EL:Expression Language)--%>
    <c:set var="msg2" value="Welcome to JSTL World!" scope="page"/>
    <h3><c:out value="${msg2}" /></h3>

    <c:set var="age" value="16" />
    <c:if test="${age >= 18}">
        <h3>欢迎访问本网站~</h3>
    </c:if>
    <c:if test="${age < 18}">
        <h3>本网站不欢迎你~</h3>
    </c:if>

    <c:choose>
        <c:when test="${age >= 18}">
            <h3>欢迎访问本网站~</h3>
        </c:when>
        <c:otherwise>
            <h3>本网站不欢迎你~</h3>
        </c:otherwise>
    </c:choose>

    <%-- 计算1+2+3+...+100的值 --%>
    <%-- (1)脚本方法 --%>
    <%
        int num=0;
        for(int i=1;i<=100;i++){
            num+=i;
        }
    %>
    <h3><%= num %></h3>
    <%-- (2)标签方法 --%>
    <c:set var="sum" value="0" />
    <c:forEach var="i" begin="1" end="100">
        <c:set var="sum" value="${sum + i}" />
    </c:forEach>
    <h3>1+2+3...+100=${sum}</h3>
    <h3>1+2+3...+100=<c:out value="${sum}" /> </h3>
</body>
</html>

启动服务器访问http://localhost:8080/JSPElementsDemo/demo02.jsp:
在这里插入图片描述
包含动作元素jsp:include演示:
在这里插入图片描述
在这里插入图片描述
启动服务器,访问http://localhost:8080/JSPElementsDemo/demo03.jsp:
在这里插入图片描述
转发动作元素jsp:forward演示:
在这里插入图片描述
在这里插入图片描述
在src里创建net.hw.bean包,在里面创建User实体类:
在这里插入图片描述
User实体代码:

package net.xsp.bean;

/**
 * 功能:用户实体类
 * 日期:2019年9月12日
 */
public class User {
    private int id;
    private String username;
    private String password;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

在这里插入图片描述
任务:不用useBean动作元素,用脚本元素与表达式元素来完成上述任务。

<%@ page import="net.xsp.bean.User" %>
<%--
  Created by IntelliJ IDEA.
  User: Stranger
  Date: 2019/9/12
  Time: 10:19
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>demo07</title>
</head>
<body>
    <%-- 创建用户实体对象 --%>
    <jsp:useBean id="user" class="net.xsp.bean.User" scope="page"/>

    <%-- 设置实体属性 --%>
    <jsp:setProperty name="user" property="id" value="1"/>
    <jsp:setProperty name="user" property="username" value="xsping"/>
    <jsp:setProperty name="user" property="password" value="123456"/>

    <%-- 获取实体属性值 --%>
    <h3>id: <jsp:getProperty name="user" property="id"/></h3>
    <h3>username: <jsp:getProperty name="user" property="username"/></h3>
    <h3>passord: <jsp:getProperty name="user" property="password"/></h3>

    <%-- 输出用户实体对象 --%>
    <h3><%= user %></h3>

    <%-- java脚本形式 --%>
    <%
        User u = new User();
        u.setId(2);
        u.setUsername("root");
        u.setPassword("654321");
    %>
    <h3>id: <%= u.getId() %></h3>
    <h3>username: <%= u.getUsername() %></h3>
    <h3>password: <%= u.getPassword() %></h3>
</body>
</html>

在这里插入图片描述
课后作业:编写JSP页面,计算2000~2019年期间有几个闰年。使用表达式输出结果。
在这里插入图片描述
在这里插入图片描述

JPS隐含对象

一、什么是JSP隐含对象

JSP隐含对象是 Web 容器创建的一组对象
JSP隐含对象的名称是JSP 的保留字
JSP隐含对象是可以直接在JSP页面使用的对象,无需使用“new”获取实例

二、JSP隐含对象

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、request对象

在这里插入图片描述
1.在web目录里创建用户注册页面register.jsp
在这里插入图片描述

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>注册</title>
    <script type="text/javascript" src="js/check.js"></script>
</head>
<body>
    <h3 style="text-align: center">用户注册</h3>
    <form action="do_register.jsp" method="post">
        <table border="1" cellpadding="10px" style="margin: 0px auto">
            <tr>
                <td align="center">用户名</td>
                <td><input type="text" id="username" name="username" size="35"></td> <!--设置表单元素的id属性是为了页面JavaScript代码能访问该元素,设置表单元素的name属性是为了表单的处理页面能够通过request.getParameter()方法获取到表单元素的值。-->
            </tr>
            <tr>
                <td align="center">密&nbsp;&nbsp;码</td>
                <td><input type="password" id="password" name="password" size="35"></td>
            </tr>
            <tr>
                <td align="center">你从哪里知道本网站</td>
                <td>
                    <input type="checkbox" name="channel" value="报刊">报刊
                    <input type="checkbox" name="channel" value="网络">网络
                    <input type="checkbox" name="channel" value="朋友推荐">朋友推荐
                    <input type="checkbox" name="channel" value="电视">电视
                </td>
            </tr>
            <tr align="center">
                <td colspan="2">
                    <input type="submit" value="提交" onclick="return checkForm();"> <!-- 为真继续执行下去,为假则不能通过此处验证 -->
                    <input type="reset" value="重置">
                </td>
            </tr>
        </table>
    </form>
    <!--
    <script type="text/javascript">
        function checkForm() {
            // 获取用户名与密码元素
            var txtUsername = document.getElementById("username");
            var txtPassword = document.getElementById("password");
            // 获取用户名与密码数据
            var username = txtUsername.value;
            var password = txtPassword.value;
            // 用户名非空校验
            if (username == "") {
                alert("注意:用户名不能为空!");
                txtUsername.focus(); //获取焦点,使焦点指向username
                return false; // 返回false使它不能通过
            }
            // 密码非空校验
            if (password == "") {
                alert("注意:密码不能为空!");
                txtPassword.focus();
                return false;
            }
            return true;
        }
    </script>
    -->
</body>
</html>

2.在web目录里创建处理注册页面do_register.jsp
在这里插入图片描述

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>显示注册信息</title>
</head>
<body>
    <%
        // 设置请求对象字符编码格式
        request.setCharacterEncoding("utf-8");
        // 读取用户名和密码
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        // 读取渠道复选框的值
        String[] channels = request.getParameterValues("channel");
        StringBuffer buffer  = new StringBuffer();
        if (channels != null) {
            for (String channel: channels) {
                buffer.append(channel + " ");
            }
        }
    %>
    <h3>用户注册信息</h3>
    用户名: <%= username %><br/>
    密&nbsp;码: <%= password %><br/>
    渠&nbsp;道: <%= buffer.toString() %>
</body>
</html>

课堂练习:给用户注册页面添加表单校验,要求用户名与密码非空。
在这里插入图片描述
在这里插入图片描述
其实,我们可以将表单校验脚本提取出来创建一个js文件,然后导入页面来使用。
在这里插入图片描述
删除register.jsp页面里的脚本元素
在这里插入图片描述
导入check.js脚本
在这里插入图片描述
课后作业:注册页面信息的获取。给出了register.jsp,要求编写do_register.jsp,获取注册信息并显示。
在这里插入图片描述

四、response对象

在这里插入图片描述
1.在web目录里创建登录页面login.jsp
在这里插入图片描述
2.在web目录里创建登录处理页面do_login.jsp
在这里插入图片描述
3.在web目录里创建登录成功页面success.jsp
在这里插入图片描述
4.在web目录里创建登录失败页面failure.jsp
在这里插入图片描述

五、out对象

在这里插入图片描述
在这里插入图片描述

六、session 对象

long getCreationTime():取得session产生的时间,单位是毫秒
String getId():取得session 的ID
long getLastAccessedTime():取得用户最后通过这个session送出请求的时间
long getMaxInactiveInterval():取得最大session不活动的时间,若超过这时间,session 将会失效
void invalidate():取消session 对象,并将对象存放的内容完全抛弃
boolean isNew():判断session 是否为"新"的
void setMaxInactiveInterval(int interval):设定最大session不活动的时间,若超过这时间,session 将会失效
void setAttribute():设置session对象的属性
void getAtrribute():获取session对象的属性

案例演示:页面跳转传递会话属性数据
在这里插入图片描述
在这里插入图片描述

利用JDBC访问数据库

一、JDBC相关知识

在这里插入图片描述
在这里插入图片描述

二、创建数据库与表

在这里插入图片描述

三、实例演示——用户登录

创建Web项目LoginDemo01
在这里插入图片描述
User

package net.xsp.bean;

/**
 * 功能:用户实体类
 * 作者:
 * 日期:2019年10月10日
 */
public class User {
    private int id;
    private String username;
    private String password;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

UserDao

package net.xsp.dao;

import net.xsp.bean.User;

/**
 * 功能:用户数据访问接口
 * 作者:
 * 日期:2019年10月10日
 */
public interface UserDao {
    /**
     * 登录方法
     *
     * @param username
     * @param password
     * @return true - 登录成功;false - 登录失败
     */
    boolean login(String username, String password);

    /**
     * 插入方法
     *
     * @param user
     * @return 插入记录数
     */
    int insert(User user);
}

UserDaoImpl

package net.xsp.dao.impl;

import net.xsp.bean.User;
import net.xsp.dao.UserDao;
import net.xsp.dbutil.ConnectionManager;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * 功能:用户数据访问接口实现类
 * 作者:
 * 日期:2019年10月10日
 */
public class UserDaoImpl implements UserDao {
    /**
     * 登录方法
     *
     * @param username
     * @param password
     * @return true - 登录成功;false - 登录失败
     */
    @Override
    public boolean login(String username, String password) {
        // 声明标志变量
        boolean flag = false;
        // 声明数据库连接
        Connection conn = null;

        try {
            // 获取数据库连接
            conn = ConnectionManager.getConnection();
            // 定义SQL字符串
            String strSQL = "select * from t_user where username = ? and password = ?";
            // 创建预备语句对象
            PreparedStatement pstmt = conn.prepareStatement(strSQL);
            // 设置占位符的值
            pstmt.setString(1, username);
            pstmt.setString(2, password);
            // 执行SQL查询,返回结果集
            ResultSet rs = pstmt.executeQuery();
            // 判断结果集里是否有记录
            if (rs.next()) {
                flag = true;
            } else {
                flag = false;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            // 关闭数据库连接
            ConnectionManager.closeConn(conn);
        }

        // 返回标志变量
        return flag;
    }

    /**
     * 插入方法
     *
     * @param user
     * @return 插入记录数
     */
    @Override
    public int insert(User user) {
        // 声明插入记录数变量
        int count = 0;
        // 声明数据库连接
        Connection conn = null;

        try {
            // 获取数据库连接
            conn = ConnectionManager.getConnection();
            // 定义SQL字符串
            String strSQL = "insert into t_user (username, password) values (?, ?)";
            // 创建预备语句对象
            PreparedStatement pstmt = conn.prepareStatement(strSQL);
            // 设置占位符的值
            pstmt.setString(1, user.getPassword());
            pstmt.setString(2, user.getPassword());
            // 执行SQL更新,返回更新记录数
            count = pstmt.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            // 关闭数据库连接
            ConnectionManager.closeConn(conn);
        }

        // 返回插入记录数
        return count;
    }
}

ConnectionManager

package net.xsp.dbutil;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

/**
 * 功能:数据库链接管理类
 * 作者:
 * 日期:2019年10月10日
 */
public class ConnectionManager {
    // 定义连接数据库的参数值
    private static final String DRIVER = "com.mysql.jdbc.Driver";
    private static final String URL = "jdbc:mysql://localhost:3306/xspdb";
    private static final String USER = "root";
    private static final String PASSWORD = "1";

    /**
     * 私有化构造方法,拒绝实例化
     */
    private ConnectionManager() {
    }

    /**
     * 获取数据库连接静态方法
     *
     * @return 数据库连接
     */
    public static Connection getConnection() {
        // 声明数据库连接
        Connection conn = null;

        try {
            // 安装数据库驱动程序
            Class.forName(DRIVER);
            // 获取数据库连接
            conn = DriverManager.getConnection(URL, USER, PASSWORD);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }

        // 返回数据库连接
        return conn;
    }

    /**
     * 关闭数据库连接静态方法
     *
     * @param conn 数据库连接
     */
    public static void closeConn(Connection conn) {
        if (conn != null) {
            try {
                if (!conn.isClosed()) {
                    conn.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

LoginServlet

package net.xsp.servlet;

import net.xsp.dao.UserDao;
import net.xsp.dao.impl.UserDaoImpl;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.net.URLEncoder;

@WebServlet(name = "LoginServlet", value = "/login")
public class LoginServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // 设置请求对象字符编码
        request.setCharacterEncoding("utf-8");

        // 获取表单提交的数据
        String username = request.getParameter("username");
        String password = request.getParameter("password");

        // 创建用户数据访问对象
        UserDao userDao = new UserDaoImpl();

        //获取请求对应的会话
        HttpSession session = request.getSession();

        // 判断登录是否成功
        if (userDao.login(username, password)) {
            // 清除session里可能存在的errMsg属性
            if (session.getAttribute("errMsg") != null) {
                session.removeAttribute("errMsg");
            }
            // 采用从定向,跳转到登录成功页面
            response.sendRedirect("success.jsp?username=" + URLEncoder.encode(username,"utf-8"));
        } else {
            // 设置session里的errMsg属性
            session.setAttribute("errMsg", "用户名或密码错误,请重新登录");
            // 采用从定向,跳转到登录页面
            response.sendRedirect("login.jsp");
        }
    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doPost(request, response);
    }
}

login.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" %>

<html>
<head>
    <title>用户登录</title>
</head>
<body>
<h3 style="text-align: center">用户登录</h3>
<form action="login" method="post">
    <table border="1" cellpadding="10" style="margin: 0px auto">
        <tr>
            <td align="center">用户名</td>
            <td><input type="text" name="username"/></td>
        </tr>
        <tr>
            <td align="center">密&nbsp;码</td>
            <td><input type="password" name="password"/></td>
        </tr>
        <tr align="center">
            <td colspan="2">
                <input type="submit" value="登录"/>
                <input type="reset" value="重置"/>
            </td>
        </tr>
    </table>
</form>
<%
    String errMsg = (String) session.getAttribute("errMsg");
    if (errMsg != null) {
        out.println("<p style='text-align: center; color: red'>" + new String(errMsg.getBytes("ISO-8859-1"), "utf-8") + "</p>");
    }
%>
</body>
</html>

do_login.jsp

<%@ page import="java.sql.*" %>
<%@ page import="java.net.URLEncoder" %>
<%@ page import="net.xsp.dbutil.ConnectionManager" %>
<%@ page import="net.xsp.dao.UserDao" %>
<%@ page import="net.xsp.dao.impl.UserDaoImpl" %>
<%
    // 设置请求对象字符编码
    request.setCharacterEncoding("utf-8");

    // 获取表单提交的数据
    String username = request.getParameter("username");
    String password = request.getParameter("password");

    // 创建用户数据访问对象
    UserDao userDao = new UserDaoImpl();

    // 判断登录是否成功
    if (userDao.l
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值