Servlet流程

1.简介:

问题:浏览器通过http协议请求web服务器,去访问web服务器上面的资源,然而资源有静态资源和动态资源,静态资源可以直接对web服务器进行访问,那么动态资源(需要数据交互)该如何访问呢

Servlet是服务器端的java程序,能够接受用户请求,处理用户请求,并对用户请求做出响应的动态网页技术

Servlet的作用:

  • 接受客户端的HTTP请求(浏览器)
  • 根据用户请求进行数据处理
  • 动态生成网页(网页中数据交互)
  • 将生成的包含动态数据的网页响应给客户端

2.创建JavaWeb工程

idea创建 注意:需要导入tomcat服务器

3.创建Servlet

Servlet是一个java程序,是一个能够接受http请求的java类,因此需要HTTP协议

在JavaEE库中有一个类HttpServlet实现了HTTP协议,我们创建的类只要继承这个HttpServlet类,就实现了HTTP协议,就能接受HTTP请求

步骤:

(1):创建一个类继承 javax.servlet.http.HttpServlet

(2):继承HttpServlet的类可以接受请求,这种可以接受请求的类名字叫做 …Servlet

(3):在创建类的过程中,重写doPost/doGet方法来获取请求

4.配置Servlet

<!--  配置BookListServlet类的访问路径-->

<!-- 配置Servlet的根路径-->

    <servlet>

        <!--理论上可以取任何名字,但是名字不能重复,实际开发中最好做到与类名相同-->

        <servlet-name>BookListServlet</servlet-name>

        <!-- Servlet类路径-->

        <servlet-class>com.edu.test1.BookListServlet</servlet-class>

    </servlet>

    <!-- servlet-mapping 配置url -->

    <servlet-mapping>

        <!--servlet-mapping标签中的servlet-name必须和servlet标签中的servlet-name一样-->

        <servlet-name>BookListServlet</servlet-name>

        <!--url-pattern标签配置访问路径 其命名格式必须以/开头-->

        <url-pattern>/book-list</url-pattern>

    </servlet-mapping>

 

或者

 

注解配置Servlet

在创建的Servlet类中写入@WebServlet("/book-query")

 

5.浏览器访问测试

通过浏览器发送HTTP请求,访问Tomcat中Web项目的Servlet类

 

 

 

6.GET请求和POST请求

Servlet类中的doGet和daPost是用来处理不同请求方式的HTTP请求,在HTTP协议中,HTTP协议请求有多种请求方式(get/post/delete/put/option…),不同请求方式访问的数据是不同的

  • Servlet中的doGet方法是用来处理客户端的get请求
  • Servlet中的doPost方法是用来处理客户端的post请求

6.1Get请求

  • 使用Get请求服务器,传递的参数会拼接到URL后面,以?分割url和参数,多个数据以&符号连接

 

 

  • get 是明文提交,提交数据量小,安全性差
  • get 请求效率较高,浏览器默认的是get请求的
  • get方式提交数据的场景
    • 浏览器地址栏
    • 网页的超链接
    • form表单 method="get请求"

 

6.2Post请求

  • 使用POST请求服务器,参数是通过请求正文进行传递的(request body)
  • POST请求是密文提交,数据量大,比较安全
  • POST请求的效率较低
  • Post方式提交数据的场景
    • form表单 method="post请求"

 

 

7.Servlet响应动态网页

在浏览器中输入http://localhost:8080/demo01/book-query?id=1001可以查询到图书编号为1001书籍的数据

 

@Override

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        System.out.println("QueryListServlet-------doGet");

        //动态获取HTML页面

        //1:获得浏览器请求时传递的ID(bookId)

        String bid = request.getParameter("bookId");

 

        //2:根据bid查询数据库表中的数据

        Map<String,Book> bookMap=new HashMap<>();

        bookMap.put("1001",new Book("1001","Java","张三",58,null));

        bookMap.put("1002",new Book("1002","C","李四",68,null));

        bookMap.put("1003",new Book("1003","Python","王二",48,null));

        Book book = bookMap.get(bid);

 

        //3:将查询到的数据生成网页,响应给浏览器

        // 通过IO流向浏览器响应数据,

        response.setCharacterEncoding("utf-8");

        response.setContentType("text.html");

        PrintWriter out=response.getWriter();

        out.println("<!DOCTYPE html>");

        out.println("<html>");

        out.println("<head><meta charset='utf-8'><title>Servlet响应的网页</title></head>");

        out.println("<body>");

        out.println("<table>");

        out.println("<tr><th>图书编号</th><th>图书名称</th><th>作者姓名</th><th>图书价格</th><th>图书照片</th></tr>");

        out.println("<tr>");

        out.println("<td>"+book.getBookId()+"</td>");

        out.println("<td>"+book.getBookName()+"</td>");

        out.println("<td>"+book.getBookAuthor()+"</td>");

        out.println("<td>"+book.getBookPrice()+"</td>");

        out.println("<td>"+book.getBookImgPath()+"</td>");

        out.println("</tr>");

        out.println("</table>");

        out.println("</body>");

        out.println("<html>");

        out.flush();

        out.close();

    }

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值