JAVAEE之Servlect

 一、实现Servlect程序

1、编写一个类去实现 Servlet 接口

2、实现 service 方法,处理请求,并响应数据

//在服务器开始的时候执行,用来初始化数据
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("init() 我只会执行一次");
    }
//在服务器停止的时候执行,常用于获取服务器停止时未保存的数据
    @Override
    public void destroy() {
    }

    //处理请求和访问
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        
    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

3、配置 servlet 程序的访问地址两种方式:

(1)、在web.xml 当中配置

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
//设置先运行的程序
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
    </welcome-file-list>

    <servlet>
//给程序起的别名--HelloServlet
        <servlet-name>HelloServlet</servlet-name>
//程序的全类名
        <servlet-class>com.softeem.servlet.HelloServlet</servlet-class>

//设置参数
        <init-param>
            <param-name>username</param-name>
            <param-value>root</param-value>
        </init-param>
        <init-param>
            <param-name>url</param-name>
            <param-value>jdbc:mysql://localhost:3306/test</param-value>
        </init-param>

    </servlet>
    <servlet-mapping>
//告诉服务器我当前配置的地址是给哪一个程序使用的
        <servlet-name>HelloServlet</servlet-name>
//表示访问地址
        <url-pattern>/HelloServlet</url-pattern>
    </servlet-mapping>
</web-app>

(2)、使用注解配置

//普通注解配置
@WebServlet(name = "HelloServlet2",value = "/HelloServlet2")
//

//带参数的注解配置
@WebServlet(name = "HelloServlet5", value = "/HelloServlet5", initParams = {
        @WebInitParam(name = "username", value = "root"),
        @WebInitParam(name = "url", value = "jdbc:mysql://localhost:3306/test"),
        @WebInitParam(name = "password", value = "123456")
})

二、开发当中使用Servlect

一般在实际项目开发中,都是使用继承 HttpServlet 类的方式去实现 Servlet 程序。与前面不一样的是,继承HttpServlect类一般是实现doGet和doPost方法,根据你的需要在这两个方法当中实现你的逻辑

三、Servlet 程序的配置信息类

1、ServletConfig类

作用:

a、可以获取 Servlet 程序的别名 servlet-name 的值

b、获取初始化参数 init-param

c、获取 ServletContext 对象

@Override
    public void init(ServletConfig config) throws ServletException {
        System.out.println("+++++++init开始+++++");
        System.out.println("HelloServlet 程序的别名是:" + config.getServletName());
        System.out.println("初始化参数 username 的值是;" + config.getInitParameter("username"));
        System.out.println("初始化参数 url 的值是;" + config.getInitParameter("url"));
        System.out.println("初始化参数 password 的值是;" + config.getInitParameter("password"));
        System.out.println(config.getServletContext());
        System.out.println("++++++init结束++++++");
    }

2、ServletContext类

(1)、什么是ServlectContext类:

a、ServletContext 是一个接口,它表示 Servlet 上下文对象

b、一个 web 工程,只有一个 ServletContext 对象实例。

c、ServletContext 对象是一个域对象。

d、ServletContext 是在 web 工程部署启动的时候创建。在 web 工程停止的时候销毁。

什么是域对象?

域对象,是可以像 Map 一样存取数据的对象,叫域对象。这里的域指的是存取数据的操作范围,整个 web 工程。

(2)、ServletContext类的作用

1、获取 web.xml 中配置的上下文参数 context-param

2、获取当前的工程路径,格式: /工程路径

3、获取工程部署后在服务器硬盘上的绝对路径

4、像 Map 一样存取数据

@Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        *//*ServletConfig config=super.getServletConfig();
        ServletContext context = config.getServletContext();
        *//*
        *//*<==>*//*
        //下面这个是对上面的封装写成的一个函数 内部return this.getServletConfig().getServletContext();
        ServletContext context = super.getServletContext();

        String email = context.getInitParameter("email");
        System.out.println("email = " + email);
        String phone = context.getInitParameter("phone");
        System.out.println("phone = " + phone);


    }


    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext context = super.getServletContext();

        String contextPath = context.getContextPath();
        System.out.println("当前路径contextPath:" + contextPath);
        //getRealPath与getContextPath的区别
        System.out.println("当前路径css:"+context.getRealPath("/css"));
    }

    //ServletContext 像 Map 一样存取数据
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext context = getServletContext();
        System.out.println(context);
        System.out.println("保存之前: Context1 获取 key1 的值是:"+ context.getAttribute("key1"));
        context.setAttribute("key1", "sjj");
        System.out.println("Context1 中获取域数据 key1 的值是:"+ context.getAttribute("key1"));
    }

四、心得

Servlect程序是在Tomcat服务器上面运行的代码,与我之前直接在idea上面运行,是不一样的天地,这样运行的代码可以使用网址进行访问,让我对继续学习Java有了更大的兴趣。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值