javaweb

javaweb

狂神超厉害!!!
狂神说Java

1、 Serlvet

1.1、 servlet 简介

  • servlet 就是sun公司开发动态web的一门技术
  • sun在这些API中提供了一个接口叫做: Servlet
  • 开发一个servlet程序 只需要:
    • 编写一个类 实现接口
    • 把开发好的java类 部署到web服务器

把实现servlet接口的java程序 叫做 servlet

1.2、 HelloServlet

servlet接口在sun公司有两个默认的实现类

  1. 构建一个maven,删掉里边的东西 src目录 在这里面 建立moudle 空的工程就是maven 的主工程

  2. 关于Maven 父子工程的理解:

    父项目:

     <modules>
            <module>servlet-01</module>
        </modules>
    

子项目中

<parent>
<!-- G
     A
     V
-->
</parent>

父项目中的java 子项目可以直接使用

3.maven 环境优化

  • 更新web.xml 设置
  • 将maven的结构搭建完整

4.编写一个Servlet程序

  1. 编写一个普通类

  2. 实现Servlet接口,这里直接HttpServlet

    public class HelloServlet extends HttpServlet {
         
    
        // Get() Post()只是请求实现的不同方式, 可以相互调用  业务逻辑一致
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
         
            // 响应流
            PrintWriter writer = response.getWriter();
            writer.println("Hello,Servlet");
        }
    
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
         
            doGet(request,response);
        }
    }
    
    

5.编写servlet的映射

​ 为什么需要 映射: 我们写的是java程序,但是想要通过浏览器访问,而浏览器访问要连接到web服务器,所以我们需要在服务器中注册servlet,而且需要给浏览器一个能够访问的路径

  
<!--  注册servlet-->
<servlet>
  <servlet-name>hello</servlet-name>
  <servlet-class>servlet.HelloServlet</servlet-class>
</servlet>
<!--  servlet的请求路径-->
  <servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/hello</url-pattern>
  </servlet-mapping>

6.配置tomcat

7.启动测试

1.3、 Servlet原理

1、 Servlet是由web服务器调用,web服务器在收到浏览器的请求之后,会:
在这里插入图片描述

1.4、 Mapping

  1. 一个servlet 可以指定一个路径

    <servlet-mapping>
      <servlet-name>hello</servlet-name>
      <url-pattern>/hello</url-pattern>
    </servlet-mapping>
    
  2. 一个servlet 可以指定多个路径

      <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello1</url-pattern>
      </servlet-mapping>  <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello2</url-pattern>
      </servlet-mapping>  <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello3</url-pattern>
      </servlet-mapping>  <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello4</url-pattern>
      </servlet-mapping>  <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello5</url-pattern>
      </servlet-mapping>
    
  3. 一个servlet 可以指定通用路径

    默认路径 会干掉index.jsp(默认的主页)

      <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/*</url-pattern>
      </servlet-mapping>
    

    应用:自定义设置出错界面

    public class ErrorServlet extends HttpServlet {
         
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
         
            // 一些初始的设置
            resp.setCharacterEncoding("utf-8");
            resp.setContentType("Text/html");
            // 输出流
            PrintWriter writer = resp.getWriter();
            writer.println("<h1>404</h1>");
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
         
            doGet(req, resp);
        }
    
    }
    
    <servlet>
        <servlet-name>error</servlet-name>
        <servlet-class>servlet.ErrorServlet</servlet-class>
      </servlet>
      <servlet-mapping>
        <servlet-name>error</servlet-name>
        <url-pattern>/*</url-pattern>
      </servlet-mapping>
    
  4. 一个servlet 可以指定一些前缀或者后缀等等……

    注:通配符前不可有当前项目的路径:

    /*.do

      <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>*.do</url-pattern>
      </servlet-mapping>
    

    优先级问题: 固有的映射路径优先级最高 所以 映射的路径为 默认路径时 并不会覆盖其他固有的映射路径

1.5、 ServletContext

web容器在启动的时候,它会为每一个we程序创建一个对应的Servlet对象,它代表了当前的web应用

在这里插入图片描述

1、 数据共享
// 获得数据
public class HelloServlet extends HttpServlet {
   
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
   
       // 获取ServletContext对象 以存储数据
        ServletContext context = this.getServletContext();
        //使用setAttribute(String,Object)方法 以键值对形式存储
        context.setAttribute("userName",new String("秦疆"));
    }
}

// 拿到数据

public class GetServlet extends HttpServlet {
   
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
   
        // 首先拿到ServletContext对象 以拿数据
        ServletContext context = this.getServletContext();
        
        //设置 编码格式 防止 乱码
        resp.setContentType("text/html");
        resp.setCharacterEncoding("utf-8");
        
        // 拿到数据 并且 输出到浏览器中
        resp.getWriter().println((String) context.getAttribute("userName"));
    }
}

<!-- 配置文件 -->
<servlet>
  <servlet-name>hello</servlet-name>
  <servlet-class>servlet.HelloServlet</servlet-class>
</servlet>
  <servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/hello</url-pattern>
  </servlet-mapping>


  <servlet>
    <servlet-name>get</servlet-name>
    <servlet-class>servlet.GetServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>get</servlet-name>
    <url-pattern>/get</url-pattern>
  </servlet-mapping>

访问时,先访问存放数据的地址 再访问拿数据的地址 才会有数据

2、获取初始化参数

在web.xml中设置初始化参数

<context-param>
  <param-name>url</param-name>
  <param-value>root</param-value>
</context-param>
public class ServletDemo03 extends HttpServlet {
   
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
   
        ServletContext context = this.getServletContext();

        String url = context.getInitParameter("url");
        resp.getWriter().print(url);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
   
        doGet(req, resp);
    }
}
  <servlet>
    <servlet-name>sd3</servlet-name>
    <servlet-class>servlet.ServletDemo03</servlet-class>  
  </servlet>
  <servlet-mapping>
    <servlet-name>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值