Javaweb---Servlet1(idea创建Servlet工程)

1.什么是Servlet
1、Servlet是JavaEE规范之一。规范就是接口
2、Servlet就JavaWeb三大组件之一。三大组件分别是:Servlet程序、Filter过滤器、Listener监听器。
3、Servlet是运行在服务器上的一个java小程序,它可以接收客户端发送过来的请求,并响应数据给客户端。
2.手动实现Servlet程序
1.创建一个javaweb工程
在这里插入图片描述
选择Java enterprise —>Web application —> next
在这里插入图片描述
Model name进行修改:finish
在这里插入图片描述
此时有的版本没有直接生成web下的子目录以及.xml文件,此时需要自己添加
file—project structure —>facets —>点击右边刚刚创建的工程—>点击path右边的加号添加
在这里插入图片描述
在这里插入图片描述
此时注意新建的WEB-INF不在web下,要自己修改
在这里插入图片描述
在这里插入图片描述
点击OK
在这里插入图片描述
此时已经添加成功,一个初始的Servlet就创建成功了!!!
2.在src新建的包中创建一个类去实现Servelt

public class HelloServelt implements Servlet {
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("Hello Servlet!!!");
    }

3.到web.xml中配置servelt程序访问的地址

<?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_3_1.xsd"
         version="3.1">
    <!--servlet标签给Tomcat配置Servlet程序-->
    <servlet>
        <!--servlet-name标签Servlet程序起一个别名(一般是类名)-->
        <servlet-name>HelloServlet</servlet-name>
        <!--servlet-class是Servlet程序的全类名-->
        <servlet-class>HelloServelt</servlet-class>
    </servlet>
    <!--servlet-mapping标签给servlet程序配置访问地址-->
    <servlet-mapping>
            <!--servlet-name标签的作用是告诉服务器,我当前配置的地址给哪个Servlet程序使用-->
        <servlet-name>HelloServlet</servlet-name>
        <!--url-pattern标签配置访问地址<br/>/斜杠在服务器解析的时候,表示地址为:http://ip:port/工程路径<br/>/hello表示地址为:http://ip:port/工程路径/hello<br/>-->
        <url-pattern>/test1</url-pattern></servlet-mapping>
</web-app>

4.修改Tomcat名字:一般修改为自己工程的名字这样便于识别
在这里插入图片描述
把Tomcat改为ServletTest—>点击run—>出现.jsp文件中的内容—>在浏览器路径后面加<url-pattern>/test1</url-pattern></servlet-mapping>中的/test1—>浏览器显示类中定义的输出
在这里插入图片描述
在这里插入图片描述
3.url地址到Servlet程序的访问
在这里插入图片描述
localhost定位主机
8080:通过端口号定位Tomcat
ServletTest确定访问工程
/test1 确定资源路径:通过资源路径—>别名—>访问类
4.Servlet的生命周期
1、执行Servlet构造器方法
2、执行init初始化方法第一、二步,是在第一次访问,的时候创建Servlet程序会调用。
3、执行service方法第三步,每次访问都会调用。
4、执行destroy销毁方法第四步,在web工程停止的时候调用。
5.get和post请求的分发处理
5.1 implements Servlet接口实现分发处理

@Override
/***service方法是专门用来处理请求和响应的
     *
     * *@param servletRequest
     * *@param servletResponse
     * *@throws ServletException
     * *@throws IOException*/
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
    System.out.println("3.Hello Servlet!!!");//每次访问都会执行
    //类型转换:因为他又getMethod()方法
    HttpServletRequest httpservletRequest1 = (HttpServletRequest)servletRequest;
    //获取请求的方式
    String method = httpservletRequest1.getMethod();
    if ("GET".equals(method)){
        Doget();
    }
    if ("Post".equals(method)){
        DoPost();
    }
}
public void Doget(){
    System.out.println("GEt请求");
    System.out.println("GEt请求");
}
public void DoPost(){
    System.out.println("Post请求");
    System.out.println("Post请求");
}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>  //访问http://localhost:8080/a.htlm点击提交method="post"/"get"
    <form action="http://localhost:8080/test1" method="post">
    <input type="hidden" name="action" value="login" />
    <input type="hidden" name="username" value="root" />
    <input type="submit">
</form>
</body>
</html>

5.2通过继承 HttpServlet 实现 Servlet 程序 程序
一般在实际项目开发中,都是使用继承 HttpServlet 类的方式去实现 Servlet 程序。
1、编写一个类去继承 HttpServlet 类
2、根据业务需要重写 doGet 或 doPost 方法
3、到 web.xml 中的配置 Servlet 程序的访问地址

步骤一:

public class HelloServlet2 extends HttpServlet{//需要在xml中配置
    /***doGet()在get请求的时候调用
     * *@paramreq
     * *@paramresp
     * *@throwsServletException
     * *@throwsIOException*/
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("HelloServlet2中Doget");//网页提交get请求时会执行里面的代码
    }

    /***doPost()在post请求的时候调用
     * *@paramreq
     * *@paramresp
     * *@throwsServletException
     * *@throwsIOException
     * */
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("HelloServlet2中Dopost");//在做post时执行里面的代码
    }
}

xml中配置HelloServlet2

<servlet>
        <servlet-name>HelloServlet2</servlet-name>
        <servlet-class>servlettest.HelloServlet2</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>HelloServlet2</servlet-name>
        <!--到时候的访问路径/test2-->
        <url-pattern>/test2</url-pattern>
    </servlet-mapping>

6.idea创建Servlet程序
在这里插入图片描述
在这里插入图片描述
7.Servlet 类的继承体系
自定义的Servlet程序 —> httpservlet类 —>gengricservlet类—>servlet接口

8.ServletConfig 类
ServletConfig 类从类名上来看,就知道是 Servlet 程序的配置信息类。
Servlet 程序和 ServletConfig 对象都是由 Tomcat 负责创建,我们负责使用。
Servlet 程序默认是第一次访问的时候创建,ServletConfig 是****每个 Servlet 程序创建时,就创建一个对应的 ServletConfig 对象**。(就是每个servlet程序都有一个,因为每个类在xml中的配置都是不同的)
// ServletConfig类的三大作用
// 1、可以获取Servlet程序的别名servlet-name的值
// 2、获取初始化参数init-param
// 3、获取ServletContext对象

@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("2 init 初始化方法");
// 1 、可以获取 Servlet 程序的别名 servlet-name 的值
System.out.println("HelloServlet 程序的别名是:" + servletConfig.getServletName());
// 2 、获取初始化参数 init-param
System.out.println(" 初始化参数 username 的值是;" + servletConfig.getInitParameter("username"));
System.out.println(" 初始化参数 url 的值是;" + servletConfig.getInitParameter("url"));
// 3 、获取 ServletContext 对象
System.out.println(servletConfig.getServletContext());
}
xml中的配置
   <servlet>
        <servlet-name>HelloServlet5</servlet-name>
        <servlet-class>servlettest.HelloServlet5</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>HelloServlet5</servlet-name>
        <!--到时候的访问路径/test2-->
        <url-pattern>/test5</url-pattern>
    </servlet-mapping>

9.ServletContext 类(他查看的是整个工程的一些属性与说明,所以一个过程只有一个)
1、ServletContext 是一个接口,它表示 Servlet 上下文对象
2、一个 web 工程,只有一个 ServletContext 对象实例。
3、ServletContext 对象是一个域对象。
4、ServletContext 是在 web 工程部署启动的时候创建。在 web 工程停止的时候销毁

域对象 setAttribute() getAttribute() removeAttribute();

ServletContext 类的四个作用 类的四个作用
1、获取 web.xml 中配置的上下文参数 context-param
2、获取当前的工程路径,格式: /工程路径
3、获取工程部署后在服务器硬盘上的绝对路径
4、像 Map 一样存取数据

public class HelloServlet5 extends HttpServlet{
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1、获取web.xml中配置的上下文参数context-param
        ServletContext context = getServletConfig().getServletContext();

        String username = context.getInitParameter("username");
        System.out.println("context-param参数username的值是:" + username);
        System.out.println("context-param参数password的值是:" + context.getInitParameter("password"));
//        2、获取当前的工程路径,格式: /工程路径
        System.out.println( "当前工程路径:" + context.getContextPath() );
//        3、获取工程部署后在服务器硬盘上的绝对路径
        /**
         *  / 斜杠被服务器解析地址为:http://ip:port/工程名/  映射到IDEA代码的web目录<br/>
         */
        System.out.println("工程部署的路径是:" + context.getRealPath("/"));
        System.out.println("工程下css目录的绝对路径是:" + context.getRealPath("/src"));
        System.out.println("工程下imgs目录1.jpg的绝对路径是:" + context.getRealPath("/web/index.jsp"));
    }
}
public class HelloServlet6 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取ServletContext对象
        ServletContext context=getServletContext();
        System.out.println(context);
        System.out.println("保存之前:Context1获取key1的值是:"+context.getAttribute("key1"));
        context.setAttribute("key1","value1");//设置key1的值
        System.out.println("Context1中获取域数据key1的值是:"+context.getAttribute("key1"));}//得到key1的值value1
    }
//在另一个类中访问刚刚设置的key1:说明是整个工程适用
public class HelloServlet7 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext context=getServletContext();
        System.out.println(context);
        System.out.println("Context2中获取域数据key1的值是:"+context.getAttribute("key1"));
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值