高级JSP技术基础

一、目的

1)理解Java Bean的设计思想,掌握在JSP和Servlet中访问Bean的方法;
2)理解EL和JSTL的概念和用途,学会在JSP中使用EL和JSTL简化页面;
3)理解MVC设计模式,能够结合使用Servlet、JSP及Java Bean技术进行Web应用开发;

二、原理

1、Java Bean的基本设计思想,如何在JSP和Servlet中访问Java Bean;
2、EL和JSTL的概念,如何在JSP中使用EL和JSTL;
3、MVC模式的基本理念,如何在Web应用中引入MVC模式;

三、实现过程及步骤

1、使用JavaBean技术改进自己的留言本应用,创建VO对象封装用户数据和留言数据,创建DAO对象封装用户注册、登录及留言添加和查询的功能,并在JSP或Servlet中以小程序代码的方式访问这些Java
Bean;

(1)创建VO对象封装用户数据和留言数据:

用户数据:

package vo;

public class UserVO {
    String username;
    String password;
    String email;
    public UserVO() {
    }
    public UserVO(String username, String password, String email) {
        this.username = username;
        this.password = password;
        this.email = email;
    }
    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;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
}

留言数据:

package vo;

        public class BookVO {
        String name;
        String title;
        String content;
        public BookVO() {
       }
        public BookVO(String name, String title, String content) {
            this.name = name;
            this.title = title;
            this.content = content;
       }
            public String getName() {
            return name;
       }
            public void setName(String name) {
            this.name = name;
       }
            public String getTitle() {
            return title;
       }
            public void setTitle(String title) {
            this.title = title;
       }

          public String getContent() {
          return content;
       }
          public void setContent(String content) {
          this.content = content;
       }
      }

(2)创建DAO对象封装用户注册、登录及留言添加和查询的功能:

package dao.impdao;

import dao.DAO;
import vo.BookVO;
import vo.UserVO;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class loadDAO implements DAO {
    @Override
    public Connection getConnection() throws NamingException, SQLException {
        Context context = new InitialContext();
        DataSource dataSource = (DataSource)context.lookup("java:/comp/env/jdbc/zhai");
        Connection conn= dataSource.getConnection();
        return conn;
    }
    @Override
    public void close(ResultSet resultSet, PreparedStatement preparedStatement, Connection conn) {
        if (resultSet != null) {
            try {
                resultSet.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (preparedStatement != null) {
            try {
                preparedStatement.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (conn!= null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
    @Override
    public int register(UserVO userVO) throws SQLException, NamingException {
        ResultSet rs = null;
        PreparedStatement ps = null;
        Connection conn = this.getConnection();
        ps = conn.prepareStatement("INSERT into guestbook.user(username, password, email) values (?,?,?)");
        ps.setString(1, userVO.getUsername());
        ps.setString(2, userVO.getPassword());
        ps.setString(3, userVO.getEmail());
        int stat = ps.executeUpdate();
        this.close(rs,ps,conn);
        return stat;
    }
    @Override
    public int login(String username, String password) throws SQLException, NamingException {
        int stat = 0;
        ResultSet rs = null;
        PreparedStatement ps = null;
        Connection conn = this.getConnection();
        ps = conn.prepareStatement("SELECT * FROM user WHERE username = ?");
        ps.setString(1,username);
        rs= ps.executeQuery();
        rs.next();
        String passwordTemp = rs.getString(2);
        if (passwordTemp.equals(password))
        {
            stat= 1;
        }
        else
        {
            stat = 0;
        }
        return stat;
    }
    @Override
    public int addMsg(BookVO recordVO) throws SQLException, NamingException {
        ResultSet rs = null;
        PreparedStatement ps = null;
        Connection conn = this.getConnection();
        ps= conn.prepareStatement("INSERT into guestbook.book(name, title, content) values (?,?,?)");
        ps.setString(1, recordVO.getName());
        ps.setString(2, recordVO.getTitle());
        ps.setString(3, recordVO.getContent());
        int stat = ps.executeUpdate();
        this.close(rs,ps,conn);
        return stat;
    }
    @Override
    public ArrayList<BookVO> showAllMsg() throws SQLException, NamingException {
        List<BookVO> listRecord = new ArrayList<BookVO>();
        BookVO bookVO = null;
        ResultSet rs = null;
        PreparedStatement ps = null;
        Connection conn = null;
        String sql = "SELECT * FROM guestbook.book";
        conn= this.getConnection();
        ps= conn.prepareStatement(sql);
        rs = ps.executeQuery();
        while (rs.next())
        {
            bookVO = new BookVO(rs.getString(1),rs.getString(2),rs.getString(3));
            listRecord.add(bookVO);
        }
        this.close(rs,ps,conn);
        return (ArrayList<BookVO>)listRecord;
    }
}

(3)注册页面:

package servlet;

import dao.DAO;
import vo.UserVO;
import dao.impdao.loadDAO;
import javax.naming.NamingException;
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 java.io.IOException;
import java.sql.SQLException;

@WebServlet("/register")
public class register 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");
        String email = request.getParameter("email");
        UserVO userVO = new UserVO(username,password,email);
        DAO bookDAO = new loadDAO();
        try {
            int state = bookDAO.register(userVO);
            if (state == 1)
            {
                response.sendRedirect("login.html");
            }
            else
            {
                response.sendRedirect("register.html");
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } catch (NamingException e) {
            e.printStackTrace();
        }
    }
}

(4)登录页面:

package servlet;

import dao.DAO;
import vo.UserVO;
import dao.impdao.loadDAO;
import javax.naming.NamingException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
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.io.PrintWriter;
import java.sql.SQLException;

@WebServlet("/login")
public class login 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");
        HttpSession session = request.getSession(true);
        ServletContext application = this.getServletContext();
        DAO bookDAO = new loadDAO();
        int count;  
        try {
            int stat = bookDAO.login(username,password);
            if (stat == 1)
            {
                UserVO userVO = new UserVO();
                userVO.setUsername(username);
                if(session.isNew()){
                    count = 0;
                    application.setAttribute("COUNT",count);
                }

                session.setAttribute("JudgeLogin",userVO);
                response.sendRedirect("displaymsg.jsp");
            }
            else
            {
                response.setCharacterEncoding("UTF-8");
                RequestDispatcher rd = request.getServletContext().getRequestDispatcher("/login.html");
                PrintWriter pw = response.getWriter();
                pw.println("<div style='color:red'>Incorrect username or password!</div>");
                rd.include(request,response);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } catch (NamingException e) {
            e.printStackTrace();
        }
    }
}

(5)添加留言:

package servlet;

import dao.DAO;
import vo.BookVO;
import dao.impdao.loadDAO;
import javax.naming.NamingException;
import javax.servlet.RequestDispatcher;
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 java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;

@WebServlet("/msg")
public class msg extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        String name = request.getParameter("name");
        String title = request.getParameter("title");
        String content = request.getParameter("content");
        BookVO bookVO = new BookVO(name,title,content);
        DAO dao = new loadDAO();
        try {
            int stat = dao.addMsg(bookVO);
            if (stat == 1)
            {
                response.sendRedirect("succadding.html");
            }
            else
            {
                response.encodeRedirectURL("UTF-8");
                RequestDispatcher rd = request.getServletContext().getRequestDispatcher("/msg.jsp");
                PrintWriter pw = response.getWriter();
                pw.println("<div style='color:red'>Please leave a message again!</div>");
                rd.include(request,response);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } catch (NamingException e) {
            e.printStackTrace();
        }
    }
}

(6)运行结果:
登录成功后显示留言本:
在这里插入图片描述

点击Continue adding message继续添加留言,页面如下:
在这里插入图片描述

2、使用EL和JSTL技术对留言本应用进行改进,尽量消除JSP中嵌入的JAVA 代码。

核心代码如下:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html lang="en">
<html>
<head>
    <meta charset="UTF-8">
    <title>WriteMessage</title>
</head>
<body>
<form action="msg" method="post">
    <h1>Message Book</h1><br>
    <c:if test="${ !empty sessionScope.JudgeLogin}">
        <p>already logged in</p>
    </c:if>
    <c:if test="${ empty sessionScope.JudgeLogin}">
        <p>not log in</p>
    </c:if>
    Name:
    <input name="name" type="text"><br>
    Title:
    <input name="title" type="text"><br>
    Content:
    <textarea name="content" id="content" cols="60" rows="5"></textarea><br>
    <input type="submit" name="submit" value="Submit" >
</form>
<a href="displaymsg.jsp">View all message</a> <a href="register.html">go to rigister-></a> <a href="login.html">to go log in
-></a>
</body>
</html>

3、使用MVC模式改造留言本应用,可以自己搭建MVC框架,也可以使用Struts、Spring MVC等现成的MVC框架。

(1)MVC 模式代表 Model-View-Controller(模型-视图-控制器) 的缩写,是一种软件设计的典范,用一种业务逻辑聚集到一个部件里面。

Model(模型):是应用程序中用于处理应用程序数据的部分,模型对象负责在数据库中存取数据。
View(视图):是应用程序中处理数据现实的部分,视图是依据模型数据创建的。
Controller(控制器):是应用程序中处理用户交互的部分,负责从视图中读取数据,控制用户输入,并向模型发送数据。

(2)在MVC模式下改造的留言本如图所示:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值