javaweb知识点总结(servlet)

1.什么是servelt
servlet是运行在web服务器上的小型java程序,就是服务器的小型应用程序,servlet通过http接收和响应来自web客户端的请求
1.1首先写一个servlet
public class ServletDemo1 implements Servlet {
    //接收用户请求,并且做出响应
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {

        servletResponse.getWriter().write("hello servletdemo");
    }
}


web.xml

    ServletDemo1
    com.servlet.ServletDemo1


    ServletDemo1
    /demo1

访问路径为:localhost:8080/项目名/demo1

2.执行过程
3.servlet生命周期
出生:init   启动服务器或者客户机首次访问servlet的时候装入servlet不管有多少客户机访问都只会执行一次
服务:service   响应客户请求,当一个客户请求一个httpservlet对象,这个对象的service方法就要调用 传递一个servletrequest和serveltresponse对象为参数
死亡:destory  当服务端停止并且卸载servlet应用的时候,也只会执行一次

2
是否应该在web应用启动时候就加载这个servlet,实例化并且调用init方法
必须是一个整数,若是负数和不设置---servlet请求时候再加载
                若是正数和0-----应用启动就开始加载并且初始化,值越小优先级越高 越优先加载  相同的时候容器会进行自主选
举个例子把:servlet1优先级为1  servlet2优先级2
构造函数1 init1 构造函数2 init2  销毁2  销毁 

4.servelt的三种创造方式
4.1implements servlet接口
4.2extends GenericServlet
4.3extends HttpServlet

servlet  >GenericServlet>HttpServlet

doGet()和doPost()方法的区别
通过get方法提交的数据有大小限制1024 ,post则没有,
通过get传输数据key -value会跟在url后面来达到传送目的,而post传输数据没有明文显示
post一般用于表单提交 get用
偷懒在doGet中写代码,在doPost中调用doGet;
5.servlet的映射细节
必须保证唯一,用/作为开头
支持通配符映射:
/*
*拓展名   *.do
绝对匹配>  /开头匹配 > 扩展名方式匹配
在映射servlet的时间元素的文本内容不能是default,default是专门处理静态资源

default
org.apache.catalina.servlets.DefaultServlet

6.servlet的线程安全
单实例:每次访问多线程
解决线程安全问题的最佳方法是写局部变量
7.Servlet获取配置信息
7.1servletConfig:getInitParamters()

   
       ServletDemo2
       com.servlet.ServletDemo2
       
           encoding
           GBK
       

   

   
   
         @Override
        public void init(ServletConfig config) throws ServletException {
                this.config=config;
        }
   
   
   
       String value=config.getInitParameter("encoding");//此对象由服务器创建
       String value=this.getServletConfig().getInitParameter("encoding");
       String value=super.getInitParameter("encoding");//使用继承父类的方法得到servletConfig对象
       
7.2servletContext
servletContext代表着一整个实例,一个应用只有一个ServletContext对象,单个实例,多个servlet共享数据
setAttibute(name,value)
getAttibute(name,value)
moveAttibute(name,value)

7.2.1获取全局配置信息
   
        encoding
        UTF-8
   

    
     String value=this.getServletContext().getInitParameter("encoding");
     System.out.println(value);
     
7.2.2获取资源路径
getRealPath()
读取properties文件
      String path=this.getServletContext().getRealPath("/WEB-INF/classes/com/servlet/a.properties");
      Properties properties=new Properties();
      properties.load(new FileInputStream(path));
      System.out.println(properties.get("key"));
      
      
      
7.2.3转发
getRequestDispatcher()
转发到另一个servlet执行了里面的方法,然后还要回到原先请求转发的servlet中,所以url的地址不发生变化
servlet2:
@Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        System.out.println("这个事情我办不了");
        ServletContext servletContext=this.getServletContext();
        servletContext.getRequestDispatcher("/demo3").forward(req,resp);
        System.out.println("事情办完了");
    }
servlet3:
 @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("还是要找我办");

    }
    
    结果:http://localhost:8080/servletdemo/demo2
    这个事情我办不了
    还是要找我办
    事情办完了
 

你可能感兴趣的:(javaweb知识点总结(servlet))