手记

servlet基础(一)

  1. 什么是servlet?

  2. 如何写一个servlet

  3. servlet是如何运行的

  4. 什么是HTTP协议?数据结构、请求方式以及各自的特点



1.什么是servlet

servlet是sun公司用于扩展web服务器功能的组件规范。

补充:

    组件:符合规范,实现部分功能,并且需要部署到相应的容器中才能运行的软件模块。

    容器:符合规范,为组件提供运行环境的程序。正因为web服务器只能处理静态资源,不能处理动态资源,所以需要扩展其功能。

    2. 如何写一个servlet

备注:以下所有方式以maven项目为基准

Setp1:写一个Java类,继承Httpservlet或实现servlet接口

Setp2:编译代码;

Setp3:建立文档结构

Setp4:配置web.xml文件;

Setp5:部署

Setp6:启动容器

http://ip:port/appname/url-pattern

注: url-pattern在web.xml中设置。

案例:

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.util.Map;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import util.DBUtils;
public class UserServlet extends HttpServlet {	
        @Override	
        protected void service(HttpServletRequest request, HttpServletResponse response) 
            throws IOException {		
            request.setCharacterEncoding("utf-8");				
            response.setContentType("text/html;charset=utf-8");		
            PrintWriter out = response.getWriter();		
            String username = request.getParameter("username");		
            String password = request.getParameter("password");		
            String email = request.getParameter("email");			
            Connection conn = null;		
            PreparedStatement stat = null;		
            try {			
                conn = DBUtils.getCon();			
                String sql = "insert into userTable values(null,?,?,?)";			
                stat = conn.prepareStatement(sql);			
                stat.setString(1, username);			
                stat.setString(2, password);			
                stat.setString(3, email);			
                stat.executeUpdate();			
                // out.print("成功");			
                out.print("<a href='list'>查看用户列表</a>");			
                // 重定向			
                response.sendRedirect("list");		
                    } catch (Exception e) {			
                    	e.printStackTrace();			
                    	out.println("失败");		
                    	} finally {			
                    	    DBUtils.close(conn, stat, null);		
                    	    }	
                    	 }   	 
                    	}

    3.servlet是如何运行的

    例如:在浏览器地址栏输入http://localhost:8080/projectName/hello

step1.浏览器依据ip和port建立连接。

step2.浏览器将相关数据放到请求数据包,然后将请求数据包发送给服务器。

step3.服务器解析请求数据包,将解析到的结果放到request对象里面,同时,创建一个response对象。

step4.服务器依据请求路径,创建Servlet对象,然后调用该对象的service方法。

step5.容器从response对象中取出处理结果,然后创建响应数据包并发送给浏览器。

step6.浏览器解析响应数据包,生成结果页面。

备注:

    开发人员只需要调用request对象的方法,就可以获得请求数据包中的数据。类似的,只需要调用response对象的方法,就可以将处理结果写到response对象里面,容器会从response对象中取出处理结果,然后创建响应数据包并发送给浏览器。

图解:

    4.什么是HTTP协议?数据结构、请求方式以及各自的特点

    HTTP协议是一种网络应用层协议,规定了浏览器与服务器之间的通信方式以及相应的数据包的格式。

数据结构:

请求数据包

请求行

请求方式

Post 和get

资源路径
协议和版本

消息头

消息头是一些键值对,使用“:”隔开。

如浏览器发送“user-agent”,告诉服务器浏览器的类型和版本

消息正文

如果请求类型为get,实体正文为空;只有当请求方式为post时,实体内容才会有数据


响应数据

状态行

协议类型和版本


状态码

200:正常,500:系统出错,

404:请求路径出错

状态描述

响应头

服务器也可以发送一些消息头给浏览器;

如,发送content-type消息头,告诉浏览器,服务器返回的数据类型(包括编码)


响应正文

程序的处理结果,浏览器会解析出来,

生成相应的页面。


请求方式:

    1)哪些情况下,浏览器会发送get请求?

a.直接在浏览器地址栏输入地址。

b.点击链接。

c.表单的默认提交方式。

 

    2)哪些情况下,浏览器会发送post请求

a.设置表单的method属性值为"post"。


特点:

    get请求的特点

a.会将请求参数显示在浏览器地址栏,不安全。

注:因为有些网络设备(比如路由器)会记录访问地址。

b.会将请求参数添加到请求资源路径的后面,只能提交少量的数据给服务器。

注:因为请求行大约只能存放2k左右的数据。


    post请求的特点

a.不会将请求参数显示在浏览器地址栏,相对安全。

b.将请求参数添加到了实体内容里面,可以提交大量的数据给服务器。

注:http协议并不会对数据进行加密。所以,对于敏感数据,需要进行加密处理(使用https协议)。


0人推荐
随时随地看视频
慕课网APP