2-Servlet详解1
用java去开发web工程,有两个非常重要的组件就是JSP
和Servlet
,虽然以后有更简单快捷的方式(ssm),但是这个也很重要,因为这个最基本的方式。
一、Servlet
- 什么是Servlet
Servlet 是 Java Web 开发的基石,与平台(操作系统)无关的服务器组件,它是运行在 Servlet 容器(Web服务器,Tomcat),负责与客服端进行通信。 - Servlet功能
- 创建并返回基于客户请求的动态HTML页面。
- 可以与数据库进行通信的。
- 如何使用 Servlet ?
Servelt 本身是一组接口,接口就是用来描述某一种功能的。如果想让你的程序具备这种功能,那么就创建一个类Class
去实现这个接口就可以了。
存在于Javax.servlet
包。实际开发只需要自定义一个类,并且实现Servlet
接口,这样这个类就具备了接受客户端请求以及做出显示的功能。
二、Servlet初次体验
在scr
中创建package
–>class
(com.southwind.servlet
–>MyServlet.class
)
package com.southwind.servlet;
import javax.servlet.*;
import java.io.IOException;
/**
* @author 田港
* @version 1.0
* @date 2021-03-26 10:16
*/
public class MyServlet implements Servlet {
@Override // 重写,子类对父类方法进行重写
public void init(ServletConfig servletConfig) throws ServletException {
// 初始化操作--->创建
}
@Override
public ServletConfig getServletConfig() {
// 用来获取Servlet本身的信息的
return null;
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
// --->工作
// 最核心的方法,业务逻辑处理全部写在这里
System.out.println("我是Servlet,已经接受的客服端发来的请求");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
// --->销毁
}
}
- 如何访问我们的
MyServlet.class
文件呢 ,index.jsp
文件之所以可以被浏览器访问到是因为IDEA已经打包好了文件,就在out\artifacts
中,而我们写的类文件被编译之后放在其中的WEB-INF\class
中,Tomcat
默认浏览器不能根据访问 jsp 文件的方式访问我们的类文件,需要配置。
<?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-->
<servlet-name>MyServlet</servlet-name> <!--我们servelt名称,这个可以随便写-->
<servlet-class>com.southwind.servlet.MyServlet</servlet-class> <!--这是我们写的MyServlet路径,要从头写路径-->
</servlet>
<servlet-mapping> <!--servlet映射-->
<servlet-name>MyServlet</servlet-name> <!--与我们servlet标签中的servlet-name一样-->
<url-pattern>/myservlet</url-pattern> <!--url路径-->
</servlet-mapping>
</web-app>
- 现在访问
http://localhost:8080/myservlet
,IDEA控制台会输出我们的System.out.println
那句话。 - 为什么页面时空白的呢,是因为浏览器只是请求了,但我们的程序并未做相应。
三、通过servlet返回一些东西
我们具体看一下我们写的MyServlet
继承Servlet
后,重写的service
方法(这个是方法才是我们关注的重点)
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
}
先看形参:
- servletRequest
类型为接口ServletRequest
,听过这个单词我们就能知道,这个接口写了关于请求的东西。 - servletResponse
类型为接口ServletResponse
,这个接口写了关于处理请求之后反映的东西。
那么我们很好理解了,通过servletRequest
拿到客户端发来的请求,在自己重写的service
方法中进行处理,通过servletResponse
返回给客户端。
实战看一下:
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
// --->工作
// 最核心的方法,业务逻辑处理全部写在这里
// servletResponse
System.out.println("我是Servlet,已经接受的客服端发来的请求");
servletResponse.setContentType("text/html;charset=UTF-8");
servletResponse.getWriter().write("客户端你好,我已经接受到你的请求");
// servletRequest
String requestParameterId = servletRequest.getParameter("id");
servletResponse.getWriter().write(requestParameterId);
}
Run
一下,访问一下两个url,看看浏览器输出
http://localhost:8080/myservlet
http://localhost:8080/myservlet?id=1
如果要和数据库通信,那么在这里写JDBC
代码就ok了。