介绍

Servlet是运行在服务器端的程序,用于处理和响应客户端的请求,生成动态Web内容
JSP的本质是Servlet,当把JSP页面部署到Web容器之后,Web会把JSP编译成对应的Servlet


类和方法

HttpServletRequest用来包装客户端提交的数据:IP地址、表单数据、Cookie信息
HttpServletResponse用来包装向客户端写出的数据(也可以输出图片)

对应于http协议的7中请求,HttpServlet的请求处理方法相应有:
1. doGet ; 2. doPost; (常用)
3. doPut ; 4. doDelete;
5. doHead;6. doOptions;7. doTrace;

HTML code

<form action="exam/loginServlet" method="post">
    用户:<input type="text" name="username"><br>
    密码:<input type="password" name="password"><br>
    <input type="submit" value="登录">
</form>

web.xml code

<servlet>
    <servlet-name>MY SERVLET</servlet-name>
    <servlet-class>LOGIN SERVLET</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>MY SERVLET</servlet-name>
    <url-pattern>/loginServlet</url-pattern>
</servlet-mapping>

servlet code

public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException {
        String username = request.getParameter("username");   
        String password = request.getParameter("password");   

        //向控制台输出
        System.out.println("username=" + username);
        System.out.println("password=" + password);

        //向客户端输出
        response.setContentType("text/html;charset=GB18030");        
        response.getWriter().println("Login Success!!!");
        response.getWriter().println("登录成功!!!");

}                   

生命周期 & 单实例多线程

  1. 加载实例化Servlet
  2. 执行初始化方法init
  3. 处理请求
  4. 退出服务 destroy()

实例化和初始化只执行一次,同时Servlet是单实例多线程的,所以不是线程安全,设计时不要操作成员变量,只用来处理请求

Servlet单实例,减少了生成Servlet的开销。通过线程池响应请求,避免了不断创建线程和销毁线程的开销,提高了性能。


Cookie分为两种:1.放在内存,窗口和子窗口可以使用;2.放在客户端文本,一定时间内可以使用

Ps. 一个Servlet设置的Cookie可以被同一个路径下或子路径下的Servlet读取

Session由服务器创建,放在服务器的内存中,创建SessionID放在Cookie中发送给客户端

 

SetCookie

Cookie c = new Cookie("client_ip", request.getRemoteAddr());
c.setMaxAge(60*60);
response.addCookie(c);

ReadCookie

Cookie[] Cookies = request.getCookies();        
for (int i=0; i<Cookies.length; i++) {
    Cookie c = Cookies[i];
    response.getWriter().println(c.getName() + ", " + c.getValue());
}

SetSession

HttpSession session = request.getSession(true);
session.setAttribute("ip", request.getRemoteAddr());
response.getWriter().println("SetSession OK!");

ReadSession

HttpSession session = request.getSession(true);
String ip = (String)session.getAttribute("ip");
response.getWriter().println("ip=" + ip);
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐