实现编辑功能
1.点击编辑按钮 实现获得 表中的id和获得 name的值
2.更改input里的内容
3.点击按钮就把数据库中的数据更改
1.index.jsp
<body>
<h1>Hi, JSP!</h1>
<hr>
<a href="add.jsp">新增用户</a>
<%
String str = "<h2>Hi,Java</h2>";
out.print(str);
out.print("<table><thead><tr><th>ID</th><th>NAME</th><th>Action</th></tr></thead><tbody>");
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/student?serverTimezone=CTT&useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true", "root", "123456");
PreparedStatement pst = conn.prepareStatement("SELECT id,name FROM stu");
ResultSet rs = pst.executeQuery();
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
out.print("<tr><td>"+id+"</td><td>"+name+"</td><td><a href='javascript:delStu("+id+")'>删除</a> <a href='editPre.jsp?id="+ id +"'>编辑</a></td></tr>");
}
rs.close();
pst.close();
conn.close();
out.print("</tbody></table>");
%>
<script>
var delStu = function(id) {
if (confirm("确认要删除ID是" + id + "的数据吗?")) {
window.location.href = "delStu.jsp?id=" + id;
}
}
</script>
</body>
</html>
2.更改input里的内容
editPre.jsp
<body>
<%
//第一步:获取请求参数:获取id
String id = request.getParameter("id");
String username = request.getParameter("username");
//第二部:处理业务逻辑:根据ID查询指定记录的数据
String name ="";
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/student?serverTimezone=CTT&useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true", "root", "123456");
PreparedStatement pst = conn.prepareStatement("SELECT id,name FROM stu WHERE id=?");
pst.setInt(1,Integer.valueOf(id));
ResultSet rs = pst.executeQuery();
while (rs.next()) {
name = rs.getString("name");
}
rs.close();
pst.close();
conn.close();
out.print(name);
//第三步:渲染页面
%>
<h1>编辑用户</h1>
<hr>
<a href="index.jsp">返回列表</a>
<form action="editStu.jsp" method="post" onsubmit="return editStu()">
<input type="text" name="username" value="<%=name %>" />
<input type="hidden" name="id" value="<%=id %>" />
<input type="submit" value="提交"/>
</form>
</body>
<script>
var editStu= function(){
if (confirm("确认保存数据吗?")){
return true ;
}else{
return false;
}
}
</script>
</html>
3.点击按钮就把数据库中的数据更改
editStu.jsp
<body>
<h1>新增结果</h1>
<hr>
<a href="index.jsp">返回列表</a>
<%
//获取add.jsp里面input username的值
String id = request.getParameter("id");
String username = request.getParameter("username");
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/student?serverTimezone=CTT&useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true", "root", "123456");
PreparedStatement pst = conn.prepareStatement("UPDATE stu SET name=? WHERE id=?");
pst.setString(1, username);
pst.setInt(2, Integer.valueOf(id));
int rs = pst.executeUpdate();
pst.close();
conn.close();
// jdbc编程
out.print("<h1>编辑"+rs+"条数据</h1>");
%>
</body>
</html>
get 和post的区别
Get方式:
将请求的参数名和值转换成字符串,并附加在原来的URL之后,不安全
传输的数据量较小,一般不能大于2KB;
post方式:
数量较大;
请求的参数和值放在HTML的请求头中,安全性较高。
自己写的练习代码:
login.jsp
<body>
<h1>用户登录</h1> <hr>
<form name="loginForm" action="doLogin.jsp" method="post">
<table>
<tr>
<td>用户名:</td>
<td><input type="text" name="username" /></td>
</tr>
<tr>
<td>密码:</td>
<td><input type="password" name="password" /></td>
</tr>
<tr>
<td colspan="2"><input type="submit" name="login" value="登录"/></td>
</tr>
</table>
</form>
</body>
</html>
doLogin.jsp
<body>
<h1>登陆成功</h1>
<br>
</body>
</html>
post是:
get是:
预习
Page 指令
定义页面的流模式和字符编码方式
<%@ page language=”java” contentType=”text/html; charset=UTF-8” pageEncoding=”UTF-8”%>
定义页面是 text/html 的流模式,字符编码是 UTF-8
包含指令
静态包含
<%@include file="head.jsp" %>
<h1>content</h1>
<%@include file="foot.jsp" %>
动态包含
<%
String str = "HELLO";
%>
<jsp:include page="head.jsp"></jsp:include>
<h1><%=str %>,CONTENT</h1>
<jsp:include page="foot.jsp"></jsp:include>
区别:
在静态引入中,子页面是原封不动的把页面的信息放到了父页面中,父页面把所有页面的页面信息都收集完成后,统一的进行解析,完成页面的输出。这样,如果在不同的页面中定义了相同名称的变量,那么就会产生冲突。
但是在动态引入中,由于每一个页面都是单独的进行解析的。再交给父页面合成生成一个 HTML 页面,每个子页面和父页面中定义的 Scriptlet 是不会产生冲突的
跳转指令
使用 jsp:forward 进行服务器端的页面跳转。
jsp:forward 属于服务器内部的请求跳转,不会在浏览器的地址栏留下任何跳转的痕迹。
jsp:forward 动作指令之后的代码是不会执行的。
总结
地址栏不改变的跳转属于服务器跳转;
地址栏改变的跳转属于客户端跳转;
一般使用服务器端的跳转进行业务逻辑的处理,完成目标视图的输出。