项目结构:
image.png
jsp(最后正确的)写法:
pageEncoding="UTF-8"%>
String path = request.getContextPath();
%>
--%>
数据库增删改查function dosubmit() {
var th = document.form1;
if (th.id.value == "") {
alert("用户名不能为空");
th.id.focus();
return;
}
if (th.username.value == "") {
alert("姓名 不能为空");
th.username.focus();
return;
}
if (th.age.value == "") {
alert("密码不能为空");
th.age.focus();
return;
}
th.action="/xxx/Action"
th.submit();
}
ID:
姓名:
年龄:
数据从jsp页面输入,点击“确定”后触发dosubmit()提交输入信息到Action.java。
Action.java片段:
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String path = request.getContextPath();
request.setCharacterEncoding("utf-8");
response.setContentType("text/html; charset=utf-8");
PrintWriter out = response.getWriter();
String id = request.getParameter("id");
String username = request.getParameter("username");
String age = request.getParameter("age");
System.out.println("id = " + id + " username = " + username + " age = " + age);
List params = new ArrayList();
params.add(id);
params.add(username);
params.add(age);
boolean flag = service.registerUser(params);
if(flag){
out.println("注册成功");
response.sendRedirect(path + "/success.jsp");
}else{
out.println("注册失败");
response.sendRedirect(path + "/fail.jsp");
}
out.flush();
out.close();
}
通过request.getParameter获取信息,然后通过Service接口调用Dao,通过jdbc向数据库里存数据。
遇到的问题:
最开始1.jsp里的确定按钮是这样写的:
Action.java里加断点,然后params参数里直接传数据,可以保存成功。但从1.jsp里输入的时候就保存不成功,并且没有走到doPost方法里。证明从servlet-->Dao-->jdbc是通的,但jsp-->servlet不通。所以浏览器进入F12模式检查post的数据和Request URL是否正确。检查结果post数据没有问题,但Request URL是localhost:8080/Data。jsp里的路径写的是/xxx/Action,和web.xml里url pattern一致,证明jsp里并没有触发dosubmit()里的th.action,锁定问题范围:检查确定按钮和dosubmit()有没有绑定。目测标签和标签是绑定不了的?所以改成了:
最后测试成功。
假如1.jsp写成这样:
ID:
姓名:
年龄:
那么信息可以存入数据库,但不是经过dosubmit(),所以姓名或年龄可以为空。