Javeweb-Servlet02

1.对于大型的项目,推荐实验weblogic

2.本小节重在学习Servlet的生命周期

3.访问项目时。form表单中地址的填写问题

4.请求转发和重定向的问题(涉及到url地址的不同转换)

5.属性的作用域问题

1.生命周期

1.生命周期:主要分为三个阶段

  • init初始化

  • service处理请求阶段

  • destory销毁阶段

只有完成了初始化的Servlet才能处理客户端的请求,有些时候爆出来空指针异常要考虑是不是没有初始化的问题。

请求响应阶段就是常写的doGet或者doPost方法等

处理完的请求发送给客户端,下一次请求无需init,直接去调用去处理请求就可以了

2.请求转发和重定向

请求转发是服务器内部发生的,转发客户端到来的请求。

重定向是客户端重现发起的一次请求,注意此时地址需要把包名带上,不然会出现404的效果。

请求转发的方式决定着后面处理的方式

2.1请求转发

1.登录案例

第一步:创建登录界面

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>index</title>
</head>
<body>
登录首页
<form action="login" method="GET">
账号:<input type="text" name="account"/> <br/>
密码:<input type="password" name="password"/> <br/>
<input type="submit" value="登录"/>
</form>
</body>
</html>

第二步:创建servlet

  • /login转到/LoginHandle去处理

@WebServlet("/login" )
public class LoginServlet extends HttpServlet {
    
   
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//      调用post方法执行请求
        doPost(request,response);
​
    }
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//          
        request.setCharacterEncoding("utf-8");
//      实现请求转发
        request.getRequestDispatcher("/LoginHandle").forward(request, response);
    }
}
  • /LoginHandle处理的界面

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.append("Servlet2处理登录请求"+request.getParameter("account"));
}

运行截图:

 

2.2重定向

重定向会丢失原先的请求信息,而请求转发不会丢失原先的信息

第一步:LoginServlet设置重定向

  • 需要设置包的名称,重新发送请求的过程

response.sendRedirect("/ch02-01.2/LoginHandle");

第二步:

System.out.append("Servlet2处理登录请求"+request.getParameter("account"));

运行截图:

 

2.3Servlet的作用域

常见的四种作用域,page,request,session,application。

对于Servlet来说,能用到的就是后面三个,对于jsp页面来说需要用到的就是这四个。

对于这个作用域的可能涉及到一个this的空指针异常,如果异常的话,异常的点就在Servlet没有进行初始化。

1.request

仅在请求对象中存在

2.session

当前的会话有效,关闭会话的窗口,当前的会话变量也是会随着消失的。

一次会话的过程可以认为,从浏览器打开到浏览器关闭就是一次会话的过程。

3.application

application就是请求的上下文对象,需要用到的就是ServletContext对象

4.作用域案例:

第一种测试:同一个页面下的信息

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//      设置三种作用域变量
        request.setAttribute("name1", "request作用域");
//      获取当前的session对象
        HttpSession session=request.getSession();
//      设置当前会话的信息
        session.setAttribute("name2","session作用域");
//      获取上下文对象
        ServletContext application =request.getServletContext();
        application.setAttribute("name3", "application作用域");
        
        
//      打印对应的作用域信息
        System.out.println("name1-request---"+request.getAttribute("name1"));
        System.out.println("name2-session---"+session.getAttribute("name2"));
        System.out.println("name3-application---"+application.getAttribute("name3"));
}
  • 运行截图: 三种对象的结果都是可以获取的

 

第二种:将请求转发到/test进行测试

@WebServlet("/test")
public class test extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//      打印对应的作用域信息
        System.out.println("name1-request---"+request.getAttribute("name1"));
//      获取当前的session对象
        HttpSession session=request.getSession();
//      设置当前会话的信息
        session.setAttribute("name2","session作用域");
//      获取上下文对象
        ServletContext application =request.getServletContext();
        System.out.println("name2-session---"+session.getAttribute("name2"));
        System.out.println("name3-application---"+application.getAttribute("name3"));
        
    }

运行截图:

  • request请求为null,所以不是此次会话

 

第三种:采用重定向的方式

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

简单点了

谢谢大佬

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值