什么是Servlet

Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和服务器上的数据库或应用程序之间的中间层。
使用 Servlet,您可以收集来自网页的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页。

Servlet基本响应逻辑

//Servlet类
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet(name = "Servlet", value = "/Servlet")
public class Servlet extends HttpServlet {
    //处理Get请求
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String s="这是Servlet显示的";
        response.setCharacterEncoding("GBK");//设置响应数据的编码方式
        request.setCharacterEncoding("GBK");//设置请求编码
        PrintWriter pw=response.getWriter();
        pw.print(s);

        String name=request.getParameter("uname");//获取前端uname值
        String pwd=request.getParameter("upwd");//获取前端upwd值
        pw.print("您输入的用户名是:"+name+"您输入的密码是:"+pwd);
    }

    //处理Post请求
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request,response);
    }
}



//html5前端
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8"><!--设置响应编码为UTF-8-->
    <title>用户登入</title>
</head>
<body>
<!--action表示要将表达数据交给那个程序处理,method表示请求类型-->
    <form action="/MyWeb_war_exploded/Servlet" method="post">
      用户名:<input type="text" name="uname"><!--创建一个文本输入框,声明名字为uname-->
      密码:<input type="password" name="upwd"><!--创建一个密码输入框,声明名字为upwd-->
      <input type="submit"><!--提交后交由/MyWeb_war_exploded/Servlet处理-->
    </form>
</body>
</html>

Servlet里使用Cookie

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;

@WebServlet(name = "Servlet", value = "/Servlet")
public class Servlet extends HttpServlet {
    //处理Get请求
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setCharacterEncoding("GBK");//设置响应数据的编码方式
        request.setCharacterEncoding("GBK");//设置请求编码
        Cookie cookie=new Cookie("name","张三");//设置一个Cookie值
        cookie.setMaxAge(15);//设置cookie有效期为15秒
        response.addCookie(cookie);//添加Cookie

        //获取Cookie
        Cookie[] cookies=request.getCookies();
        for(Cookie coo:cookies){
            System.out.println("键:"+coo.getName()+"值:"+coo.getValue());
			//登入信息Cookie用IF判断coo里是否有正确的值,决定是否成功登入
        }
    }

    //处理Post请求
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request,response);
    }
}

Session

Session与Cookie的区别
Cookie保存在浏览器
Session保存在服务器

Cookie存储信息小于登入4KB,一个站点不超过20个
Session没有限制

Cookie只能保存ASCII字符
Session没有限制

Cookie客户端可见,不安全
Session存储在服务器,不存在信息泄露

Cookie有效期内无论是否关闭窗口都有效
Session关闭窗口就失效

Session使用案例

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;

@WebServlet(name = "Servlet", value = "/Servlet")
public class Servlet extends HttpServlet {
    //处理Get请求
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setCharacterEncoding("GBK");//设置响应数据的编码方式
        request.setCharacterEncoding("GBK");//设置请求编码

        //添加Session
        HttpSession hs=request.getSession();
        hs.setMaxInactiveInterval(15);//设置有效时间为15秒
        hs.setAttribute("name","李四");//设置Session的值

        //获取Session
        System.out.println(hs.getAttribute("name"));
    }

    //处理Post请求
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request,response);
    }
}

请求转发和从定向

请求转发是一次请求,重定向是两次请求;
请求转发可以共享请求参数 ,重定向之后,就获取不了共享参数了;

//请求转发是将客户端请求交给另一个程序处理,地址不变
//请求转发
request.getRequestDispatcher("/ServletB").forward(request,response);

//从定向是重新发送一个新的请求到另一个程序处理
//从定向
response.sendRedirect("/ServletB");//从定向需要填写完整的地址
文章作者: pymdv
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 屠龙少年
Java手记
喜欢就支持一下吧