话不多说,我们新建一个java web + tomcat项目,具体步骤可以参照我的另一篇:
用Intellij idea新建一个java web+Servlet项目(有实例)到配置完成那一步再回来。
在src目录下新建web文件夹,在web文件夹下新建regServlet.java文件。
在与src同级的web目录下新建register.html文件。
先来写register.html里的内容,也就是注册界面。代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>servlet2</title>
</head>
<body>
<!--
1.完整路径:localhost:8080/servlet2/reg
2.绝对路径:格式:/项目名/网名 实例:/srevlet2/reg
3.相对路径(*):只需写出目标和当前页面的相对位置
当前页面:/servlet2/register.html
访问目标:/servlet2/reg
二者是平级关系,相对路径是reg,不能以/开头
-->
<form action="reg" method="host">
<p>
账号:<input type="text" name="userName">
</p>
<p>
密码:<input type="password" name="passWord">
</p>
<p>
性别:
<input type="radio" name="sex" value="M">男
<input type="radio" name="sex" value="F">女
</p>
<p>
兴趣:
<input type="checkbox" name="interest" value="sport">运动
<input type="checkbox" name="interest" value="music">音乐
<input type="checkbox" name="interest" value="movie">电影
</p>
<p>
<input type="submit" value="注册">
</p>
</form>
</body>
</html>
把所有需要提交的组件都写在form中,form标签中的method=“host” 表示这里
使用HOST来进行请求。
GET和HOST的详解:servlet请求方式
action="reg"表示点击提交以后会跳转到这个页面,这里使用相对路径。而reg其实是regServlet.java文件的别名。
别名在web.xml文件中进行设置,代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<servlet>
<servlet-name>reg</servlet-name>
<servlet-class>web.regServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>reg</servlet-name>
<url-pattern>/reg</url-pattern>
</servlet-mapping>
</web-app>
然后我们来写regServlet.java文件,代码如下:
package web;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
public class regServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
//处理请求的一般步骤是:
//1.接收参数
String user = req.getParameter("userName");
String pwd = req.getParameter("passWord");
String sex = req.getParameter("sex");
String[] interests = req.getParameterValues("interest");
//处理请求乱码
//方案一:将乱码后的字符串按照ISO还原再按UTF编码。不常用
byte[] bs = user.getBytes("ISO8859-1");
user = new String(bs,"utf-8");
//方法二:只对GET有效,在eclipse中:server.xml中65行加URIEncoding="utf-8"
//优点:简单 缺点:只对GET有效
// 在idea中,File->Settings->Editor->File Encodings 把页面上的三个选项都改成UTF-8
//方法三:只对POST有效,在接收参数前,加req.setCharactorEncoding("UTF-8")
//声明试题内容的编码为UTF-8
//优点:简单 缺点:只对POST有效
//2.处理业务
//常规的注册业务应该保存这些数据,但本案例重点在于传参,因此就不存了。
System.out.println(user);
System.out.println(pwd);
System.out.println(sex);
if (interests != null) {
for (String i : interests) {
System.out.println(i);
}
}
//3.发送响应,这里也要对编码方式进行处理,不然“注册成功”就会是乱码
resp.setContentType("text/html;charset=utf-8");
PrintWriter out = resp.getWriter();
out.println("<p>注册成功</p>");
out.close();
}
}