JSP基础:四、学生信息管理系统思路


一、复习
 Servlet概述
 开发我们的第一个Servlet(手工创建)
 HttpServlet的创建(工具创建)
 Servlet工作原理
 Servlet获取参数代码示例
二、新内容 Servlet用户登录实例             javax.servlet包和javax.servlet.http包
 1、MVC模式介绍,为什么要使用模式?Model模型层-View视图层-Control控制层
 因为模式是一种指导,在一个良好的指导下,有助于你完成任务,
 有助于你作出一个优良的设计方案,达到事半功倍的效果。
 而且会得到解决问题的最佳办法。 设计模式的目标就是
 提高系统的可维护性和可复用性。
 (私人承包的建筑队伍和中国建设集团的区别,参考图片)
 M odel   :   entity实体类   表示一个表的数据模型User.java
 V iew    :   JSP                收集数据、事件处理、展示数据
 C ontrol:   Servlet           控制跳转
  在J2EE中,一般由jsp扮演View层、Servlet扮演Control层、java撰写Model层。
JSP 仅能作为表现层(View)技术,作用有三点:
    1. 负责收集用户请求参数。2. 用户事件的处理。3、状态数据呈现给用户。
Servlet 则仅充当控制器(Controller)角色,用户类似于调度员:(所以用户的请求发送给 Servlet , Servlet 调用 Model 来处理用户请求,并调用 JSP 来呈现处理结果;)
Model 通常由 JavaBean 来充当,所以业务逻辑、数据访问逻辑都在 Model 中实现。
 2、新建一个Java Web Project【StuPrj】
 3、新建MVC分层模式下的包,便于对不同层面的对象进行操作(面向对象思想)
  com.style.control   访问控制层Servlet
  com.style.dao 数据访问层DAO  Data Access Object
  com.style.entity 实体层      User  Student等实体对象
  com.style.dbutil 工具包 封装数据连接类等
 4、在com.style.dbutil里写数据库的连接工具类【DBConnection.java】
 5、在com.style.entity里写从数据库表抽象出来的用户User对象【User.java】
  属性有int uid;String uname;String upwd;跟数据库表的字段一一对应。
 6、在com.style.dao里写数据库表User的访问DAO【UserDao.java】
  //根据用户名和密码来获取用户对象
  public User getUser(String name,String pwd)
 7、在com.style.control里写用户登录的Servlet【LoginServlet.java】
  用户填入用户名密码后跳这个Servlet,
  在doPost方法中调用UserDao判断用户是否有权限登录,
  能登录跳转到stuinfo.jsp,不能登录踢回login.jsp
 注意:JSP中和Java中导包的区别!
 JSP:      <%@page import="com.style.dao.StuDao"%>
 Java:     import com.style.dao.StuDao;
三、学生管理系统实现
 首先参考系统的流程图。
 1、获取全部学生展示到页面上
     a、首先新建学生表录入学生的信息,
          并在com.style.entity包中新建Student.java类。【实体层】
     b、在com.style.dao包中新建StuDao.java的类,
          用于学生表的数据访问(增删改查)。【数据访问层】
          新增获取所有学生的方法:public ArrayList<Student> getAllStudents()
          PreparedStatement是预编译的,对于批量处理可以大大提高效率
          也叫JDBC存储过程。
     c、在com.style.control包中新增一个StuInfoServlet,
          在doPost方法中调用StuDao的获取所有学生的方法,用户获得所有学生信息。
           删除学生信息成功后跳转回stuinfo.jsp页面。
  1、解决请求乱码问题、解决响应乱码问题。
  2、调用DAO查询到集合数据。
  3、将查到的数据存到request对象中。
  4、页面转发到stuinfo.jsp。
     d、准备stuInfo.jsp页面(分析原来的页面,纯jsp怎么写)
          原来纯JSP页面:在尖括号百分号写java代码,页面上写【数据库连接查询、学生的每一条信息】html和java混合,循环tr输出内容                   
          MVC实现JSP页面:
  1、从请求request中得到所有学生的集合【得到数据】
  2、循环tr输出内容。【展示数据】
 2、删除学生信息
      a、在com.style.dao包StuDao.java类中,
           新增删除指定学生的方法:public void deleteStudent(String sno)
      b、在com.style.control包中新增一个delete的Servlet,
           在doPost方法中调用StuDao的删除学生方法,用于删除学生信息。
           删除学生信息完成后跳转到stuinfo的Servlet
      c、JSP界面stuinfo.jsp上调用删除事件
<a href="delete?num=<%=s.getSno()%>" οnclick="return confirm('是否删除该学生信息?')">删除</a>
 -----------------------------------------------------------------------
      注意:【常见错误】
     java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
      没有导包、数据库驱动字符串没有写对。                               
     java.sql.SQLException: No value specified for parameter 1
     你sql语句中的参数和你设置的?不对应 
 -----------------------------------------------------------------------
 3、添加学生信息
      a、在com.style.dao包StuDao.java类中,
           新增添加学生的方法:public void addStudent(Student s)
      b、在stuinfo.jsp上新增添加的学生的链接:
           <a href="addstu.jsp">添加学生</a>
      c、新建addstu.jsp页面、参考前期的新增学生页面(纯表单界面)。
      d、在新学生信息填写完毕后,提交到一个处理数据的Servlet:
           在com.style.control包中新增一个add的Servlet
  1、解决请求乱码问题、解决响应乱码问题
  2、获取前一个页面传递过来的参数
  3、把数据封装成Student
  4、调用DAO,将数据插入数据库
  5、新增完成后跳转到stuinfo的Servlet
 4、修改学生信息
      a、在com.style.dao包StuDao.java类中,
           新增修改学生的方法:public void updateStudent(Student s)
      b、JSP界面stuinfo.jsp上调用修改事件
  <a href="update?num=<%=s.getSno()%>">修改</a>
      c、新建updatestu.jsp页面参考前期的修改学生页面(纯表单界面,对比之前界面)
      d、在新学生信息修改完毕后(学生编号不能改),提交到update的Servlet。
      e、在com.style.control包中新增一个update的Servlet
  1、解决请求乱码问题、解决响应乱码问题
  2、调用DAO,进行数据库修改操作
  5、修改完成后跳转到stuinfo的Servlet
 5、知识扩展和常见问题:
      a、转发和重定向的区别
 见示例项目:WebDemo
           转发:
 request.getRequestDispatcher("/index").forward(request, response);
           重定向:
 response.sendRedirect("index");   不能有斜杠
 区别:
 地址栏:转发地址栏的URL不会变化,重定向地址栏的URL会变成定向后的地址。
 参数:   转发会将request和response里的参数带过去,重定向不能携带参数。
 发生在:转发发生在服务器,重定向发生的客户端。
 原理:   转发----->请求--->demo1--->带着你和你的礼物私下去找--->index.jsp
             重定向--->请求--->demo2--->收下你的礼物给你一个消息(去找index.jsp)
         --->请求--->index.jsp (礼物没有了) 
 图示:见图示。
 问题:帐号密码错误了,要跳转回login.jsp,重定向还是转发?点击修改按钮,进入UpdateInitServlet,根据拿到的学号,查询到一个Student信息,跳转到update.jsp,重定向还是转发?
      b、关于跳转路径中带不带/的问题。
  1、对于JSP页面来说,斜杠代表web服务器(tomcat)的根目录
  2、对于Servlet来说,斜杠代表项目的根目录。
   response.sendRedirect("login.jsp"); //响应是JSP页面级别的
      c、Servlet中怎么获取客户端浏览器传过来的参数?
  String name = request.getParameter("name");       姓名
  String[] strs= request.getParameterValues("ah");   爱好
      c、每一步DAO中访问数据库的方法开发完成后在main方法中测试一次。
      d、DBConnection.java数据库连接工具类。
      e、数据库中字段使用数据库关键字如:like、in等,sql中使用``包起来可以解决。
      f、关于DAO层继续抽象出BaseDao的扩展

 
       
发布了44 篇原创文章 · 获赞 7 · 访问量 4万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章