MVC:三层架构

(一)表示层
1、表示前台代码:JSP
2、表示后台代码:Servlet
(二)业务逻辑层 (逻辑、可拆)
  增  删  改  查   :Service
(三)数据访问层 (原子 )
  增  删  改  查   :JDBC、Dao

一、JSP

(一)语法:

1. 注释: <%--...........--%>

2. 直接输出: <=%----%>

3. 写入java代码: <%.............%>

4. 定义方法: <%!...............%>

<%!%>是用来定义成员变量属性和方法的,<%%>主要是用来输出内容的,因此如果涉及到了成员变量的操作,那么我们就应该使用<!%%>,而如果是涉及到了输出内容的时候,就使用<%%>。

(二) reques:

1、获取JSP页面谁的参数:request.getParemeter(String name)

2、转发:request.getRequestDispatcher( b.jsp ).forward( request,response)

(三)response

1、重定向跳转页面,不保留数据:response.sendRedirect(a.jsp)

(四)导包问题

<% page import = "自己建的包名">

二、JDBC

(一)基本方法:

1、DriverManager : 管理驱动

2、Connection:链接

3、PreparedStatement:操作

4、CallableStatement:调用数据库中储存函数

5、Result:返回结果集

(二)步骤

1、链接数据库

public static Connection getConnection() throws Exception, SQLException {
        Connection connection = null;
        PreparedStatement pstmt = null;
        ResultSet re = null;

(1)普通方法:
      Class.forName("com.mysql.cj.jdbc.Driver");
      connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/数据库名 ?useUnicode=true&characterEncoding=utf8", "root", "123456");
(2)数据池:
     1.加载配置文件
        Properties prop = new Properties();
        prop.load(new FileInputStream("数据池地址"));
     2.连接数据池
        DataSourse dataSourse = DruidDataSourseFactory.createDataSourse(prop);
     3.获取数据库连接
        Connection connection = dataSourse.getConnnection();  
return connection;
    }
    public static void close(Connection connection)
    {

        if(connection != null)
        {
            try {
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
    public static void close(PreparedStatement preparedStatement)  {
        if(preparedStatement != null)
        {
            try {
                preparedStatement.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
    public static void close(ResultSet resultSet)  {
        if(resultSet != null)
        {
            try {
                resultSet.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

 

2、sql语句: sql = "     "

3、获取对象

PreparedStatement  pstmt = connection.preparedStatement (sql);

String sql = "insert into 数据库名(......) value (?,?,?,?,?)

pstmt.setInt(1,固定值 / 对象.get函数)

(1)添加

String sql = "insert into 数据库名(......) value (?,?,?,?,?)";
PreparedStatement  pstmt = connection.preparedStatement (sql);
pstmt.setInt(1,固定值 / 对象.get函数);
pstmt.setString(2,值);
int count = pstmt.executeUpdata();
   影响的行数              增删改

(2)查询

(1)查询全部
String sql = "select * from 数据库名";
PreparedStatement  pstmt = connection.preparedStatement (sql);

ResultSet rs = pstmt.executeQuery();
   影响的行数                  查
List<Bean> list = new Arraylist();
while( rs.next())
{
                             int id = rs.getInt("id");
                             ......
构建Javabean对象              1. Bean bean = new Bean();
                                 bean.setId( id);  
                             2. Bean bean = new Bean( id , name );

入数据库                  list.add( bean );
}
return list;
(2)单条查询
String sql = "select * from 数据库名 where ";
PreparedStatement  pstmt = connection.preparedStatement (sql);
pstmt.setInt(1,id);
ResultSet rs = pstmt.executeQuery();
   影响的行数                  查
Bean bean = new Bean();
while( rs.next())
{
                             int id = rs.getInt("id");
                             ......
构建Javabean对象              1. bean.setId( id);  
                             2. bean = new Bean( id , name );
}
return bean;

(3)修改

String sql =  "update 表名\n"+
                "set  hu_bie  = ?,\n "+
                 "idc  = ?,\n " +
                 "name = ?,\n"+
                 "sex = ?\n" +
                "where id = ?";
PreparedStatement  pstmt = connection.preparedStatement (sql);
pstmt.setInt(1,固定值 / 对象.get函数);
pstmt.setString(2,值);

int count = pstmt.executeUpdata();
   影响的行数              增删改
return count;

(4)删除

Connection connection = jdbcUtil.getConnection();
        String sql = "delete from 表名 where id = ?";

        PreparedStatement pstmt = null;
        pstmt = connection.prepareStatement(sql);

        pstmt.setInt(1,  person.getId());

        int count =pstmt.executeUpdate();
        jdbcUtil.close(connection);
        jdbcUtil.close(pstmt);

        return count;

 

三、Servlet

(一)准备

25版本:在web.xml中配置

<servlet>

   <servlet-name> servlet名字 </servlet>

  <servlet-class>地址</servlet>

</servlet>

<servlet-mapping>

    <servlet-name> servlet名字 </servlet>

    <url-pattern>  / servlet名字 </url-pattern>

</servlet-mapping>

30版本: Servlet头 @WebServlet("根目录")

(二) 书写

request.setcharaterEncoding("utf-8")
request.getParameter("传参名")
构建JavaBen对象,利用有参构造
Jsp中写 : Servlet?method=add 在Servlet中添加方法
1.   String name = request.getParameter("name")
2.    int id = Integer.parseInt(request.getParameter())
Service service = new Service();
service.add(对象)
跳转页面
1. request.getRequestDispatcher( b.jsp ).forward( request,response)
2. 提示框
3. PrintWirter out = response.getWriter();
    out.write("你好")   /  out.println("你好")

(三) 提示框

Servlet中:
if()
request.setAttribute("message","添加成功");
else 
------------------------------------添加失败;
request.getRequestDispatcher("add.jsp").forward(request , response)

JSP中:
<%  Object message = request.getAttribute("message")
        if(message  != null && !"".equals(message)) {
%>

<script  type = "text/javascript">
alert(" <%= request.getAttribute(" ") %>")
</script>

<%  }  %>

 

四、Service

(一)书写

1 Dao dao = new  dao;
2 public boolean add( Bean bean) 
3 {
4  dao.add(bean); 
5 }

 

五、制作一张查询详细信息的表格

 

(一)外层JSP

列名:
<table border="1px">
  <tr>
        <th>学号</th>
        <th>姓名</th>
  </tr>
(一)Servlet中, request.setAttribute("list" , list)
                     request.getRequestDispatcher(JSP).forward(re,re)
(二)JSP中 : <% List<Student> list = (List<>) request.getAttribute("list");
(二)内层JSP
按学号查询某人信息
(一)Servlet中, request.setAttribute("student" , student) request.getRequestDispatcher(JSP).forward(re,re) 
(二)JSP中 : <% Student student = (Student) request.getAttribute("studetn"); 

传入地址同时传入参数
<form action=" Servlet?method=updata && id=<%=student.getId() %> " 
/   "Servlet ? id =<%=student.getId() %>"   
/    "Servlet?method=updata && id=${itemid} "

普通文本:
学号: <input type = "text" name = id  value = "<%=student.getId() %>  readonly="readonly"(只读) >
单多选:
<tr>
       <td>性别<input value="<%=persons.getSex()%>"/></td>
              <td>
                 <label>
                     <input type="radio" name="sex" value="男">男
                     <input type="radio" name="sex" value="女">女
                  </label>
              </td>
 </tr>


 <tr align="center">
                <td colspan="2">
                    <input type="submit" value="提交" />
                    <input type="reset" value="重置" />
                </td>
            </tr>
        </table>
    <a href="index.jsp">返回主页</a>

 

(二)优化查询

1 <c: forEach items="${list}" var="item"> 
2     <tr> 
3       <td>${item.id}</td> 
4             ......................
5       <td>
6      <tr>
7 <a href="Servlet?method=del&&id=${item.id}">删除</a></td> </c:forEach>