servlet入门学习

创建servlet

我们就实现一个返回helloworld的功能,只需要tomcat即可,因为tomcat里面有servlet的相关jar。
在idea中创建一个javaweb项目即可:
创建好后,新建一个hello类,该类继承HttpServlet即可:

@WebServlet(value = "/hello")
public class HelloServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.分别设置服务器和客户端的字符内容类型
        resp.setContentType("text/html;charset=UTF-8");
        resp.setCharacterEncoding("UTF-8");
        //2.直接一句代码即可
        resp.setHeader("content-type","text/html;charset=UTF-8");
        System.out.println("service被调用了");
//        resp.getWriter().write("你好");
        resp.sendRedirect("/bye");
    }

    @Override
    public void destroy() {
        System.out.println("被销毁了");
    }

    @Override
    public void init() throws ServletException {
        System.out.println("被创建了");
    }
}

其中只有重写service方法是必须的,其他两个是生命周期,不用管。
返回hello是:

resp.getWriter().write("你好");

Servlet的生命周期大致可分为三个,创建,service,和销毁。

request对象获取相关参数

常用的参数主要是parameter,cookie,session,分别都有对应的get方法:

        req.getSession();
        req.getCookies();
        req.getParameter("name");

重定向和请求转发的区别

重定向是客户端行为,用户访问某个url,存在重定向,则用户会第二次访问重定向的url,这就叫重定向,客户端发起两次访问。重定向可以访问外站资源,但是request域对象不能共享。
请求转发是服务器端行为,请求转发时,用户访问某个url。服务器会将用户请求转发到另一个资源上去处理,但是仅限同样项目下的资源。请求转发的req对象是共享的,因此可以数据共享。

Response对象返回中文

需要设置,两种设置方法:

        resp.setHeader("content-type","text/html;charset=UTF-8");//设置客户端
        resp.setCharacterEncoding("UTF-8");//设置服务端

或者:

resp.setContentType("text/html;charset=UTF-8");

cookie学习

cookie用来辨认用户状态
实现起来很简单:

@WebServlet("/cookie1")
public class CookieResp extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Cookie cookie = new Cookie("id","123");
        cookie.setMaxAge(30);
        resp.addCookie(cookie);
    }
}

这样,当用户访问该url的时候就会得到cookie,该cookie存在客户浏览器中,可以设置cookie过期时间,这里是30s,默认是-1(即浏览器关闭即过期)。
也可以在服务器获取用户传过来的cookie:

@WebServlet("/cookie2")
public class CookieGet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Cookie[] cookies = req.getCookies();
        for(Cookie cookie : cookies){
            String name = cookie.getName();
            String value = cookie.getValue();
            System.out.println("name:"+name+"and value:"+value);
        }
    }
}

cookie就是key-value的形式。

session学习

Session 是存放在服务器端的,类似于Session结构来存放用户数据,当浏览器 第一次发送请求时,服务器自动生成了一个Session和一个Session ID用来唯一标识这个Session,并将其通过响应发送到浏览器。当浏览器第二次发送请求,会将前一次服务器响应中的Session ID放在请求中一并发送到服务器上,服务器从请求中提取出Session ID,并和保存的所有Session ID进行对比,找到这个用户对应的Session。
一般情况下,服务器会在一定时间内(默认30分钟)保存这个 Session,过了时间限制,就会销毁这个Session。在销毁之前,程序员可以将用户的一些数据以Key和Value的形式暂时存放在这个 Session中。当然,也有使用数据库将这个Session序列化后保存起来的,这样的好处是没了时间的限制,坏处是随着时间的增加,这个数据 库会急速膨胀,特别是访问量增加的时候。一般还是采取前一种方式,以减轻服务器压力。
session实现:

@WebServlet("/session1")
public class SessionServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        HttpSession session = req.getSession();
        //设置session内容
        session.setAttribute("name","admin");
        session.setAttribute("pwd","123");
        //获取session
        String name = (String) session.getAttribute("name");
        //设置session存活时间,30s
        session.setMaxInactiveInterval(30);
        //session移除
        session.removeAttribute("name");
    }
}

session和request一样,都是在请求转发时可以共享的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值