• day14学习总结


    一、JSP九大内置对象

    名称描述
    application(作用 域)类似于ServletContext 生命周期随着tomcat容器的创建而创建 随着tomcat 容器销毁而销毁
    session(作用域)会话对象 用于设置与获取会话的值
    request(作用域)请求对象 用于设置与获取一次请求的数据
    pageContext(作 用域)当前页面上下文对象主要用于获取当前页的数据
    response响应对象
    config配置对象
    exeception异常对象
    out打印对象
    page类似于java中(this)

    九大内置对象的创建:

            是由Tomcat容器创建的

    二、JSP内置对象中的四大作用域对象

    名称描述
    application(作用 域)全局上下文对象(整个web项目都可以获取)
    session(作用域)会话对象(在一次会话中可以获取)
    request(作用域)请求对象(在一次请求都是可以获取)
    pageContext(作 用域)当前页面上下文对象(只有在当前页面获取)

     方法:

            

    使用el表达式来获取作用域对象值:

            语法:

                    ${xxxScope.键}  xxx 表示内置对象的名称

            作用域大小从小到大排序:

                    pageContext < request 

            注意点:

                如果内置对象的作用域下的键名都相同的情况下,el表达式优先获取的是作用域范围小的值 

    测试:

    1. <%--
    2. Created by IntelliJ IDEA.
    3. User: 86182
    4. Date: 2022/9/5
    5. Time: 10:01
    6. To change this template use File | Settings | File Templates.
    7. --%>
    8. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    9. $Title$
    10. <%
    11. pageContext.setAttribute("pname","班长");
    12. request.setAttribute("rname","梁男");
    13. session.setAttribute("sname","黑福");
    14. application.setAttribute("aname","肥男");
    15. request.setAttribute("upwd",11);
    16. session.setAttribute("upwd",22);
    17. application.setAttribute("upwd",33);
    18. //转发
    19. request.getRequestDispatcher("info.jsp").forward(request,response);
    20. //重定向
    21. //response.sendRedirect("info.jsp");
    22. %>
    23. <%--
    24. Created by IntelliJ IDEA.
    25. User: 86182
    26. Date: 2022/9/5
    27. Time: 10:02
    28. To change this template use File | Settings | File Templates.
    29. --%>
    30. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    31. Title
    32. ${pageScope.pname}
    33. ${requestScope.rname}
    34. ${sessionScope.sname}
    35. ${applicationScope.aname}
    36. ${upwd}//获取的是11

    三、JSP动态标签库

    简介:

            JSP动态标签库,主要用于简化页面java代码的编写,所有的jsp页面都可以使用

    转发:  

    "info.jsp">

    动态引入公共页面:

    "kk.jsp">
    

    动态引入与静态引入的区别:

            动态引入:

                    先翻译并编译两个jsp文件,再进行合并   效率低

            静态引入:

                    先合并两个jsp文件,在翻译并编译合并后的jsp文件  效率高

    访问路径的设置:

            在实际项目一般使用的绝对路径 在jsp中设置绝对路径跳转到Servlet

            解决访问路径错误的问题 :在访问路径前加入${pageContext.request.contextPath}

    四、分页

    需求:

            

     

    基础搭建:

            创建项目:

     

            数据库:

     

    功能实现:

            Student实体类:

            

    1. package com.qf.entity;
    2. import java.io.Serializable;
    3. public class Student implements Serializable {
    4. private int sid;
    5. private String sname;
    6. private String sex;
    7. private String hobby;
    8. public Student() {
    9. }
    10. public Student(int sid, String sname, String sex, String hobby) {
    11. this.sid = sid;
    12. this.sname = sname;
    13. this.sex = sex;
    14. this.hobby = hobby;
    15. }
    16. public int getSid() {
    17. return sid;
    18. }
    19. public void setSid(int sid) {
    20. this.sid = sid;
    21. }
    22. public String getSname() {
    23. return sname;
    24. }
    25. public void setSname(String sname) {
    26. this.sname = sname;
    27. }
    28. public String getSex() {
    29. return sex;
    30. }
    31. public void setSex(String sex) {
    32. this.sex = sex;
    33. }
    34. public String getHobby() {
    35. return hobby;
    36. }
    37. public void setHobby(String hobby) {
    38. this.hobby = hobby;
    39. }
    40. @Override
    41. public String toString() {
    42. return "Student{" +
    43. "sid=" + sid +
    44. ", sname='" + sname + '\'' +
    45. ", sex='" + sex + '\'' +
    46. ", hobby='" + hobby + '\'' +
    47. '}';
    48. }
    49. }

            pageUtils类:

    1. package com.qf.utils;
    2. import java.util.List;
    3. public class PageUtils {
    4. //当前页
    5. private Integer currentPageNo;
    6. //页量
    7. private Integer pageSize;
    8. //总记录数
    9. private Integer totalPageCount;
    10. //总页数
    11. private Integer totalPageSize;
    12. //集合
    13. private List commenList;
    14. public Integer getCurrentPageNo() {
    15. return currentPageNo;
    16. }
    17. public void setCurrentPageNo(Integer currentPageNo) {
    18. this.currentPageNo = currentPageNo;
    19. }
    20. public Integer getPageSize() {
    21. return pageSize;
    22. }
    23. public void setPageSize(Integer pageSize) {
    24. this.pageSize = pageSize;
    25. }
    26. public Integer getTotalPageCount() {
    27. return totalPageCount;
    28. }
    29. public void setTotalPageCount(Integer totalPageCount) {
    30. this.totalPageCount = totalPageCount;
    31. }
    32. public Integer getTotalPageSize() {
    33. return totalPageSize;
    34. }
    35. public void setTotalPageSize(Integer totalPageSize) {
    36. this.totalPageSize = totalPageSize;
    37. }
    38. public List getCommenList() {
    39. return commenList;
    40. }
    41. public void setCommenList(List commenList) {
    42. this.commenList = commenList;
    43. }
    44. @Override
    45. public String toString() {
    46. return "PageUtils{" +
    47. "currentPageNo=" + currentPageNo +
    48. ", pageSize=" + pageSize +
    49. ", totalPageCount=" + totalPageCount +
    50. ", totalPageSize=" + totalPageSize +
    51. ", commenList=" + commenList +
    52. '}';
    53. }
    54. }

            DBUtils类:

    1. package com.qf.utils;
    2. import com.alibaba.druid.pool.DruidDataSourceFactory;
    3. import org.apache.commons.dbutils.QueryRunner;
    4. import javax.sql.DataSource;
    5. import java.io.InputStream;
    6. import java.util.Properties;
    7. public enum DBUtils {
    8. DB;
    9. public QueryRunner qr;
    10. DBUtils(){
    11. try {
    12. InputStream is = DBUtils.class.getResourceAsStream("db.properties");
    13. Properties pro = new Properties();
    14. pro.load(is);
    15. DataSource ds = DruidDataSourceFactory.createDataSource(pro);
    16. qr = new QueryRunner(ds);
    17. } catch (Exception e) {
    18. e.printStackTrace();
    19. }
    20. }
    21. }

            StudentDao接口:

    1. package com.qf.dao;
    2. import com.qf.entity.Student;
    3. import java.util.List;
    4. public interface StudentDao {
    5. //查询总记录数
    6. Integer selectCount(String sname);
    7. //查询当前页 记录集合
    8. List selectByPage(Integer currentPageNo,Integer pageSize,String sname);
    9. }

            StudentDaoImpl类:

    1. package com.qf.dao.impl;
    2. import com.qf.dao.StudentDao;
    3. import com.qf.entity.Student;
    4. import com.qf.utils.DBUtils;
    5. import org.apache.commons.dbutils.QueryRunner;
    6. import org.apache.commons.dbutils.handlers.BeanListHandler;
    7. import org.apache.commons.dbutils.handlers.ScalarHandler;
    8. import java.sql.SQLException;
    9. import java.util.ArrayList;
    10. import java.util.List;
    11. public class StudentDaoImpl implements StudentDao {
    12. private QueryRunner qr = DBUtils.DB.qr;
    13. @Override
    14. public Integer selectCount(String sname) {
    15. Long count=null;
    16. try {
    17. //使用StringBuffer可以动态拼接SQL语句
    18. StringBuffer sb = new StringBuffer("select count(1) from student where 1=1");
    19. //定义集合
    20. List parmList = new ArrayList<>();
    21. //判断是否使用模糊查询
    22. if (sname!=null&&!"".equals(sname)){
    23. //拼接模糊查询语句
    24. sb.append(" and sname like ?");
    25. //给占位符赋值
    26. parmList.add("%"+sname+"%");
    27. }
    28. //判断集合是否为空
    29. if (parmList!=null&&parmList.size()>0){
    30. //不为空则表示要进行模糊查询
    31. count = (Long) qr.query(sb.toString(), new ScalarHandler(),parmList.toArray());
    32. }else {
    33. //为空则表示不进行模糊查询
    34. count = (Long) qr.query(sb.toString(), new ScalarHandler());
    35. }
    36. } catch (SQLException e) {
    37. e.printStackTrace();
    38. }
    39. return count==null?0:Integer.parseInt(count+"");
    40. }
    41. @Override
    42. public List selectByPage(Integer currentPageNo, Integer pageSize,String sname) {
    43. List studentList = null;
    44. try {
    45. //使用StringBuffer可以动态拼接SQL语句
    46. StringBuffer sb = new StringBuffer("select * from student where 1=1");
    47. //定义集合
    48. List parmList = new ArrayList<>();
    49. //判断是否要进行模糊查询
    50. if (sname!=null&&!"".equals(sname)){
    51. //拼接模糊查询SQL语句
    52. sb.append(" and sname like ?");
    53. //给占位符赋值
    54. parmList.add("%"+sname+"%");
    55. }
    56. //拼接分页查询SQL语句
    57. sb.append(" limit ?,?");
    58. //给占位符赋值
    59. parmList.add((currentPageNo-1)*pageSize);
    60. //给占位符赋值
    61. parmList.add(pageSize);
    62. //提交SQL语句
    63. studentList = qr.query(sb.toString(), new BeanListHandler(Student.class), parmList.toArray());
    64. } catch (SQLException e) {
    65. e.printStackTrace();
    66. }
    67. return studentList;
    68. }
    69. }
    70.         StudentService接口:

      1. package com.qf.service;
      2. import com.qf.entity.Student;
      3. import com.qf.utils.PageUtils;
      4. public interface StudentService {
      5. PageUtils selectPage(String currentPageNoStr,String pageSizeStr,String sname);
      6. }

              StudentServiceImpl实现类:

      1. package com.qf.service.impl;
      2. import com.qf.dao.StudentDao;
      3. import com.qf.dao.impl.StudentDaoImpl;
      4. import com.qf.entity.Student;
      5. import com.qf.service.StudentService;
      6. import com.qf.utils.PageUtils;
      7. import java.util.List;
      8. public class StudentServiceImpl implements StudentService {
      9. private StudentDao studentDao = new StudentDaoImpl();
      10. @Override
      11. public PageUtils selectPage(String currentPageNoStr, String pageSizeStr,String sname) {
      12. Integer currentPageNo;
      13. if (currentPageNoStr==null||"".equals(currentPageNoStr)){
      14. currentPageNo=1;
      15. }else {
      16. currentPageNo = Integer.parseInt(currentPageNoStr);
      17. }
      18. Integer pageSize;
      19. if (pageSizeStr==null||"".equals(pageSizeStr)){
      20. pageSize = 2;
      21. }else {
      22. pageSize = Integer.parseInt(pageSizeStr);
      23. }
      24. //调用dao层方法 查询总记录数
      25. Integer totalPageCount = studentDao.selectCount(sname);
      26. //跟据总记录数和页量数求出总页数
      27. Integer totalPageSize = totalPageCount%pageSize==0?totalPageCount/pageSize:totalPageCount/pageSize+1;
      28. //调用dao层方法查询出记录集合
      29. List studentList = studentDao.selectByPage(currentPageNo, pageSize,sname);
      30. //实例化工具类对象
      31. PageUtils pageUtils = new PageUtils<>();
      32. //当前页
      33. pageUtils.setCurrentPageNo(currentPageNo);
      34. //页量
      35. pageUtils.setPageSize(pageSize);
      36. //总记录数
      37. pageUtils.setTotalPageCount(totalPageCount);
      38. //总页数
      39. pageUtils.setTotalPageSize(totalPageSize);
      40. //记录集合
      41. pageUtils.setCommenList(studentList);
      42. return pageUtils;
      43. }
      44. }

              BaseServlet类:

      1. package com.qf.servlet;
      2. import javax.servlet.ServletException;
      3. import javax.servlet.http.HttpServlet;
      4. import javax.servlet.http.HttpServletRequest;
      5. import javax.servlet.http.HttpServletResponse;
      6. import java.io.IOException;
      7. import java.lang.reflect.InvocationTargetException;
      8. import java.lang.reflect.Method;
      9. public class BaseServlet extends HttpServlet {
      10. @Override
      11. protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
      12. //获取前端传输的方法名
      13. String methodName = req.getParameter("mark");
      14. //判断方法是否为空
      15. if (methodName==null||"".equals(methodName)){
      16. throw new RuntimeException("方法不存在");
      17. }
      18. try {
      19. //获取当前class对象
      20. Class cla = this.getClass();
      21. //获取方法
      22. Method method = cla.getMethod(methodName, HttpServletRequest.class, HttpServletResponse.class);
      23. //调用方法
      24. method.invoke(this,req,resp);
      25. } catch (NoSuchMethodException e) {
      26. e.printStackTrace();
      27. } catch (IllegalAccessException e) {
      28. e.printStackTrace();
      29. } catch (InvocationTargetException e) {
      30. e.printStackTrace();
      31. }
      32. }
      33. }

              StudentServlet类:

      1. package com.qf.servlet;
      2. import com.qf.entity.Student;
      3. import com.qf.service.StudentService;
      4. import com.qf.service.impl.StudentServiceImpl;
      5. import com.qf.utils.PageUtils;
      6. import javax.servlet.ServletException;
      7. import javax.servlet.annotation.WebServlet;
      8. import javax.servlet.http.HttpServletRequest;
      9. import javax.servlet.http.HttpServletResponse;
      10. import java.io.IOException;
      11. @WebServlet(name = "studentServlet",urlPatterns = "/studentServlet")
      12. public class StudentServlet extends BaseServlet {
      13. private StudentService studentService = new StudentServiceImpl();
      14. public void showInfo(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      15. //获取前端传递参数
      16. //当前页
      17. String currentPageNoStr = request.getParameter("currentPageNo");
      18. //页量
      19. String pageSizeStr = request.getParameter("pageSize");
      20. //模糊姓名
      21. String sname = request.getParameter("sname");
      22. //调用service层方法
      23. PageUtils pageUtils = studentService.selectPage(currentPageNoStr, pageSizeStr,sname);
      24. //将对象存入作用域中
      25. request.setAttribute("pageUtils",pageUtils);
      26. request.setAttribute("sname",sname);
      27. //进行页面转发
      28. request.getRequestDispatcher("index.jsp").forward(request,response);
      29. }
      30. }

              index.jsp:

      1. <%--
      2. Created by IntelliJ IDEA.
      3. User: 86182
      4. Date: 2022/9/5
      5. Time: 10:01
      6. To change this template use File | Settings | File Templates.
      7. --%>
      8. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
      9. <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
      10. <html>
      11. <head>
      12. <title>$Title$title>
      13. <script src="${pageContext.request.contextPath}/js/jquery-1.8.3.js">script>
      14. <style>
      15. td{
      16. text-align: center;
      17. }
      18. style>
      19. head>
      20. <body>
      21. <%
      22. if(request.getAttribute("pageUtils")==null){
      23. //重定向跳转到servlet获取数据
      24. response.sendRedirect("studentServlet?mark=showInfo");
      25. return;
      26. }
      27. %>
      28. <div style="margin-left: 300px">
      29. <input type="text" id="tv_sname" value="${sname}">
      30. <input type="button" id="tv_select" value="查询">
      31. div>
      32. <table width="80%" cellspacing="0px" cellpadding="0px" border="1px" align="center">
      33. <tr>
      34. <th>编号th>
      35. <th>姓名th>
      36. <th>性别th>
      37. <th>爱好th>
      38. tr>
      39. <c:forEach items="${pageUtils.commenList}" var="student">
      40. <tr>
      41. <td>${student.sid}td>
      42. <td>${student.sname}td>
      43. <td>${student.sex}td>
      44. <td>${student.hobby}td>
      45. tr>
      46. c:forEach>
      47. table>
      48. <div style="margin-left: 300px">
      49. <a href="${pageContext.request.contextPath}/studentServlet?mark=showInfo¤tPageNo=1">首页a>
      50. <c:if test="${pageUtils.currentPageNo > 1}">
      51. <a href="${pageContext.request.contextPath}/studentServlet?mark=showInfo¤tPageNo=${pageUtils.currentPageNo-1}">上一页a>
      52. c:if>
      53. <c:if test="${pageUtils.currentPageNo < pageUtils.totalPageSize}">
      54. <a href="${pageContext.request.contextPath}/studentServlet?mark=showInfo¤tPageNo=${pageUtils.currentPageNo+1}">下一页a>
      55. c:if>
      56. <a href="${pageContext.request.contextPath}/studentServlet?mark=showInfo¤tPageNo=${pageUtils.totalPageSize}">末页a>
      57. <span>当前页:${pageUtils.currentPageNo}span>
      58. <span>总页数:${pageUtils.totalPageSize}span>
      59. <span>总记录数:${pageUtils.totalPageCount}span>
      60. <input type="text" size="4" id="tv_num"> <input type="button" value="go" id="tv_go">
      61. div>
      62. <script>
      63. $("#tv_go").click(function () {
      64. //获取输入的页数
      65. var tv_num = $("#tv_num").val();
      66. //进行非空验证
      67. if (tv_num==null||tv_num==""){
      68. alert("不能为空");
      69. return;
      70. }
      71. var maxPage = '${pageUtils.totalPageSize}';
      72. if (tv_num<=0||parseInt(tv_num)>parseInt(maxPage)){
      73. alert("输入不合法");
      74. return;
      75. }
      76. //转发请求 到servlet获取数据
      77. window.location.href="${pageContext.request.contextPath}/studentServlet?mark=showInfo¤tPageNo="+tv_num;
      78. });
      79. $("#tv_select").click(function () {
      80. var sname = $("#tv_sname").val();
      81. //转发请求 到servlet中
      82. window.location.href="${pageContext.request.contextPath}/studentServlet?mark=showInfo&sname="+sname;
      83. })
      84. script>
      85. body>
      86. html>

      效果图:

       

    71. 相关阅读:
      java Object 重写toString方法
      【Linux】Rocky 9.0 Podman服务无法正常启动
      盘点常见的动态内存的错误
      冒泡排序以及Arrays函数及其二维数组的格式与应用
      TensorFlow入门(四、数据流向机制)
      服务器之间配置用户SSH免密登录(Linux Centos 7)
      es6.x和es7.x如何创建索引?
      第二章:整数二分与浮点数二分(极限思想)
      设计模式之适配器模式
      世微 DC-DC降压恒注驱动芯片 LED汽车大灯 过EMC认证 AP2400
    72. 原文地址:https://blog.csdn.net/qq_53884348/article/details/126699410