一、转发
转发:一般查询了数据之后,转发到一个jsp页面进行展示
req.setAttribute("list", list);
req.getRequestDispatcher("student_list.jsp").forward(req, resp);
二、重定向
重定向:一般添加、删除、修改之后重定向到查找所有
resp.sendRedirect("/student");
重定向的状态码是302,重定向的地址最终是由浏览器发送这个请求
给超链接添加点击事件并触发:
<a href="javascript:void(0)" onclick="method()"></a>
<a href="javascript:;" οnclick="method()"></a>
<a href="javascript:method();">xxx</a>
三、Get
- 采用URL请求路径传输参数,参数拼接在URL后面
- 参数传输过程中隐私性较差,直接在URL后面
- 路径可以容纳的数据有限,只能传递少量参数
- form表单请求默认就是get
http://localhost:8080/student?method=deleteById&id=23
http://localhost:8080/student?name=zhangsan&age=12&gender=男
Get方式传参,不是非得在form表单里面,可以手动写,在超链接的href里面直接在地址后面加?id=2
四、POST
- 采用实体内容传参数
- 参数在传输过程中不可见,隐私性好
- 实体内容专门用来传输数据,大小没有限制
- 使用:在form上加method="post"
不管是Get方式还是POST方式传参数,后台代码获取参数的方式都是一样的。
req.getParameter("name");
五、乱码问题总结
1、数据库创建时候选择utf-8编码
连接数据库url:
jdbc:mysql://localhost:3306/java?useUnicode=true&characterEncoding=UTF-8
2、解决post请求乱码问题 method="post"
req.setCharacterEncoding("UTF-8");
3、服务器响应浏览器的乱码问题:
resp.setContentType("text/html;charset=utf-8");
六、前台往后台发请求方式
- form表单
- 超链接删除
- location.href
- ajax
跳转到一个jsp页面的方式:
- 直接访问这个jsp页面 http://localhost:8080/student_update.jsp
- 访问servlet转发到这个页面
七、增删改查代码
//http://localhost:8080/index.jsp
//http://localhost:8080/student
@WebServlet("/student")
public class StudentServlet extends HttpServlet {
//默认访问service
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//System.out.println("StudentServlet.service");
//解决post请求乱码问题
req.setCharacterEncoding("UTF-8");
// http://localhost:8080/student?method=selectAll
// http://localhost:8080/student?method=deleteById&id=23
String method = req.getParameter("method");
if (method == null || method.equals("")) {
method = "selectAll";
}
switch (method) {
case "selectAll":
selectAll(req, resp);
break;
case "deleteById":
deleteById(req, resp);
break;
case "add":
add(req, resp);
break;
case "toUpdate":
toUpdate(req, resp);
break;
case "update":
update(req, resp);
break;
}
}
private void update(HttpServletRequest req, HttpServletResponse resp) throws IOException {
System.out.println("StudentServlet.update");
String id = req.getParameter("id");
String name = req.getParameter("name");
String age = req.getParameter("age");
String gender = req.getParameter("gender");
Connection connection = null;
PreparedStatement preparedStatement = null;
try {
connection = JDBCUtil.getConnection();
String sql = "update student set name=?,age=?,gender=? where id=?";
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, name);
preparedStatement.setInt(2, Integer.parseInt(age));
preparedStatement.setString(3, gender);
preparedStatement.setInt(4, Integer.parseInt(id));
System.out.println(preparedStatement);
int count = preparedStatement.executeUpdate();
System.out.println("count: " + count);
} catch (SQLException throwables) {
throwables.printStackTrace();
}
resp.sendRedirect("/student");
}
private void toUpdate(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("StudentServlet.toUpdate");
String id = req.getParameter("id");
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
Student student = null;
try {
connection = JDBCUtil.getConnection();
String sql = "SELECT id,name,age,gender FROM student where id=?";
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setInt(1, Integer.parseInt(id));
System.out.println(preparedStatement);
resultSet = preparedStatement.executeQuery();
while (resultSet.next()) {//判断下一个有没有,如果返回true而且指向下一个,没有返回false
//int id = resultSet.getInt("id");
String name = resultSet.getString("name");
int age = resultSet.getInt("age");
String gender = resultSet.getString("gender");
student = new Student(Integer.parseInt(id), name, age, gender);
}
} catch (SQLException throwables) {
throwables.printStackTrace();
} finally {
JDBCUtil.close(connection, preparedStatement, resultSet);
}
//把list数据放到req里面
req.setAttribute("student", student);
//转发到student_list.jsp页面进行展示
req.getRequestDispatcher("student_update.jsp").forward(req, resp);
}
private void add(HttpServletRequest req, HttpServletResponse resp) throws IOException {
System.out.println("StudentServlet.add");
String name = req.getParameter("name");
String age = req.getParameter("age");
String gender = req.getParameter("gender");
Connection connection = null;
PreparedStatement preparedStatement = null;
try {
connection = JDBCUtil.getConnection();
String sql = "insert into student(name,age,gender) values(?,?,?)";
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, name);
preparedStatement.setInt(2, Integer.parseInt(age));
preparedStatement.setString(3, gender);
System.out.println(preparedStatement);
int count = preparedStatement.executeUpdate();
System.out.println("count: " + count);
} catch (SQLException throwables) {
throwables.printStackTrace();
} finally {
JDBCUtil.close(connection, preparedStatement, null);
}
resp.sendRedirect("/student?method=selectAll");
}
private void deleteById(HttpServletRequest req, HttpServletResponse resp) throws IOException {
String id = req.getParameter("id");
Connection connection = null;
PreparedStatement preparedStatement = null;
try {
connection = JDBCUtil.getConnection();
String sql = "delete from student where id=?";
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setInt(1, Integer.parseInt(id));
System.out.println(preparedStatement);
int count = preparedStatement.executeUpdate();
System.out.println("count: " + count);
} catch (SQLException throwables) {
throwables.printStackTrace();
} finally {
JDBCUtil.close(connection, preparedStatement, null);
}
// /student 302
// 重定向
resp.sendRedirect("/student?method=selectAll");
}
private void selectAll(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
List<Student> list = new ArrayList<>();
try {
connection = JDBCUtil.getConnection();
String sql = "SELECT id,name,age,gender FROM student";
//预编译
preparedStatement = connection.prepareStatement(sql);
System.out.println(preparedStatement);
resultSet = preparedStatement.executeQuery();
while (resultSet.next()) {//判断下一个有没有,如果返回true而且指向下一个,没有返回false
int id = resultSet.getInt("id");
String name = resultSet.getString("name");
int age = resultSet.getInt("age");
String gender = resultSet.getString("gender");
Student student = new Student(id, name, age, gender);
list.add(student);
}
for (Student student : list) {
System.out.println(student);
}
} catch (SQLException throwables) {
throwables.printStackTrace();
} finally {
JDBCUtil.close(connection, preparedStatement, resultSet);
}
//把list数据放到req里面
req.setAttribute("list", list);
//转发到student_list.jsp页面进行展示
req.getRequestDispatcher("student_list.jsp").forward(req, resp);
}
}
student_list.jsp
<%@ page import="com.situ.web.pojo.Student" %>
<%@ page import="java.util.List" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
<link rel="stylesheet" href="static/bootstrap-3.4.1-dist/css/bootstrap.css">
</head>
<body>
<%
//JSP页面中可以嵌套Java代码
//JSP脚本:在这里可以写任意的Java代码
//request、response:JSP页面的内置对象
List<Student> list = (List<Student>) request.getAttribute("list");
%>
<a class="btn btn-primary" href="/student_add.jsp">添加</a>
<table class="table table-striped table-bordered table-hover table-condensed">
<tr>
<td>ID</td>
<td>名字</td>
<td>年龄</td>
<td>性别</td>
<td>编辑</td>
<td>删除</td>
</tr>
<%
for (Student student : list) {
%>
<tr>
<td><%=student.getId()%></td>
<td><%=student.getName()%></td>
<td><%=student.getAge()%></td>
<td><%=student.getGender()%></td>
<td><a href="/student?method=toUpdate&id=<%=student.getId()%>">编辑</a></td>
<%--/deleteStudent?id=12 --%>
<%--<td><a href="/deleteStudent?id=<%=student.getId()%>">删除</a></td>--%>
<%--<td><a href="/student?method=deleteById&id=<%=student.getId()%>">删除</a></td>--%>
<td><a href="javascript:deleteById(<%=student.getId()%>)">删除</a></td>
</tr>
<%
}
%>
</table>
<script>
function deleteById(id) {
var isDelete = confirm('您确认要删除?');
if (isDelete) {
location.href = '/student?method=deleteById&id=' + id;
}
}
</script>
</body>
</html>
student_add.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="/student?method=add" method="post">
用户名:<input type="text" name="name"/><br/>
年龄:<input type="text" name="age"/><br/>
性别:<input type="text" name="gender"/><br/>
<input type="submit" value="添加"/>
</form>
</body>
</html>
student_update.jsp
<%@ page import="com.situ.web.pojo.Student" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
Student student = (Student) request.getAttribute("student");
%>
<form action="/student?method=update" method="post">
<input type="hidden" name="id" value="<%=student.getId()%>"/>
用户名:<input type="text" name="name" value="<%=student.getName()%>"/><br/>
年龄:<input type="text" name="age" value="<%=student.getAge()%>"/><br/>
性别:<input type="text" name="gender" value="<%=student.getGender()%>"/><br/>
<input type="submit" value="修改"/>
</form>
</body>
</html>