当前位置:网站首页 > Java基础 > 正文

java web 基础入门



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

工程结构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KhBPeiJV-1620396757425)(C:UsersASUSDesktopjavaweb_studyjavawebweb服务器讲解.assetsimage-20210507221216543.png)]

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> java web 基础入门 <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> 

测试:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dO79ndZl-1620396757428)(C:UsersASUSDesktopjavaweb_studyjavawebweb服务器讲解.assetsimage-20210507221205112.png)]

Servlet的运行过程

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

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

img

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 访问其他的具体的路径仍然不变

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PUm7RU9R-1620400096023)(C:UsersASUSDesktopJavaWeb_studyJavaWeb5Servlet概述.assetsimage-20210507230742029.png)]

总结

版权声明


相关文章:

  • android面试java基础知识2025-04-14 20:50:05
  • java基础真题2025-04-14 20:50:05
  • java基础比赛2025-04-14 20:50:05
  • java基础入门题目2025-04-14 20:50:05
  • java基础类型数据2025-04-14 20:50:05
  • java程序设计基础第五版2025-04-14 20:50:05
  • cpp基础学java2025-04-14 20:50:05
  • java基础程序代码2025-04-14 20:50:05
  • java jdbc基础2025-04-14 20:50:05
  • 学java有哪些基础2025-04-14 20:50:05