Java Web中Servlet基础重点总结

JSP只是负责显示的页面,最好不要进行接收请求,调用JavaBean去处理请求的工作,为了让JSP只专注于显示就要引入Servlet将显示与请求、处理请求的工作分开

各种网页系统组成:

JSP(Java Server Pages):显示数据

Servlet:接收请求,调用JavaBean去处理请求

JavaBean:封装数据;业务逻辑

Servlet做了什么?

  1. 本身不做任何业务处理
  2. 只是接收请求并决定调用哪个JavaBean去处理请求
  3. 确定用哪个页面来显示处理返回的数据

Servlet是什么?

  1. Server+Applet ,是一种服务器端的Java应用程序
  2. 只有当一个服务器端的程序使用了Servlet API的时候,这个服务端的程序才能称之为Servlet
  3. Servlet是在服务器端运行的Java程序,可以接收客户端请求并做出响应

  1. Servlet可以动态生成HTML内容对客户端进行响应

Servlet:

  1. Java程序
  2. 运行在服务器端
  3. 需要web容器的支持(想运行Servlet要走Tomcat)
  4. 使用了ServletAPI
  5. 本身不做任何业务处理,中间调度作用

Servlet与JSP的关系:

 

ServletAPI:

1. javax.servlet.Servlet接口

所有Java Servlet的基础接口类,规定了必须由Servlet具体类实现的方法集,定义了所有Servlet需要实现的方法

方法名称

功能描述

void  init (ServletConfig  config)

由Servlet容器调用,用于完成Servlet对象在处理客户请求前的初始化工作

void  service (

ServletRequest  req,

ServletResponse  res)

由Servlet容器调用,用来处理客户端的请求

void  destroy ( )

由Servlet容器调用,释放Servlet对象所使用的资源

ServletConfig  getServletConfig ( )

返回ServletConfig对象,该对象包含此 Servlet 的初始化和启动参数。

返回的ServletConfig对象是传递给init()方法的对象

String  getServletInfo ( )

返回有关Servlet 的信息,比如作者、版本和版权。

返回的字符串是纯文本,而不是任何种类的标记(如 HTML、XML等)

2. javax.servlet.ServletConfig接口

在Servlet初始化过程中获取配置信息,一个Servlet只有一个ServletConfig对象

方法名称

功能描述

String  getInitParameter (String name)

获取web.xml中设置的以name命名的初始化参数值

ServletContext  getServletContext( )

返回Servlet的上下文对象引用

3. javax.servlet.ServletContext接口

获取Web应用上下文,与Servlet容器进行通信

方法名称

功能描述

String  getInitParameter (String name)

获取名为name的系统范围的初始化参数值,系统范围的初始化参数可在部署描述符中使用<context-param>元素定义

void  setAttribute (String name, Object object )

设置名称为name的属性

Object  getAttribute (String  name)

获取名称为name的属性

String  getRealPath (String  path)

返回参数所代表目录的真实路径

void  log (String  message)

记录一般日志信息

4. javax.servlet.GenericServlet

是Servlet的通用版本,是一种与协议无关的Servlet,提供了Servlet与ServletConfig接口方法的默认实现(service( )方法除外)

方法名称

功能描述

void  init (ServletConfig  config )

对Servlet接口中init()方法的实现,对ServletConfig实例进行了保存。此方法还有一个无参的重载方法,可用于子类中重写

String  getInitParameter (String name )

返回web.xml中名称为name的初始化参数的值

ServletContext  getServletContext ( )

返回ServletContext对象的引用

5. javax.servlet.http.HttpServlet抽象类

在GenericServlet基础上扩展的基于Http协议的Servlet继承自,GenericServlet处理HTTP协议的请求和响应

init ( );service ( );doGet ( );doPost ( );destroy ( )。

方法名称

功能描述

void  service (ServletRequest req, ServletResponse res)

对GenericServlet类中service()方法的实现,将请求分发给void  service (HttpServletRequest req,  HttpServletResponse res )

void  service (HttpServletRequest req, HttpServletResponse res )

接收HTTP 请求,并将它们分发给此类中定义的doXXX( )方法

void  doXXX (HttpServletRequest  req,HttpServletResponse res )

根据请求方式的不同分别调用的相应处理方法,如doGet()、doPost()等

请求、响应相关接口:

1. ServletRequest接口

获取客户端请求的数据

方法名称

功能描述

Object  getAttribute (String name)

获取名称为name的属性值

void  setAttribute (String name,Object object)

在请求中保存名称为name的属性

void  removeAttribute (String name)

清除请求中名字为name的属性

String  getCharacterEncoding ( )

返回请求体所使用的字符编码

void  setCharacterEncoding (String charset)

设置请求体的字符编码

String  getParameter (String name)

返回指定请求参数的值

String[ ]  getParameterValues (String name)

返回指定请求参数的全部值

RequestDispatcher  

getRequestDispatcher(String path )

返回指向指定路径的请求分发对象

2. HttpServletRequest接口

除了继承ServletRequest接口中的方法,还增加了一些用于读取HTTP请求信息的方法

方法名称

功能描述

String  getContextPath( )

返回请求URI中表示请求上下文的路径,上下文路径是请求URI的开始部分

Cookie[ ]  getCookies( )

返回客户端在此次请求中发送的所有cookie对象

HttpSession  getSession( )

返回和此次请求相关联的session,如果没有给客户端分配session,则创建一个新的session

String  getMethod( )

返回此次请求所使用的HTTP方法的名字,如GET、POST

String  getHeader(String name)

返回指定的请求头信息

3. ServletResponse接口

设置响应参数和向客户端发送响应数据

方法名称

功能描述

PrintWriter  getWriter ( )

返回PrintWriter对象,用于向客户端发送文本

String  getCharacterEncoding ( )

返回在响应中发送的正文所使用的字符编码

void  setCharacterEncoding(String charset)

设置响应的字符编码

void  setContentType (String type)

设置发送到客户端的响应的内容类型,此时响应的状态属于尚未提交

4. HttpServletResponse接口

除了继承ServletResponse接口中的方法,还增加了适用于HTTP响应的新方法

方法名称

功能描述

void  addCookie(Cookie cookie)

增加一个cookie到响应中,这个方法可多次调用,设置多个cookie

void  addHeader

(String name,String  value)

将一个名称为name,值为value的响应报头添加到响应中

void  sendRedirect(String location)

发送一个临时的重定向响应到客户端,以便客户端访问新的URL

void  encodeURL(String url)

使用session ID对用于重定向的URL进行编码

一个Servlet从生到死的一个过程(Servlet的生命周期)

public void init() throws ServletException {

              System.out.println("初始化Servlet。。。。。。");

       }

       public void doGet(HttpServletRequest request, HttpServletResponse response)

                     throws ServletException, IOException {

                            System.out.println("进入doGet()。。。。。。");

       }

       public void doPost(HttpServletRequest request, HttpServletResponse response)

                     throws ServletException, IOException {

                            System.out.println("进入doPost()。。。。。。");

       }

       public void destroy() {

              System.out.println("Servlet销毁。。。。。。");

       }

实例化

当Servlet容器启动或者容器检测到客户端请求时,Servlet 容器创建 Servlet 的实例

初始化

实例化后,该容器调用 init ( ServletConfig ) 方法

服务

得到客户端Servlet请求,并做出处理时,则容器调用 service() 方法

销毁

当程序中的Servlet对象不再使用的时候,或者Web服务器停止运行的时候,销毁实例之前调用 destroy() 方法

 

第一个Servlet:

Servlet中主要方法:

1. init():Servlet的初始化方法,仅仅会执行一次

2. service():处理请求和生成响应

3. destroy():在服务器停止并且程字中的Servlet对象不再使用的时候调用,只执行一次

4. ServletRequest

封装客户的请求信息

作用相当于JSP内置对象request

5. ServletResponse

创建响应信息,将处理结果返回给客户端

作用相当于JSP内置对象response

6. ServletConfig:

包含了servlet的初始化参数信息

获取Servlet初始化参数:

Servlet初始化参数配置:

<web-app>

    <servlet>

        <servlet-name>HelloServlet</servlet-name>

        <servlet-class>demo.servlet.HelloServlet</servlet-class>

        <init-param>

            <param-name>initParam</param-name>

            <param-value>Hello Servlet</param-value>

        </init-param>

    </servlet>

    <servlet-mapping>

        <servlet-name>HelloServlet</servlet-name>

        <url-pattern>/HelloServlet</url-pattern>

    </servlet-mapping>

</web-app>

获取初始化参数:

public void doGet ( HttpServletRequest  request, HttpServletResponse  response )

throws  ServletException,  IOException  {

        System.out.println("处理请求时,doGet()方法被调用。");

        String initParam = getInitParameter( "initParam" );

        System.out.println(initParam);

Servlet路径跳转问题:

HttpServletResponse   重定向   Response.sendRedirect()

http://localhost:8080/ news/servlet/AddServlet.jsp

1. 相对路径

Response.sendRedirect("newsDetailList.jsp");

http://localhost:8080/ news/servlet/newDetailList.jsp

就是相对当前的servlet路径跳

2. 绝对路径

Response.sendRedirect("/news/jsp/admin/newsDetailList.jsp");

http://localhost:8080/ news/jsp/admin/newDetailList.jsp

从根路径开始寻找,根据web应用本身来加上应用

 

HttpServletRequest   转发   request.getRequestDispatcher().forward()

http://localhost:8080/ news/servlet/AddServlet.jsp

1. 相对路径

request.getRequestDispatcher("newsDetailList.jsp").forward(……)

http://localhost:8080/ news/servlet/newDetailList.jsp

就是相对当前的servlet路径跳

2. 绝对路径

request.getRequestDispatcher("/jsp/admin/newsDetailList.jsp").forward(……)

http://localhost:8080/news/jsp/admin /newDetailList.jsp

从根路径开始寻找,根据web本身来加上news路径之后再加上路径

总结:

  • 7
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值