JavaWeb学习(二)快速实现Web页面的开发
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>