SERVLETJSP Unit02: Servlet工作原理

来源:互联网 发布:莆田高仿鞋淘宝店 编辑:程序博客网 时间:2024/05/20 13:36

一.HTTP协议

1.什么是HTTP协议?

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

2.如何通信

  • 建立连接
  • 发送请求
  • 接收响应
  • 关闭连接
    一个请求一次连接,尽量降低服务器的压力

3.请求数据结构

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

4.响应数据结构

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

5.注意

1)很多事情不需要我们处理

  • 通信的步骤由浏览器和服务器自动实现
  • 请求数据中的请求行,消息头由浏览器自动填写
  • 响应数据中的状态行,消息头通常由服务器自动填写

2.少量事情需要我们处理

  • 请求数据中的实体内容由我们提供
  • 响应数据中的实体内容由我们提供
    通过request处理请求数据,通过response处理响应数据

二.注册案例

这里写图片描述

reg.html

<!DOCTYPE html><html><head><meta charset="UTF-8"><title>注册</title></head><body>    <!--         1.完整路径            http://ip:port/项目名/网名        2.绝对路径            格式: /项目名/网名            举例: /servlet2/reg        3.相对路径            当前: /servlet2/reg.html            目标: /servlet2/reg            相对路径: reg     -->    <form action="reg" method="post">        <p>            账号:<input type="text" name="username"/>        </p>        <p>            密码:<input type="password" name="pwd"/>        </p>        <p>            性别:            <input type="radio" name="sex" value="M"/><input type="radio" name="sex" value="F"/></p>        <p>            兴趣:            <input type="checkbox" name="interest" value="food"/>美食            <input type="checkbox" name="interest" value="game"/>竞技            <input type="checkbox" name="interest" value="friend"/>社交        </p>        <p>            <input type="submit" value="注册"/>        </p>    </form></body></html>

RegServlet.java

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 {    @Override    protected void service(        HttpServletRequest req,         HttpServletResponse res) throws ServletException, IOException {        //采用方案三解决POST请求乱码问题        req.setCharacterEncoding("utf-8");        //处理请求的一般流程        //1.接收参数        String name = req.getParameter("username");        String pwd = req.getParameter("pwd");        String sex = req.getParameter("sex");        String[] interests =             req.getParameterValues("interest");        //采用方案一解决乱码问题        //byte[] bs = name.getBytes("iso8859-1");        //name = new String(bs,"utf-8");        //2.处理业务        System.out.println(name);        System.out.println(pwd);        System.out.println(sex);        if(interests != null) {            for(String interest : interests) {                System.out.println(interest);            }        }        //3.发送响应        res.setContentType(            "text/html;charset=utf-8");        PrintWriter w = res.getWriter();        w.println("<p>ok,"+name+"</p>");        w.close();    }}

web.xml

<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">  <display-name>servlet2</display-name>  <welcome-file-list>    <welcome-file>index.html</welcome-file>    <welcome-file>index.htm</welcome-file>    <welcome-file>index.jsp</welcome-file>    <welcome-file>default.html</welcome-file>    <welcome-file>default.htm</welcome-file>    <welcome-file>default.jsp</welcome-file>  </welcome-file-list>  <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>

三.请求方式

1.什么是请求方式?

  • 就是浏览器向服务器发送请求时传递数据的方式

2.常用请求方式

  • GET
  • POST

3.GET和POST的区别(面试题)

1)GET

  • 采用路径传参
  • 参数在传递过程中可见,隐私性差
  • 路径大小有限制,所有传递的参数大小受限
    所有的请求默认都是GET请求

2)POST

  • 采用实体内容传参
  • 参数在传递过程中不可见,隐私性好
  • 实体内容专门用来传参,大小不受限制
    在表单上加method=”post”

3)建议

  • 参数需要保密时用POST
  • 参数较多时用POST

四.Servlet运行原理

这里写图片描述

五.乱码解决方案

这里写图片描述

六.查询员工案例

这里写图片描述

这里写图片描述

entity\Emp.java

package entity;import java.io.Serializable;public class Emp implements Serializable {    private Integer empno;    private String ename;    private String job;    private Double sal;    public Integer getEmpno() {        return empno;    }    public void setEmpno(Integer empno) {        this.empno = empno;    }    public String getEname() {        return ename;    }    public void setEname(String ename) {        this.ename = ename;    }    public String getJob() {        return job;    }    public void setJob(String job) {        this.job = job;    }    public Double getSal() {        return sal;    }    public void setSal(Double sal) {        this.sal = sal;    }}

dao\EmpDao.java

package dao;import java.io.Serializable;import java.util.ArrayList;import java.util.List;import entity.Emp;public class EmpDao implements Serializable {    public List<Emp> findAll() {        //模拟查询所有的员工        List<Emp> list = new ArrayList<Emp>();        Emp e1 = new Emp();        e1.setEmpno(1);        e1.setEname("唐僧");        e1.setJob("领导");        e1.setSal(9000.0);        list.add(e1);        Emp e2 = new Emp();        e2.setEmpno(2);        e2.setEname("悟空");        e2.setJob("职员");        e2.setSal(5000.0);        list.add(e2);        Emp e3 = new Emp();        e3.setEmpno(3);        e3.setEname("八戒");        e3.setJob("职员");        e3.setSal(6000.0);        list.add(e3);        return list;    }}

web\FindEmpServlet.java

package web;import java.io.IOException;import java.io.PrintWriter;import java.util.List;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import dao.EmpDao;import entity.Emp;public class FindEmpServlet extends HttpServlet {    @Override    protected void service(        HttpServletRequest req,         HttpServletResponse res) throws ServletException, IOException {        //1.接收参数        //2.处理业务        EmpDao dao = new EmpDao();        List<Emp> list = dao.findAll();        //3.发送响应        res.setContentType(            "text/html;charset=utf-8");        PrintWriter w = res.getWriter();        w.println("<table border='1' cellspacing='0' width='30%'>");        w.println(" <tr>");        w.println("     <td>编号</td>");        w.println("     <td>姓名</td>");        w.println("     <td>职位</td>");        w.println("     <td>薪资</td>");        w.println(" </tr>");        if(list != null) {            for(Emp e : list) {                w.println("<tr>");                w.println(" <td>"+e.getEmpno()+"</td>");                w.println(" <td>"+e.getEname()+"</td>");                w.println(" <td>"+e.getJob()+"</td>");                w.println(" <td>"+e.getSal()+"</td>");                w.println("</tr>");            }        }        w.println("</table>");        w.close();    }   }

webapp\WEB-INF\web.xml

<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">  <display-name>EmpManager</display-name>  <welcome-file-list>    <welcome-file>index.html</welcome-file>    <welcome-file>index.htm</welcome-file>    <welcome-file>index.jsp</welcome-file>    <welcome-file>default.html</welcome-file>    <welcome-file>default.htm</welcome-file>    <welcome-file>default.jsp</welcome-file>  </welcome-file-list>  <servlet>    <servlet-name>findEmp</servlet-name>    <servlet-class>web.FindEmpServlet</servlet-class>  </servlet>  <servlet-mapping>    <servlet-name>findEmp</servlet-name>    <url-pattern>/findEmp</url-pattern>  </servlet-mapping></web-app>
原创粉丝点击