java:JSP(JSPWeb.xml的配置,动态和静态导入JSP文件,重定项和请求转发,使用JSP实现数据库的增删改查实例)

1.JSP的配置:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
    String path = request.getContextPath();
    String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
            + path + "/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP ‘register.jsp‘ starting page</title>
</head>

<body>
    <pre>
        JSP:java servlet page
            jsp也是一个servlet:要继承HttpServlet--->service方法
            jsp当被访问的时候,tomcat会自动把它编译成Java class,会生成一个遵循某个命名规则的clas和Java文件(以login.jsp为例,首先会把.转换为_,然后进行连接--->login_jsp.java/class,这里的命名规则并不遵循Java的驼峰命名规则)
            这个class继承了--->org.apache.jasper.runtime.HttpJspBase--->拥有_jspService
            org.apache.jasper.runtime.HttpJspBase继承了---->HttpServlet--->重写了service方法---->调用了这个class的_jspService方法
            也就是相当于tomcat把jsp文件生成Java类继承了httpservlet
            所以说jsp也就是一个servlet
            ---->必须要配置
            <servlet>
                <servlet-name></servlet-name>
                <servlet-class></servlet-class>
            </servlet>

            <servlet-mapping>
                <servlet-name></servlet-name>
                <url-pattern></url-pattern>
            </servlet-mapping>

            jsp在tomcat的conf文件下web.xml进行配置
             <servlet>
                <servlet-name>jsp</servlet-name>
                <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
                <init-param>
                    <param-name>fork</param-name>
                    <param-value>false</param-value>
                </init-param>
                <init-param>
                    <param-name>xpoweredBy</param-name>
                    <param-value>false</param-value>
                </init-param>
                <load-on-startup>3</load-on-startup>
            </servlet>
             <servlet-mapping>
                <servlet-name>jsp</servlet-name>
                <url-pattern>*.jsp</url-pattern>
                <url-pattern>*.jspx</url-pattern>
                </servlet-mapping>
               所以org.apache.jasper.servlet.JspServlet来处理以jsp为结尾的路径
               JspServlet-->就是一个servlet--->重写了service方法--->把jsp(warrper)文件转换为class文件
    </pre>
</body>
</html>

2.动态导入和静态导入JSP文件:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%-- errorPage只能保护运行时异常(404,405,401),不能保护检查时异常(500,600) --%>
<%@ page isErrorPage="true" %><%-- 标记本页面是否为错误页面,提供后来人观看代码 --%>
<%@ page errorPage="error.jsp" %>
<%-- <%@ page import="cn.zzsxt.lee.servlet.*" %> --%><%-- 导入servlet包下的所有Java文件 --%>
<%@ page import="cn.zzsxt.lee.servlet.Test" %><%-- 导入Test.java --%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>

<title>My JSP ‘login.jsp‘ starting page</title>

</head>

<body>

    <pre>
          jsp即可以写html代码,也可以写Java代码
          jsp第一个语法:
          <!-- 是把两个jsp文件合并成了一个jsp文件 -->
          <!-- 静态导入:首先会把两个jsp文件合成一个,然后再通过tomcat进行编译,所以只编译了一次,高耦合,所以效率也会提高 -->
          <%@ include file="top.jsp" %><!-- 无论定位到页面的某一个位置,都能进行导入jsp文件,说白了也就是无论放在任何位置,就把导入的jsp放在哪里 -->
              <%
                String name = "zhangsan";
                System.out.println(name);
                // String name2 = "lisi1";// 如果使用<%@ include file="top.jsp" %>导入,报两个变量名不能相同
                String name3;
                /* int x = 1/0; */
                //System.out.println(name3);
                // 运行时异常
                    // 提示错误信息
                    // 只有运行时异常,才会被errorpage保护
                // 检查时异常
                    // 直接强行中断正在运行的程序
                    Test test = new Test();
                    test.getName();
            %>
              <%=name%>
              <%=name2%>
              <%-- <%=x%> --%>
      </pre>

    <a href="register.jsp">我是跳转页面用的</a>
    <!-- 动态导入,会生成两个class文件,从而tomcat编译了两次 -->
    <jsp:include page="footer.jsp"></jsp:include>
</body>
</html>

3.重定向和请求转发:

 

请求转发:
  1.request.getRequestDispatcher("需要跳转的路径").forward(request, response);
  发送一次请求
  地址栏不发生改变
  request可以传递参数(能参数共享)
  请求转发并不能访问到外部资源(外部的地址)

重定向:
  2.response.sendRedirect("需要跳转的路径");
  发送两次请求
  地址栏发生改变
  response不能传递参数(不能参数共享),如果想使用response进行参数传递,就得手动加载,自力更生
  重定向可以访问外部资源

  请求转发
  当需要传递参数的时候
  访问内部资源的时候建议使用请求转发(服务器内部之间的调用)

  重定向
  访问外部资源
  比较隐私和保密的地址一般推荐使用重定向

 4.使用JSP实现数据库的增删改查实例:

   注册:

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

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>

<title>My JSP ‘register.jsp‘ starting page</title>

</head>

<body>

    <h1>注册页面</h1>
    <form action="deal_register.jsp" method="post">
        用户名:
        <input type="text" name="username" />
        <br /> 密码:
        <input type="password" name="pwd" /><br />
         重复密码:
         <input type="password" name="repwd" /><br />
          手机号:
          <input type="text" name="phone" /><br />
           爱好:
          <input type="checkbox" name="hobby" value="football" />足球
          <input type="checkbox" name="hobby" value="basketball" />篮球
           <input type="checkbox" name="hobby" value="Pingpong" />乒乓球
          <br />
            性别:
            <input type="radio" name="sex" value="male" />男
            <input type="radio" name="sex" value="female" />女<br />
            <input type="submit" value="提交" />
    </form>

</body>
</html>

  处理注册信息存入数据库:

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

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>

<title>My JSP ‘deal_register.jsp‘ starting page</title>

</head>

<body>

    <%
        // 第一步:获取input的值(也就是用户注册的信息)
        String username = request.getParameter("username");
        String password = request.getParameter("pwd");
        String phoneNumber = request.getParameter("phone");
        long phone = Long.parseLong(phoneNumber);
        // String hobby1 = request.getParameter("hobby");
        String[] hobby = request.getParameterValues("hobby");
        String[] sex = request.getParameterValues("sex");
        String hobbys= "";// "football,basketball,pingpong"
        //hobby.length为3
        for(int i = 0;i < hobby.length; i++) {
            /* if(hobby.length-1 > i) {
                hobbys +=hobby[i]+",";// 最后一位是,
            } else {
                hobbys +=hobby[i];
            } */

            hobbys +=hobby[i]+",";
        }
        hobbys = hobbys.substring(0,hobbys.length()-1);

        //String sex1 = request.getParameter("sex");// 如果是单选或者多选的话,使用request.getParameter()--->on,规定无论是单选还是多选或者下拉使用request.getParameterValues();

        // 第二步:插入数据,id使用UUID
            //1.导入ojdbc6.jar
            //2.加载驱动(反射)
            Class.forName("oracle.jdbc.driver.OracleDriver");
            //3.获取连接
            Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","scott","scott");
            //4.获取预编译的statement(String sql)
            String sql = "insert into students (id, stu_name, stu_age, stu_pwd, stu_hobby, stu_sex, stu_phone) values(?,?,?,?,?,?,?)";
            PreparedStatement ps = conn.prepareStatement(sql);
            //5.设置参数ps.setxxxx
            ps.setString(1,UUID.randomUUID().toString());
            ps.setString(2, username);
            ps.setInt(3, 32);
            ps.setString(4, password);
            ps.setString(5, hobbys);
            ps.setString(6,sex[0]);
            ps.setLong(7, phone);
            //6.调用executeUpdate();--->返回值为受影响的行数
            int result = ps.executeUpdate();
            //7.判断接收的int类型数据,判断是否大于0(大于0成功,小于0失败)
            if(result > 0) {
                // 成功
            } else {
                // 失败
            }
    %>

</body>
</html>

  登录:

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

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>

<title>My JSP ‘login.jsp‘ starting page</title>

</head>

<body>

    <form action="deal_login.jsp" method="post">
        用户名:
        <input type="text" name="username" />
        <br /> 密码:
        <input type="password" name="pwd" />
        <input type="submit" value="提交" />
    </form>

</body>
</html>

  处理登录,预跳转至主页处理的界面(查询数据库全部数据):

<%@ page language="java"
    import="java.util.*, java.sql.*, cn.zzsxt.lee.web.entity.*"
    pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>

<title>My JSP ‘deal_login.jsp‘ starting page</title>

</head>

<body>

    <%
        String username = request.getParameter("username");
        String password = request.getParameter("pwd");

        //1.加载驱动
        Class.forName("oracle.jdbc.driver.OracleDriver");
        //2.获取连接
        Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "scott", "scott");
        //3.获取预编译的statement
        String sql = "select * from teacher where name=? and password=?";
        PreparedStatement ps = conn.prepareStatement(sql);
        //4.设置参数
        ps.setString(1, username);
        ps.setString(2, password);
        //5.调用executeQuery();-->返回ResultSet
        ResultSet rs = ps.executeQuery();
        //6.遍历结果集
        Teacher teacher = new Teacher();
        while (rs.next()) {
            teacher.setId(rs.getInt("id"));
            teacher.setUsername(rs.getString("name"));
            teacher.setPassword(rs.getString("password"));
            teacher.setDescription(rs.getString("description"));
        }
        //7.判断是否查询出数据
        if (teacher.getUsername() != null && !"".equals(teacher.getUsername())) {// 把“”放在前面,防止空指针
            // 成功,跳转主页面的处理页面
        //    request.getRequestDispatcher("deal_index.jsp").forward(request, response);// 跳转页面
            request.getRequestDispatcher("frameset_index.jsp").forward(request, response);// 跳转页面
        } else {
            // 失败,跳转404
            //response.sendRedirect("404.jsp");
            request.getRequestDispatcher("404.jsp").forward(request, response);
        }
    %>

</body>
</html>

  主页处理界面,预跳转至主页:

<%@ page language="java"
    import="java.util.*, java.sql.*, cn.zzsxt.lee.web.entity.*"
    pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>

<title>My JSP ‘deal_index.jsp‘ starting page</title>

</head>

<body>

    <%
        //1.加载驱动
        Class.forName("oracle.jdbc.driver.OracleDriver");
        //2.获取连接
        Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "scott", "scott");
        //3.获取预编译的statement
        String sql = "select * from students";
        PreparedStatement ps = conn.prepareStatement(sql);
        //4.调用executeQuery();-->返回ResultSet
        ResultSet rs = ps.executeQuery();
        //5.遍历结果集
        // 定义一个泛型为Student的List集合
        List<Student> list = new ArrayList<Student>();
        while (rs.next()) {
            Student student = new Student();
            student.setId(rs.getString("id"));
            student.setStuName(rs.getString("stu_name"));
            student.setStuPassword(rs.getString("stu_pwd"));
            list.add(student);
        }
        //6.判断list的长度大于0
        if(list.size() > 0) {
            // 成功,跳转到主页面
            request.setAttribute("list", list);//--->Map.get("key");--->map.put("name",24);Map<String, Object>
            request.getRequestDispatcher("index.jsp").forward(request, response);
        } else {
            // 失败
        }
    %>

</body>
</html>

  跳转至主页,显示所有数据,及修改和删除的功能:

<%@ page language="java" import="java.util.*, cn.zzsxt.lee.web.entity.*"
    pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>

<title>My JSP ‘index.jsp‘ starting page</title>

<script type="text/javascript">

    function trueDelete(id) {
        if (confirm("您确定要删除数据么?")) {
            window.location.href = "deal_delete.jsp?id=" + id;
        }
    }
</script>

</head>

<body>

    <table border="1">
        <thead>
            <tr>
                <th>学生编号</th>
                <th>学生姓名</th>
                <th>学生密码</th>
                <th>操作</th>
            </tr>
        </thead>

        <tbody>

            <%
                List<Student> listStudent = (List<Student>) request.getAttribute("list");
                for (int i = 0; i < listStudent.size(); i++) {
                    listStudent.get(i).getId();// 获取student对象的id
            %>
            <%-- jsp的注释 --%>
            <tr>
                <!-- 一个tr代表了一行,说白了就是代表一个student对象 -->
                <td><%=listStudent.get(i).getId()%></td>
                <!-- <%--<%= %>--%>输出页面 -->
                <td><%=listStudent.get(i).getStuName()%></td>
                <td><%=listStudent.get(i).getStuPassword()%></td>
                <td><a href="javascript:void(0);"
                    onclick="trueDelete(‘<%=listStudent.get(i).getId()%>‘);">删除</a>
                    <a href="select_by_id.jsp?id=<%=listStudent.get(i).getId()%>">修改</a>
                </td>
                <!-- 删除功能(主键id删除)需要传递一个参数,同样需要操作数据库,需要deal_delete.jsp进行处理 -->
            </tr>
            <%
                }
            %>
        </tbody>

    </table>

</body>
</html>

  删除功能,删除处理界面,预跳转至主页处理界面(查询删除后还剩的数据,即所有数据)

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

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>

<title>My JSP ‘deal_delete.jsp‘ starting page</title>

</head>

<body>

    <%
        //所有通过路径传递的参数都要使用request.getParameter()
        String id = request.getParameter("id");
        //1.加载驱动
        Class.forName("oracle.jdbc.driver.OracleDriver");
        //2.获取连接
        Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "scott", "scott");
        //3.获取预编译的statement
        String sql = "delete from students where id=?";
        PreparedStatement ps = conn.prepareStatement(sql);
        ps.setString(1, id);
        int result = ps.executeUpdate();
        if (result > 0) {
            //成功
            request.getRequestDispatcher("deal_index.jsp").forward(request, response);
        } else {
            // 失败
        }
    %>

</body>
</html>

  修改功能,首先跳转至查询某一行的界面,预跳转至修改界面

<%@ page language="java"
    import="java.util.*, java.sql.*, cn.zzsxt.lee.web.entity.*"
    pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>

<title>My JSP ‘select_by_id.jsp‘ starting page</title>

</head>

<body>

    <%
        String id = request.getParameter("id");
        // 进行查询(通过id)
        //1.加载驱动
        Class.forName("oracle.jdbc.driver.OracleDriver");
        //2.获取连接
        Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "scott", "scott");
        //3.获取预编译的statement
        String sql = "select * from students where id=?";
        PreparedStatement ps = conn.prepareStatement(sql);
        ps.setString(1, id);
        //4.调用executeQuery();-->返回ResultSet
        ResultSet rs = ps.executeQuery();
        //5.遍历结果集
        Student stu = new Student();
        while (rs.next()) {
            stu.setId(rs.getString("id"));
            stu.setStuName(rs.getString("stu_name"));
            stu.setStuPassword(rs.getString("stu_pwd"));
        }
        if (stu.getId() != null) {
            request.setAttribute("stu", stu);
            request.getRequestDispatcher("update.jsp").forward(request, response);
        } else {
            // 跳转报错页面
        }
    %>

</body>
</html>

  修改界面,以form表单的形式显示让用户动态修改,预提交至修改处理界面

<%@ page language="java" import="java.util.*, cn.zzsxt.lee.web.entity.*"
    pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>

<title>My JSP ‘update.jsp‘ starting page</title>

</head>

<body>
    <%
        Student stu = (Student) request.getAttribute("stu");
    %>

    <form action="deal_update.jsp" method="post">
        学生编号:
        <input type="text" value="<%=stu.getId()%>" name="id" readonly="readonly" />
        <br /> 学生姓名:
        <input type="text" value="<%=stu.getStuName()%>" name="username" />
        <br /> 学生密码:
        <input type="text" value="<%=stu.getStuPassword()%>" name="pwd" />
        <br />
        <input type="submit" value="修改" />
    </form>

</body>
</html>

  修改界面,修改数据库中的数据,预跳转至主页处理界面(查询修改后的数据,即所有数据)

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

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>

<title>My JSP ‘deal_update.jsp‘ starting page</title>

</head>

<body>

    <%
        String id = request.getParameter("id");
        String username = request.getParameter("username");
        String pwd = request.getParameter("pwd");

        //1.加载驱动
        Class.forName("oracle.jdbc.driver.OracleDriver");
        //2.获取连接
        Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "scott", "scott");
        //3.获取预编译的statement
        String sql = "update students set stu_name=?, stu_pwd=? where id=?";
        PreparedStatement ps = conn.prepareStatement(sql);
        ps.setString(1, username);
        ps.setString(2, pwd);
        ps.setString(3, id);
        int result = ps.executeUpdate();
        if (result > 0) {
            response.sendRedirect("deal_index.jsp");
            return;
            //request.getRequestDispatcher("deal_index.jsp").forward(request, response);//forward标识了跳转页面的规则,携带着request和response一起跳转页面,所以请求转发才可以传递参数
            //System.out.println("我是转发之后的代码,我被执行了");
            // 如果使用两个response或者request的情况下,就会报错Cannot call sendRedirect() after the response has been committed
            // 但是重定向直接报500,中断程序,请求转发不会中断程序,可以继续运行
            //response.sendRedirect("404.jsp");
        } else {
            //跳转错误页面
            response.sendRedirect("404.jsp");
            return;
        }
    %>

</body>
</html>
时间: 07-18

java:JSP(JSPWeb.xml的配置,动态和静态导入JSP文件,重定项和请求转发,使用JSP实现数据库的增删改查实例)的相关文章

【Hibernate】Hibernate的在Eclipse+Mysql的配置、安装,纯Java,利用Annotation与HQL完成数据库的增删改查

这篇文章有很多槽点,在Hibernate4.x上面用着Hibernate3.x的写法去写.而且程序中放到Eclipse中会有一大堆警告,但是这好歹也在一定程度上完成了Hibernate的入门.毕竟现在很多介绍Hibernate的书籍都是用Hibernate3.x的写法去写.上次那篇<[Hibernate]最简单的Hibernate工程--账号注册系统>(点击打开链接)杂糅Struts的技术其实是不对的.因为Hibernate完成的是,从Java到数据库,从数据库到Java的任务.之后Java与

java jdbc 连接mysql数据库 实现增删改查

好久没有写博文了,写个简单的东西热热身,分享给大家. jdbc相信大家都不陌生,只要是个搞java的,最初接触j2ee的时候都是要学习这么个东西的,谁叫程序得和数据库打交道呢!而jdbc就是和数据库打交道非常基础的一个知识,也是比较接近底层的,在实际的工作中大家用得更多的其实还是比较成熟的框架,例如Hibernate.Mybatis. 但是作为这些成熟框架的底层的jdbc却也是我们应该去掌握的,只有了解了jdbc的增删改查,这样在以后如果有兴趣去研究Hibernate或者Mybatis的源代码的

基于Java的XML文件模拟数据库进行增删改查操作

我们知道XML文件既可以用来进行数据的传输,也可以配合DTD约束文件用来作为配置文件,当然其本质就是一个加了标签以及众多空格保持格式的字符串,那么就可以用Java进行操作. 本例是使用MyEclipse带入DOM4j解析时要用的jar包的基础上做的:当然DOM4j相对于DOM SAX 等解析方式的方便程度是不言而喻的. 下面是本次用例XML文件 <?xml version="1.0" encoding="UTF-8"?> <persons> 

通过java实现对数据库的增删改查

package cn.hncu; import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import java.util.Scanner;import java.util.UUID; import org.junit.Test; import cn.hncu.pubs.Conn

java对mysql数据库的增删改查代码

首先是用java在mysql中增加数据 import java.sql.* public class jdbc{ public static void main (String[] args){ String driver = "org.git.mm.mysql.Driver"; String url = 'jdbc:mysql://localhost:3306/my'; String username = "root"; String password = &qu

JAVA连接数据库后,对数据库进行增删改查

使用的方法:Statement 增删改: 方法:execute(String SQL) String url="jdbc:Access:///E://A//shop.mdb"; Connection con=null; //数据库连接对象 Statement st = null;//数据库操作对象 //SQL语句 //String sql="insert into goods values('7','鬼王','男','鬼王宗','伏龙鼎')"; String sql

Java+MyEclipse+Tomcat (六)详解Servlet和DAO数据库增删改查操作

此篇文章主要讲述DAO.Java Bean和Servlet实现操作数据库,把链接数据库.数据库操作.前端界面显示分模块化实现.其中包括数据的CRUD增删改查操作,并通过一个常用的JSP网站前端模板界面进行描述.参考前文: Java+MyEclipse+Tomcat (一)配置过程及jsp网站开发入门 Java+MyEclipse+Tomcat (二)配置Servlet及简单实现表单提交 Java+MyEclipse+Tomcat (三)配置MySQL及查询数据显示在JSP网页中 Java+MyE

Java Web(十) JDBC的增删改查,C3P0等连接池,dbutils框架的使用

前面做了一个非常垃圾的小demo,真的无法直面它,菜的抠脚啊,真的菜,好好努力把.菜鸡. --WH 一.JDBC是什么? Java Data Base Connectivity,java数据库连接,在需要存储一些数据,或者拿到一些数据的时候,就需要往数据库里存取数据,那么java如何连接数据库呢?需要哪些步骤? 1.注册驱动 什么是驱动? 驱动就是JDBC实现类,通俗点讲,就是能够连接到数据库功能的东西就是驱动,由于市面上有很多数据库,Oracle.MySql等等,所以java就有一个连接数据库

mac下使用MyBatis增删改查(mysql,Java)

1.安装mysql 下载地址为http://dev.mysql.com/downloads/mysql/,选择dmg类型的直接下载,跳转的页面要求注册或登录,可以直接点击页面最下面的 No thanks, just start my download. 下载,安装 安装结束会提示默认密码: 2016-01-26T03:15:17.366026Z 1 [Note] A temporary password is generated for [email protected]: o)pa_.adT2