JavaWeb 入门:Hello Servlet
程序员文章站
2022-06-24 11:30:07
目录servlet 概述hello servletservlet 概述 serlvet sun公司 开发动态web 的一门技术。 servlet(server applet)是java s...
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、导入依赖
dependencies> <!-- https://mvnrepository.com/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接口
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,还需要给它一个浏览器能够访问的路径。
<?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"> <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 可以指定一个映射路径
<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 可以指定多个映射路径
<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 可以指定通用映射路径
<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、默认请求路径
<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、可以指定一些前缀或者后缀
<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 类
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、配置映射路径
<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 访问其他的具体的路径仍然不变
总结
本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注的更多内容!
上一篇: 微信web开发问题记录
下一篇: Codevs 3981 动态最大子段和
推荐阅读
-
javaWeb(Servlet和HTTP请求总结)
-
Python编程入门之Hello World的三种实现方式
-
06-码蚁JavaWeb之Servlet生命周期与基本配置
-
React入门教程之Hello World以及环境搭建详解
-
JavaWeb入门——在Linux环境下安装Tomcat服务器
-
走进JavaWeb技术世界2:JSP与Servlet的曾经与现在
-
JavaWeb学习——Servlet相关的接口和类
-
javaWeb核心技术第七篇之HTTP、Tomcat、Servlet、Request和Response
-
SpringCloud入门hello world,SpringBoot2.1.3,附采坑经历
-
AngularJS入门教程之Hello World!