好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

JavaWeb 入门:Hello Servlet

servlet 概述

serlvet sun公司 开发动态web 的一门技术。 servlet(server applet)是java servlet的简称,称为小服务程序或服务连接器,用java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态web内容。 广义的servlet是指任何实现了这个servlet接口的类,。servlet运行于支持java的应用服务器中。从原理上讲,servlet可以响应任何类型的请求,但绝大多数情况下servlet只用来扩展基于http协议的web服务器。 sun公司在api 中提供了一个接口 如果我们想要开发一个servlet程序 我们只需要做到两点

1、写一个普通类实现servlet 这个接口

2、把写好的servlet 放进服务器。

sun公司给出了两个默认的实现类 httpservlet 和 genericservlet

hello servlet

工程结构

1、创建一个maven 项目 添加web框架(将web.xml 换成最新的4.0 后面有完整配置文件) 配置tomcat 2、导入依赖

?

1

2

3

4

5

6

7

8

9

10

11

12

13

dependencies>

     <!-- https: //mvnrepository测试数据/artifact/javax.servlet/javax.servlet-api -->

     <dependency>

       <groupid>javax.servlet</groupid>

       <artifactid>javax.servlet-api</artifactid>

       <version> 4.0 . 1 </version>

     </dependency>

     <dependency>

       <groupid>javax.servlet</groupid>

       <artifactid>jsp-api</artifactid>

       <version> 2.0 </version>

     </dependency>

   </dependencies>

3、编写一个servlet程序 编写一个普通类实现httpservlet接口

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

import javax.servlet.servletexception;

import javax.servlet.http.httpservlet;

import javax.servlet.http.httpservletrequest;

import javax.servlet.http.httpservletresponse;

import java.io.ioexception;

import java.io.printwriter;

/**

  * @author crush

  *  idea 提示快捷键  alt + enter

  *  重写快捷键 是 ctrl + o

  */

public class helloservlet extends httpservlet {

     @override

     protected void doget(httpservletrequest req, httpservletresponse resp) throws servletexception, ioexception {

         printwriter writer = resp.getwriter();

         writer.print( "hello servlet" );

         system.out.println( "" );

     }

     @override

     protected void dopost(httpservletrequest req, httpservletresponse resp) throws servletexception, ioexception {

         doget(req, resp);

     }

}

4、编写servlet 的映射

为什么需要映射?我们是不是需要通过浏览器去访问,而浏览器需要连接web服务器,需要在web 服务器注册我们写的servlet,还需要给它一个浏览器能够访问的路径。

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

<?xml version= "1.0" encoding= "utf-8" ?>

<web-app xmlns= "http://xmlns.jcp.org/xml/ns/javaee"

          xmlns:xsi= "http://HdhCmsTestw3.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" >

     <servlet>

         <servlet-name>hello</servlet-name>

         <servlet- class >com.crush.servlet.helloservlet</servlet- class >

     </servlet>

     <servlet-mapping>

         <servlet-name>hello</servlet-name>

         <url-pattern>/hello</url-pattern>

     </servlet-mapping>

</web-app>

测试:

servlet的运行过程

servlet程序是由web服务器调用的,web服务器收到客户端的servlet访问请求后:

①web服务器首先检查是否已经装载并创建了该servlet的实例对象。如果是,则直接执行第④步,否则,执行第②步; ②装载并创建该servlet的一个实例对象; ③调用servlet实例对象的init()方法; ④创建一个用于封装http请求消息的httpservletrequest对象和一个代表http响应消息的httpservletresponse对象,然后调用servlet的service()方法并将请求和响应对象作为参数传递进去; ⑤web应用程序被停止或重新启动之前,servlet引擎将卸载servlet,并在卸载之前调用servlet的destroy()方法。

5、mapping 问题:

1、一个servlet 可以指定一个映射路径

?

1

2

3

4

5

6

7

8

<servlet>

     <servlet-name>hello</servlet-name>

     <servlet- class >com.crush.servlet.helloservlet</servlet- class >

</servlet>

<servlet-mapping>

     <servlet-name>hello</servlet-name>

     <url-pattern>/hello</url-pattern>

</servlet-mapping>

2、一个servlet 可以指定多个映射路径

?

1

2

3

4

5

6

7

8

9

10

11

12

<servlet>

     <servlet-name>hello</servlet-name>

     <servlet- class >com.crush.servlet.helloservlet</servlet- class >

</servlet>

<servlet-mapping>

     <servlet-name>hello</servlet-name>

     <url-pattern>/hello</url-pattern>

</servlet-mapping>

<servlet-mapping>

     <servlet-name>hello</servlet-name>

     <url-pattern>/hello2</url-pattern>

</servlet-mapping>

3、一个servlet 可以指定通用映射路径

?

1

2

3

4

5

6

7

8

<servlet>

     <servlet-name>hello</servlet-name>

     <servlet- class >com.crush.servlet.helloservlet</servlet- class >

</servlet>

<servlet-mapping>

     <servlet-name>hello</servlet-name>

     <url-pattern>/hello.*</url-pattern>

</servlet-mapping>

4、默认请求路径

?

1

2

3

4

5

6

7

8

<servlet>

     <servlet-name>helloservlet</servlet-name>

     <servlet- class >com.crush.servlet.helloservletdays</servlet- class >

</servlet>   

<servlet-mapping>

     <servlet-name>helloservlet</servlet-name>

     <url-pattern>/*</url-pattern>

</servlet-mapping>

5、可以指定一些前缀或者后缀

?

1

2

3

4

5

6

7

8

<servlet>

     <servlet-name>helloservlet</servlet-name>

     <servlet- class >com.crush.servlet.helloservletdays</servlet- class >

</servlet>

<servlet-mapping>

     <servlet-name>helloservlet</servlet-name>

     <url-pattern>*.crush</url-pattern>

</servlet-mapping>

6、优先级问题

指定固定的映射路径优先级最高,如果找不到就会走默认的处理请求。

模拟指定error 页面

1、写一个errorservlet 类

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

import javax.servlet.servletexception;

import javax.servlet.http.httpservlet;

import javax.servlet.http.httpservletrequest;

import javax.servlet.http.httpservletresponse;

import java.io.ioexception;

import java.io.printwriter;

/**

  * @author: crush

  * @date: 2021-05-07 23:03

  * version 1.0

  */

public class errorservlet extends httpservlet {

     @override

     protected void doget(httpservletrequest req, httpservletresponse resp) throws servletexception, ioexception {

         printwriter writer = resp.getwriter();

         writer.print( "404" );

     }

     @override

     protected void dopost(httpservletrequest req, httpservletresponse resp) throws servletexception, ioexception {

         doget(req, resp);

     }

}

2、配置映射路径

?

1

2

3

4

5

6

7

8

<servlet>

     <servlet-name>error</servlet-name>

     <servlet- class >com.crush.servlet.errorservlet</servlet- class >

</servlet>

<servlet-mapping>

     <servlet-name>error</servlet-name>

     <url-pattern>/*</url-pattern>

</servlet-mapping>

测试:访问不存在的路径 会直接到访问我们自己写的errorservlet 访问其他的具体的路径仍然不变

总结

本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注的更多内容!

原文链接:https://blog.csdn.net/weixin_45821811/article/details/116503987

查看更多关于JavaWeb 入门:Hello Servlet的详细内容...

  阅读:17次