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
<servlet>
    <servlet-name>ServletDemo1</servlet-name>
    <servlet-class>com.servlet.ServletDemo1</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>ServletDemo1</servlet-name>
    <url-pattern>/demo1</url-pattern>
</servlet-mapping>

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

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

<load-on-startup>2</<load-on-startup>
是否应该在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用<a href="" > <frame src="" >
偷懒在doGet中写代码,在doPost中调用doGet;
5.servlet的映射细节
<url-pattern>必须保证唯一,用/作为开头
支持通配符映射:
/*
*拓展名   *.do
绝对匹配>  /开头匹配 > 扩展名方式匹配
在映射servlet的时间<servlet-name>元素的文本内容不能是default,default是专门处理静态资源
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
</servlet>
6.servlet的线程安全
单实例:每次访问多线程
解决线程安全问题的最佳方法是写局部变量
7.Servlet获取配置信息
7.1servletConfig:getInitParamters()

   <servlet>
       <servlet-name>ServletDemo2</servlet-name>
       <servlet-class>com.servlet.ServletDemo2</servlet-class>
       <init-param>
           <param-name>encoding</param-name>
           <param-value>GBK</param-value>
       </init-param>
   </servlet>
   
   
         @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获取全局配置信息
    <context-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </context-param>
    
     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
    这个事情我办不了
    还是要找我办
    事情办完了
 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值