版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lanse_l/article/details/89708505
- 获取请求头数据
- 获取请求行数据
- 获取用户数据
//获取请求头数据
//获取请求方式
String method = req.getMethod();
System.out.println("请求方式:" + method);
//获取URL
String url = req.getRequestURL().toString();
System.out.println("URL:" + url);
//获取协议
String agreement = req.getScheme();
System.out.println("协议:" + agreement);
//获取请求行数据(键值对)
//获取指定键的值
String value = req.getHeader("Cookie");
System.out.println(value);
//获取所有的键
Enumeration key = req.getHeaderNames();
while(key.hasMoreElements()) {
String k = (String)key.nextElement();
String v = req.getHeader(k);
System.out.println(k + ":" + v);
}
发送响应
//设置响应头
resp.setHeader("key","123");//设置响应头,同键覆盖
resp.addHeader("key","456");//设置响应头,同键不覆盖
//设置编码格式
resp.setHeader("content-type", "text/html;charset=utf-8");
//resp.setContentType("text/html;charset=utf-8");
//设置响应状态码
resp.sendError(404,"我设置的error404");
//设置响应实体
resp.getWriter().write("你好,我是Service");
Servlet 处理表单数据
- String getParameter(String name):以字符串形式返回请求参数的值,或者如果参数不存在则返回 null
- String[ ] getParameterValues(name):如果参数出现一次以上,则调用该方法,并返回多个值,例如复选框。
- Enumeration getParameterNames():获取表单所有name参数,返回一个枚举。则可以以标准方式循环枚举,使用 hasMoreElements() 方法来确定何时停止,使用 nextElement() 方法来获取每个参数的名称
编写一个表单,通过post方法提交
<form action="servlet/MyServlet" method="post">
用户名:<input type="text" name="user"/><br/>
密 码:<input type="password" name="password"/><br/>
单选按钮:<input type="radio" name="nationality" value="China"/>中国
<input type="radio" name="nationality" value="America"/>美国
<input type="radio" name="nationality" value="French"/>法国<br/>
复选框:<input type="checkbox" name="hobby" value="bascketball"/>篮球
<input type="checkbox" name="hobby" value="football"/>足球
<input type="checkbox" name="hobby" value="Table tennis"/>乒乓球<br/>
<button type = "submit">提交</button>
</form>
表单界面显示
重写 doPost方法,在里面获取表单数据
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//设置响应内容类型
resp.setContentType("text/html;charset=UTF-8");
PrintWriter pw = resp.getWriter();
String s1 = coding(req.getParameter("user"));//获取user的值
s1 = "用户名:"+s1;
String s2 = coding(req.getParameter("password"));
s2 = s1 +"<br/>密码:"+s2;
s1 = coding(req.getParameter("nationality"));
s2 += "<br/>国籍:" + s1;
String[] s = req.getParameterValues("hobby");//获取同名的多个值
s2 += "<br/>爱好:";
for(String temp:s) {
s2 += coding(temp);
}
pw.write(s2);
//获取全部的表单数据
pw.write("<br><br>-----完整表单获取------<br>");
Enumeration all = req.getParameterNames();
while(all.hasMoreElements()) {
String name = (String)all.nextElement();
pw.write("<br>" + name+":");
String values[] = req.getParameterValues(name);
for(String temp:values) {
pw.write(coding(temp));
}
}
}
private String coding(String s) { //处理编码为"utf-8"
String res="";
try {
res = new String(s.getBytes("ISO8859-1"),"utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return res;
}
获得返回的结果:
练习——通过数据库验证登录信息是否正确
resp.setContentType("text/html;charset=utf-8");
PrintWriter pw = resp.getWriter();
//获取登录信息
String user = req.getParameter("user");
String password = req.getParameter("password");
//声明JDBC对象
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
//加载驱动
Class.forName("com.mysql.jdbc.Driver");
System.out.println(1);
//获取连接对象
String url = "jdbc:mysql://localhost:3306/lcb?serverTimezone=GMT";
conn = DriverManager.getConnection(url, "root", "lanse0305**");
System.out.println(2);
//创建sql命令
String sql = "select * from Login where user=? and password=?";
//创建sql命令对象
ps = conn.prepareStatement(sql);
System.out.println(3);
//给占位符赋值
ps.setString(1, user);
ps.setString(2, password);
//执行
rs = ps.executeQuery();
System.out.println(4);
if( rs.next()) {
pw.write("密码正确");
}else {
pw.write("密码错误!");
}
}catch(Exception e) {
e.printStackTrace();
}finally {
//关闭资源
try {
rs.close();
ps.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}