转载

后端开发基础之Servlet&JSP

Servlet

简介

servlet是java web开发的基石,是与平台无关的服务器组件,他是运行在servlet容器(tomcat),负责与客户端通信的组件。

Servlet功能:

  1. 创建并返回基于客户端请求的动态HTML页面。
  2. 与数据库进行通信

如何使用:

如同简介所说,servlet是一组接口,因此我们想要使用servlet的功能,只需要自定义一个类去继承或者实现改接口即可。那么这个自定义的类就具备了接受客户端请求并作出响应的功能。

public class MyServlet implements Servlet {
 @Override
 public void init(ServletConfig servletConfig) throws ServletException {
 }
 @Override
 public ServletConfig getServletConfig() {
 return null;
 }
 @Override
 public void service(ServletRequest servletRequest, ServletResponse
servletResponse) throws ServletException, IOException {
 String id = servletRequest.getParameter("id");
 System.out.println("我是Servlet,我已经接收到了客户端发来的请求,参数是"+id);
 servletResponse.setContentType("text/html;charset=UTF-8");
 servletResponse.getWriter().write("客户端你好,我已接收到你的请求");
 }
 @Override
 public String getServletInfo() {
 return null;
 }
 @Override
 public void destroy() {
 }
}

浏览器不能直接访问Servlet文件,只能通过映射的方式来间接访问Servlet

配置映射

  1. 基于xml文件的配置方式

在web.xml文件为每个Servlet文件进行配置

<servlet>
 <servlet-name>myservlet</servlet-name>
 <servlet-class>com.henu.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
 <servlet-name>myservlet</servlet-name>
 <url-pattern>/test</url-pattern>
</servlet-mapping>

此时启动项目,在地址栏访问/test就可以访问到MyServlet。

  1. 注解方式配置

只需要在实现了Servlet或继承了其子实现类的自定义类上面添加 WebServlet 注释即可

@WebServlet("/test")
public class MyServlet implements Servlet {

}

注解的方式与配置想,xml所实现的效果一致

Servlet生命周期

1、当浏览器访问 Servlet 的时候,Tomcat 会查询当前 Servlet 的实例化对象是否存在,如果不存在, 则通过反射机制动态创建对象,如果存在,直接执⾏第 3 步。

2、调⽤ init ⽅法完成初始化操作。

3、调⽤ service ⽅法完成业务逻辑操作。

4、关闭 Tomcat 时,会调⽤ destory ⽅法,释放当前对象所占⽤的资源。

Servlet 的⽣命周期⽅法:⽆参构造函数、init、service、destory

1、⽆参构造函数只调⽤⼀次,创建对象。

2、init 只调⽤⼀次,初始化对象。

3、service 调⽤ N 次,执⾏业务⽅法。

4、destory 只调⽤⼀次,卸载对象。

####ServletConfig

该接⼝是⽤来描述 Servlet 的基本信息的。

  1. getServletName() 返回 Servlet 的名称,全类名(带着包名的类名)
  2. getInitParameter(String key) 获取 init 参数的值(web.xml)
  3. getInitParameterNames() 返回所有的 initParamter 的 name 值,⼀般⽤作遍历初始化参数
  4. getServletContext() 返回 ServletContext 对象,它是 Servlet 的上下⽂,整个 Servlet 的管理者。
  5. ServletConfig 和 ServletContext 的区别:
    1. ServletConfig 作⽤于某个 Servlet 实例,每个 Servlet 都有对应的 ServletConfig
    2. ServletContext 作⽤ 于整个 Web 应⽤
    3. ⼀个 Web 应⽤对应⼀个 ServletContext,多个 Servlet 实例对应⼀个 ServletContext。
    4. ⼀个是局部对象,⼀个是全局对象。

Servlet层次结构

后端开发基础之Servlet&amp;JSP

GenericServlet 实现 Servlet 接⼝,同时为它的⼦类屏蔽了不常⽤的⽅法,⼦类只需要重写 service ⽅ 法即可。 HttpServlet 继承 GenericServlet,根据请求类型进⾏分发处理,GET 进⼊ doGET ⽅法,POST 进⼊ doPOST ⽅法。

我们只需要⾃定义的 Servlet 类只需要继承 HttpServlet 即可,重新实现 doGET 和 doPOST。

package com.henu.servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/test")
public class MyServlet extends HttpServlet {
 @Override
 protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
 resp.getWriter().write("GET");
 }
 @Override
 protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
 resp.getWriter().write("POST");
 }
}

JSP

内置对象

1、request:表示⼀次请求,HttpServletRequest。

2、response:表示⼀次响应,HttpServletResponse。

3、pageContext:⻚⾯上下⽂,获取⻚⾯信息,PageContext。

4、session:表示⼀次会话,保存⽤户信息,HttpSession。

5、application:表示当前 Web 应⽤,全局对象,保存所有⽤户共享信息,ServletContext。

6、config:当前 JSP 对应的 Servlet 的 ServletConfig 对象,获取当前 Servlet 的信息。

7、out:向浏览器输出数据,JspWriter。

8、page:当前 JSP 对应的 Servlet 对象,Servlet。

9、exception:表示 JSP ⻚⾯发⽣的异常,Exception。

常⽤的是 request、response、session、application、pageContext

request 常⽤⽅法

1、String getParameter(String key) 获取客户端传来的参数。

2、void setAttribute(String key,Object value) 通过键值对的形式保存数据。

3、Object getAttribute(String key) 通过 key 取出 value。

4、RequestDispatcher getRequestDispatcher(String path) 返回⼀个 RequestDispatcher 对象,该对 象的 forward ⽅法⽤于请求转发。

5、String[] getParameterValues() 获取客户端传来的多个同名参数。

6、void setCharacterEncoding(String charset) 指定每个请求的编码。

HTTP 请求状态码

200:正常

404:资源找不到

400:请求类型不匹配

500:Java 程序抛出异常

response 常⽤⽅法:

sendRedirect(String path) 重定向,⻚⾯之间的跳转。

转发 getRequestDispatcher 和重定向 sendRedirect 的区别:

转发是将同⼀个请求传给下⼀个⻚⾯,重定向是创建⼀个新的请求传给下⼀个⻚⾯,之前的请求结束⽣ 命周期。 转发:同⼀个请求在服务器之间传递,地址栏不变,也叫服务器跳转。 重定向:由客户端发送⼀次新的请求来访问跳转后的⽬标资源,地址栏改变,也叫客户端跳转。 如果两个⻚⾯之间需要通过 request 来传值,则必须使⽤转发,不能使⽤重定向。

JSP 内置对象作⽤域

4个

page、request、session、application

通过进行设置和取出共享变量:

setAttribute、getAttribute

作⽤域:

page 作用域:对应的内置对象是 pageContext。

request 作⽤域:对应的内置对象是 request。

session 作⽤域:对应的内置对象是 session。

application 作⽤域:对应的内置对象是 application。

作用域的共享范围:

page < request < session < application

page 只在当前⻚⾯有效。

request 在⼀次请求内有效。

session 在⼀次会话内有效。

application 对应整个 WEB 应⽤的。

  • 网站访问量统计

    <%
     Integer count = (Integer) application.getAttribute("count");
     if(count == null){
     count = 1;
     application.setAttribute("count",count);
     }else{
     count++;
     application.setAttribute("count",count);
     }
    %>
    您是当前的第<%=count%>位访客
原文  https://seulg.github.io/post/hou-duan-kai-fa-ji-chu-zhi-servlet/
正文到此结束
Loading...