servlet常用的方法说明

目录

Servlet

Servlet体系结构

Servlet接口

ServletConfig接口

ServletContext接口   

GenericServlet抽象类

HttpServlet抽象类

ServletRequest接口

HttpServletRequest接口

HttpSession接口

会话技术:

session的创建:第一次请求时创建

session的结束:

ServletResponse接口

HttpServletResponse接口

servlet、request、session的作用域

cookie 和 session 的区别

servlet的生命周期:

实例化        

初始化

服务

销毁

转发和重定向的区别:

转发:

重定向:


Servlet

        Servlet是在服务器端运行的Java程序,可以接收客户端请求并做出响应

Servlet体系结构

1.接口

Servlet、ServletConfig

2.抽象类

GenericServlet、HttpServlet

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等)

ServletConfig接口

在Servlet初始化过程中获取配置信息        一个Servlet只有一个ServletConfig对象
方法名称
功能描述
String getInitParameter (String name )
获取web.xml中设置的以name命名的初始化参数值
ServletContext getServletContext( )
返回Servlet的上下文对象引用

ServletContext接口   

Servlet容器,里面放的都是Servlet对象
获取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 )
记录一般 日志信息

GenericServlet抽象类

提供了Servlet与ServletConfig接口方法的默认实现(service( )方法除外)

方法名称

功能描述

public void init (ServletConfig config )

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

public String getInitParameter (String name )

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

public ServletContext getServletContext ( )

返回ServletContext对象的引用

HttpServlet抽象类

继承自GenericServlet

处理HTTP协议的请求和响应

方法名称

功能描述

public void service (

ServletRequest req,

ServletResponse res )

对GenericServlet类中service()方法的实现,将请求分

发给protected void service (HttpServletRequest req,HttpServletResponse res )

protected void service (

HttpServletRequest req,

HttpServletResponse res )

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

protected void doXXX (

HttpServletRequest req,

HttpServletResponse res )

根据请求方式的不同分别调用的相应处理方法,如

doGet()、doPost()等

 例:

@WebServlet("/page1")
public class Demo02 extends HttpServlet {
    private static final long serialVersionUID = 1L;
  
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //处理乱码
        request.setCharacterEncoding("utf-8");
		response.setCharacterEncoding("utf-8");
        // 设置响应格式
		response.setContentType("text/html;charset=utf-8");
        // 设置变量
        String name = "张三";
        // 获取servlet容器对象
        ServletContext sc = getServletContext();
        // 设置名称为name的属性
        sc.setAttribute("username", name);
        // 获取打印流对象
        PrintWriter out = response.getWriter();
        out.print("<h1>"+name+"</h1>");
        // 释放资源
        out.close();
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }
}
@WebServlet("/page2")
public class Demo03 extends HttpServlet {
    private static final long serialVersionUID = 1L;
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //处理乱码
        request.setCharacterEncoding("utf-8");
		response.setCharacterEncoding("utf-8");
        // 设置响应格式
		response.setContentType("text/html;charset=utf-8");
        // 获取servlet容器对象
        ServletContext sc = getServletContext();
        // 获取名称为username的属性
        Object attribute = sc.getAttribute("username");
        // 获取打印流对象
        PrintWriter out = response.getWriter();
        out.print("<h1>页面2"+attribute+"</h1>");
        // 释放资源
        out.close();
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }
}

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 )

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

 例:

@WebServlet("/addlogin.do")
public class AddLoginServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 处理乱码
        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        // 获取对象
        SqlSession sqlSession = DaoUtil.getSqlSession();
        PrintWriter out = response.getWriter();
        // 获取数据
        // 返回指定请求参数的值
        String username = request.getParameter("username");
        String userpwd = request.getParameter("userpwd");
        String reuserpwd = request.getParameter("reuserpwd");
        // 获取请求中名称为sex的属性
        String sex = request.getParameter("sex");
        // 判断两次密码是否一致
        if(userpwd.equals(reuserpwd)) {
            // 获取Login对象并给其对象添加信息
            Login lo = new Login();
            lo.setLname(username);
            lo.setLpwd(userpwd);
            lo.setLsex(sex);
            
            LoginMapper loMapper = sqlSession.getMapper(LoginMapper.class);
            int ret = loMapper.addLogin(lo);
            
            if(ret > 0) {
                sqlSession.commit();
                out.print("<script>\r\n" +
                        "    alert(\"恭喜你\");\r\n" +
                        "    location.href=\"login.do\";\r\n" +
                        "</script>");
            }else {
                sqlSession.rollback();
                out.print("<script>\r\n" +
                        "    alert(\"系统异常请联系管理员\");\r\n" +
                        "    location.href=\"login.do\";\r\n" +
                        "</script>");
            }    
        }else {
            out.print("<script>\r\n" +
                    "    alert(\"密码不一致\");\r\n" +
                    "    location.href=\"login.do\";\r\n" +
                    "</script>");
        }
        // 释放资源
        DaoUtil.closeSource(sqlSession);
        out.close();
    }
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }
}
@WebServlet("/main.do")
public class MainServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 处理乱码
        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        // 获取资源
        SqlSession sqlSession = DaoUtil.getSqlSession();
        PrintWriter out = response.getWriter();
        // 获取资源 
        String um = request.getParameter("username");
        String up = request.getParameter("userpwd");
        
        LoginMapper loMapper = sqlSession.getMapper(LoginMapper.class);
        Login lo = loMapper.findLoginByLnameAndLpwd(um, up);
        
        if(lo != null) {
            out.print("<!DOCTYPE html>\r\n" +
                    "<html>\r\n" +
                    "    <head>\r\n" +
                    "        <meta charset=\"utf-8\">\r\n" +
                    "        <title></title>\r\n" +
                    "    </head>\r\n" +
                    "    <body>\r\n" +
                    "        <h1>首页</h1>\r\n" +
                    "        <h1>用户名:"+um+"</h1>\r\n" +
                    "        <h1>密码:"+up+"</h1>\r\n" +
                    "    </body>\r\n" +
                    "</html>");
        }else {
            out.print("<script>\r\n" +
                    "    alert(\"登录失败\");\r\n" +
                    "    location.href=\"login.do\";\r\n" +
                    "</script>");
        }

        DaoUtil.closeSource(sqlSession);
        out.close();
    }
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }
}

HttpServletRequest接口

除了继承ServletRequest接口中的方法,还增加了一些用于读取HTTP请求信息的方法
方法名称
功能描述
String getContextPath( )
 返回请求URI中表示请求上下文的路径,上下文路径是请求URI的开始部分
Cookie[ ] getCookies( )
返回客户端在此次请求中发送的所有cookie对象
HttpSession getSession( )
返回和此次请求相关联的session,如果没有给客户端分配session,则创建一个新的session
String getMethod( )
返回此次请求所使用的HTTP方法的名字,如GET、POST
String getHeader( String name )
返回指定的请求头信息

HttpSession接口

• session对象常用方法:
方法名称
 说明
String getId()
获取sessionid
void setMaxInactiveInterval(int interval)
设定session的非活动时间
int getMaxInactiveInterval()
获取session的有效非活动时间(以秒为单位)
void invalidate()
设置session对象失效
void setAttribute(String key, Object value)
 以key/value的形式保存对象值
Object getAttribute(String key)
通过key获取对象值
void removeAttribute(String key)
 从session中删除指定名称(key)所对应的对象

会话技术:

第一次请求开始,到客户端或者服务端其中一端断开连接为止。
服务器常用 session 保持会话

session的创建第一次请求时创建

session的结束

1.浏览器关闭
2.服务器关闭或出现意外
3.超时 (在这个期间里再没有任务请求)
     服务器中 session 默认存活30分钟
     设置session存活时间     在配置文件中设置
               <session-config>
                         <session-timeout>30</session-timeout>
               </session-config>
4.用户主动关闭 session
     invalidate()     让session失效

ServletResponse接口

设置响应参数和向客户端发送响应数据
方法名称
 功能描述
PrintWriter getWriter ( )
返回PrintWriter对象,用于向客户端发送文本
String getCharacterEncoding ( )
返回在响应中发送的正文所使用的字符编码
void setCharacterEncoding (String charset )
设置响应的字符编码
void setContentType ( String type ) 
设置发送到客户端的响应的内容类型,此时响应的状态属于尚未提交”text/html;charset=UTF-8”

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进行编码
注:
response.sendRedirect("");    重定向
response.encodeURL("");       带着session id 重定型

servlet、request、session的作用域

作用域
servlet 整个应用程序
request只是那一次请求
session整个会话

cookie 和 session 的区别

数据存储的位置
存储的数据类型
生命周期
安全性
cookie
浏览器
String类型
浏览器有关
不安全
session
服务器
Object类型
服务器有关
安全
默认:cookie 、 session 浏览器挂掉就没了
登录成功后 把数据存在session中
登录成功后 把数据存在浏览器
服务器中需要自己 new 对象的(两个)
// cookie是浏览器支持的一种本地存储机制。一般由服务端设置生成,在响应请求时被自动存储在浏览器中
Cookie c = new Cookie();
// 当前页面容器
WebContext context = new WebContext(request, response,getServletContext());

servlet的生命周期:

        servlet 开始:项目被 Tomcat 加载的时候

        servlet 结束:关闭或重启服务器

实例化        

        Servlet 容器创建 Servlet 的实例

初始化

        该容器调用 init ( ServletConfig ) 方法

服务

        如果请求 Servlet,则容器调用 service() 方法

销毁

         销毁实例之前调用 destroy() 方法

转发和重定向的区别:

转发:

        一次请求和响应,

        服务器的跳转,

        带着上一次的请求和响应跳转到下一个页面

例:

//服务器的分发(转发)//服务器的跳转页面
request.getRequestDispatcher("login.do").forward(request,response);

重定向:

        两次请求和响应,

        浏览器页面的跳转,

        浏览器页面的跳转不带数据

例:

response.sendRedirect("login.do");

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值