Servlet--登录案例及编码解决方案

来源:互联网 发布:广州淘宝拍照的地方 编辑:程序博客网 时间:2024/06/11 07:19

一.HTTP协议

1.什么是HTTP协议

  • 就是W3C制定的规范
  • 规定了浏览器和服务器如何通信及数据格式

2.如何通信

  • 建立连接
  • 发送请求
  • 返回响应
  • 关闭连接

一次请求一次连接,尽量降低服务器的压力

3.数据格式

3.1请求数据

  • 请求行:本次请求的基本信息
  • 消息头:对发送内容的描述信息
  • 实体内容:浏览器向服务器发送的具体内容

3.2 响应数据

  • 状态行:本次响应的基本信息
  • 消息头:对响应内容的描述信息
  • 实体内容:服务器向浏览器发送的具体内容

4.开发时需要做的事情

4.1不需要开发做的事情

  • 通信的方式已经由浏览器和服务器实现了
  • 浏览器自动组装并发送请求数据
  • 服务器自动组装并发送响应数据

4.2需要开发做的事情

  • 使用request处理(接收)请求数据
  • 使用response处理(拼接)响应数据

二.注册功能


三.Servlet运行原理


四.请求方式

1.什么是请求方式

  • 浏览器向服务器发送请求数据的方式

2.分类

  • 请求方式有很多种,需掌握其中的2种:GET和POST

3.GET和POST请求的区别(*)

1)GET

  • 采用路径传参
  • 参数在传递的过程中可见,隐私性差
  • 只能传递少量参数

所有默认的请求都是GET请求

2)POST

  • 采用实体内容传参
  • 参数在传递过程中不可见,隐私性好
  • 传递的数据量不受限制

在form上加method="post"

4.使用建议

  • 查询数据时建议用GET,因为往往查询条件不多
  • 保存、提交数据时建议用POST,因为往往保存、提交的数据较多

五.乱码解决方案


servlet代码:

package web;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class RegServlet extends HttpServlet {private static final long serialVersionUID = 1L;@Overrideprotected void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {req.setCharacterEncoding("utf-8");//处理请求的步骤://1.接受参数  //String user = req.getParameter("username1");String user = req.getParameter("username");String pwd = req.getParameter("password");String sex = req.getParameter("sex");String[] interests = req.getParameterValues("interest");//注意事项:如果参数名写错则返回null,若文本框中不输入,则返回空字符串,若单选或多选未选中,则返回null//处理request请求乱码(针对post和get都可用,但是每个数据都需要转换,很麻烦)/*byte[] bs = user.getBytes("ISO8859-1");user = new String(bs,"UTF-8");*///2.处理业务//常规的注册业务应该保存这些数据,此案例省略System.out.println(user);System.out.println(pwd);System.out.println(sex);if(interests != null){for(String str : interests){System.out.println(str);}}//3.发送响应res.setContentType("text/html;charset=utf-8");PrintWriter out = res.getWriter();out.println("<p>注册成功</p>");out.close();}/*** * 发送请求时候的乱码是由于编码不一致导致解码错误,而响应时默认都是ISO-8859-1, * 但由于此编码不包含中文,二者有区别 */}

reg.html网页如下:

<!DOCTYPE html><html><head><meta charset="UTF-8"><title>注册</title></head><body>  <!--   1.完整路径  http://localhost:8080/servlet1/reg  2.绝对路径  格式:/项目名/访问路径   例如:servlet1/reg  3.相对路径(重点) 相对路径不能以斜线开头  只需写出目标和当前页面的相对位置  当前页面:/servlet1/reg.html  访问目标:/servlet1/reg  相对路径为:reg   -->  <form action="reg" method="post">    <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>


0 0