一.获取表单的数据
一般都用request对象来获取表单数据,语法如下:
String str = request.getParameter("变量名");
或者
int num = request.getParameter("变量名");
二.用JavaScript验证提交
有时输入账号或者密码为空或者错误,单机按钮时,不能直接提交数据,应该调用javascript进行验证。然后再提交。因此 提交按钮的类型不应该为submit,应该设置为button。代码如下:
jsSubmit.jsp
<%@ page language = "java" pageEncoding = "gb2312" %>
<html>
<head>
<title>
jsSubmit
</title>
</head>
<body>
欢迎登录教务管理系统
<script type = "text/javascript" >
function validate(){
if(loginForm.account.value == ""){
alert("账号不能为空");
return ;
}
if(loginForm.password.value == ""){
alert("密码不能为空");
return ;
}
loginForm.submit();
}
</script>
<form name = "loginForm" action = "target.jsp" method = "post" >
账号:<input type = "text" name = "account"><br>
密码:<input type = "password" name = "password" ><br>
<input type = "submit" name = "submit" value = "登录" onClick = "validate()">
</form>
</body>
</html>
在浏览器输入http://localhost:8080/Prj07/jsSubmit.jsp,直接点击登录按钮,如下图:
三.解决中文乱码
3.1中文无法显示
如果使用Tomcat服务器,提交的过程中会出现中文乱码问题,例如:
charCode.jsp
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<html>
<head>
<title>charCode</title>
</head>
<body>
<form action = "charCode.jsp">
请您输入学生的模糊资料:<br>
<input type = "text" name = "stuname" >
<input type = "submit" value = "查询" >
</form>
<%
String stuname = request.getParameter("stuname");
if(stuname != null){
out.println("输入的查询关键字为:" + stuname);
}
%>
</body>
</html>
在浏览器输入http://localhost:8080/Prj07/charCode.jsp,输入“杰克”,如下图:
点击查询,如下图:
显然出现了中文乱码。
乱码的原因:
可能是没有在文件头上的字符集设置为中文字符集。代码如下:
<%@ page language = "java" pageEncoding = "gb2312" %>
特别提醒: 在myeclipse中,网页没有设置中文字符集二人包含了中文,根本无法保存。
3.2提交过程中显示乱码
上面的例子中,输入了中文“杰克”,单击提交按钮。出现了乱码。这是因为“杰克”提交给服务器时,服务器将其认成ISO-8859-1编码,而网页上显示的是gb2312编码,不能兼容。 有三种方法解决这个问题。
3.2.1将其转成gb2312格式,方法如下:
charCode.jsp
<%
String stuname = request.getParameter("stuname");
if(stuname != null){
stuname = new String(stuname.getBytes("ISO-8859-1"), "gb2312");
out.println("输入的查询关键字为:" + stuname);
}
%>
此方法必须对每一个字符串进行转码,很麻烦
3.2.2直接修改request的编码
charCode.jsp
<body>
<form action = "charCode.jsp" method = "post">
请您输入学生的模糊资料:<br>
<input type = "text" name = "stuname" >
<input type = "submit" value = "查询" >
</form>
<%
request.setCharacterEncoding("gb2312");
String stuname = request.getParameter("stuname");
if(stuname != null){
out.println("输入的查询关键字为:" + stuname);
}
%>
</body>
提醒:
-
request.setCharacterEncoding("gb2312");
要在所有的request.getParameter方法的前面。 - 表单的提交方法应该是post。
- 需要对每个页面进行request转码的设置
- 比较麻烦
3.2.3利用过滤器
可以对整个Web应用进行统一的编码过滤,比较方便。内容在后面的章节再详细讲述
四.用表单添加学生信息到数据库
4.1需求分析
建立一个表单,输入学号,姓名,性别。如果学号已被添加,则显示该学生学号已存在。否则,显示添加成功,并将学生信息
添加到数据库
4.2程序代码
register.jsp
<html>
<head>
<title>register</title>
</head>
<body>
<% request.setCharacterEncoding("gb2312");//解决提交乱码问题 %>
添加学生信息<br>
<form name = "informationForm" method = "post">
学号:<input type = "text" name = "stuno"><br>
姓名:<input type = "text" name = "stuname"><br>
性别:<input type = "radio" name = "sex" value = "男" checked>男
<input type = "radio" name = "sex" value = "女" >女<br>
<input type = "submit" value = "添加" >
</form>
<%
String stuno = request.getParameter("stuno");
String stuname = request.getParameter("stuname");
String stusex = request.getParameter("stusex");
if( stuno != null){
Class.forName("com.mysql.cj.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/school?useSSL=false&serverTimezone=GMT", "root", "123456");
PreparedStatement ps = null;
ResultSet rs = null;
String sql = "select stuno from t_student where stuno = ?";
ps = conn.prepareStatement(sql);
ps.setString(1,stuno);
rs = ps.executeQuery();
if(rs.next()){
out.println("对不起,该学生学号已经存在!");
}else{
sql = "insert into t_student(stuno, stuname, stusex) values(?,?,?)";
ps = conn.prepareStatement(sql);
ps.setString(1,stuno);
ps.setString(2,stuname);
ps.setString(3,stusex);
ps.executeUpdate();
out.println("添加成功!");
}
ps.close();
conn.close();
}
%>
</body>
</html>
在浏览器输入http://localhost:8080/Prj07/register.jsp,输入信息,点击添加,如下图: