什么是Servlet?
Servlet是Java Web开发的基石,是与平台无关的服务器组件,它是运行在Servlet容器/Web应用服务器/Tomcat,负责与客户端进行通信。
Servlet的功能
(1)创建并返回基于客户请求的动态HTML页面
(2)与数据库进行通信
Servlet接收客户端的请求,并从数据库中找到对应的数据,然后再将数据传送到客户端
如何使用Servlet
Servlet本身就是一组接口,并且这一组接口由java提供,在javax.servlet包中。
在实际开发过程中,只需要自定义一个类,实现Servlet接口,这个类就具备了接收客户端请求以及做出响应的功能。
在IDEA中实现Servlet
(1)创建项目。Java的所有东西都是放置在src目录下的
(2)在src目录下新建一个包,在包里创建一个普通类MyServlet
(3)在类MyServlet中实现Servlet接口中的五个抽象方法
方法1主要是做一些初始化功能
方法2主要用来获取Servlet的一些信息
方法3是核心,主要在这个方法里实现业务逻辑处理
方法4是返回一些信息
方法5是销毁作用
(4)重写方法3
(5)点击编译,编译成功后生成我们java代码的字节码文件
即MyServlet.class文件
此时,Servlet并不能直接访问java代码生成的class文件
需要进行映射才能进行访问
(6)添加映射
映射是在web.xml文件中添加的
在web.xml文件中添加两个标签
标签1:第一行代码中的Myservlet就是映射名称,第二行代码就是我们java代码编译生成的class文件
标签2:第一行代码中的Myservlet就是映射名称,与标签1中的名称保持一致,第二行代码就是我们在网页中的地址
(标签1中的第一行代码中的映射名称可以自定义,但必须与标签2中第一行代码中的映射名称保持一致。标签1中第二行代码中的class文件地址必须与实际项目中的地址相同,标签2中第二行代码中的信息可以自定义)
之前我们在浏览器网页中并不能直接访问java代码编译生成的class文件,这个时候可以通过上面的方法通过一个映射名称Myservlet将class文件和浏览器网页关联起来,只需要在浏览器网址中输入标签2中第二行代码的地址,就可以访问class文件
(6)点击编译,在打开的浏览器网页的地址中输入标签2中我们自定义的地址,点击回车访问
此时浏览器页面并没有任何信息,但是我们可以在IDEA中看到信息
为什么浏览器中没有信息,而IDEA中有信息呢?
这是因为我们在只在客户端发出了请求(输入了我们自定义的网址),后端也接收到了我们的请求(在IDEA中的信息显示),但是后端只是接收到了请求,并没有对这个请求做出任何响应,因此浏览器页面是一片空白。
那怎样进行请求回应呢?
(7)做出回应
我们来看servlet接口中的第三个方法,也就是核心方法service()
这个方法接收两个参数,第一个就代表请求的意思,第二个就代表响应的意思
因此我们可以通过servletResponse.getWriter()方法创建一个对象,并调用write()方法做出请求回应
(8)重新编译运行
再打开的浏览器页面地址中再次输入我们之前自定义的地址,回车即可
乱码问题
我们输出的信息是中文时,在浏览器上可能看到的是以下情况
这个时候我们可以通过添加一行代码即可
参数servletRequest
我们发现在上面的service方法中,只用到了回应参数servletResponse,并没有用到请求参数servletRequest,那么怎样使用呢?
(1)首先在浏览器页面的地址中输入:
问号?跟着一对key-value值
(2)在service方法中调用servletRequest的getParameter方法,将上一步中key值作为参数传递进去,并定义一个String变量接收key对应的value值
(3)重新编译运行,在浏览器页面地址中中输入(1)中的信息,回车,在IDEA中