Servlet 02

Servlet 02


Servlet 生命周期 *****

一个Servlet对象 , 从创建到被内存释放的过程, 我们称其为Servlet的生命周期!

Servlet创建时机:
    默认情况下, 当用户第一次请求此Servlet时, Servlet被创建

Servlet销毁时机:
    服务器关闭 或 应用被卸载时关闭

在HttpServlet类中, 生命周期存在三个方法的体现:

    1.  init方法, 当Servlet对象被创建后, 会调用init方法, 用于初始化一些资源 !

    2.  service方法 , 当被调用时, 表示对象正在处理请求, 准备响应!

    3.  destroy方法 , 当Servlet即将被释放时, 调用此方法 ,用于释放资源,结束子线程等等操作 !

修改Servlet 启动时机 (类似单例模式的懒汉变饿汉)

在web.xml中的 servlet节点中 加入子节点:

  <load-on-startup>填入整数</load-on-startup>

整数的含义:

    -   负数      :   默认值, 表示第一次被访问时, 创建对象

    -   正数      :   表示服务器启动时, 就创建对象, 值越小优先级越高,  相同值按照web.xml自上至下顺序加载 !

    -   0       :   与正数相同, 表示值为max的正数 (服务器启动时创建 ,但是是最后一个创建)

常见的URL后缀:

.html       网页文件
.php        PHP动态网页文件
.jsp        Java动态网页文件
.do         struts1 建议使用的URL结尾
.action     struts2 建议使用的URL结尾

doGet方法 与 doPost方法

与service方法,  作用相同:
    当用户请求为GET请求时, 执行doGET方法
    当用户请求为post请求时, 执行doPost方法

常见的请求方式

超链接点击   -   GET请求
网址中输入   -   GET请求
JS中window.location操作  - GET请求
表单提交method=GET  - GET请求
ajax请求方式设置为GET  - GET请求

------------------------------------------------

表单提交method=POST -   POST请求
ajax请求方式设置为POST -   POST请求

如何接收 请求中的参数 ****

1.  接收单个参数
    String value = request.getParameter(String key);

2.  接收一组相同key的参数 
    String[] values = request.getParameterValues(String key);


案例:
HTML部分:
    <h3>用户登录</h3>
    <form action="s4.do" method="POST">
        <input placeholder="请输入账号" name="uname"><br><br>
        <input placeholder="请输入密码" name="upass" type="password"><br><br>
        选择你的性别:
        <p>
            <input type="checkbox" value="1" name="sex"> 男
            <input type="checkbox" value="2" name="sex"> 女
            <input type="checkbox" value="3" name="sex"> 妖
            <input type="checkbox" value="4" name="sex"> 奇男
        </p>
        <input type="submit" value="登录">
    </form>
Java部分:
@WebServlet("/s4.do")
public class day_02 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response)         
    throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        //获取账号
        String uname = request.getParameter("uname");
        //获取密码
        String upass = request.getParameter("upass");
        //获取一组性别
        String[] sexs = request.getParameterValues("sex");
        System.out.println("账号:"+uname);
        System.out.println("密码:"+upass);
        System.out.println("性别组:"+Arrays.toString(sexs));
        if("qinan".equals(uname)) {
            //登录失败
            response.getWriter().append("很遗憾, 你的账号因为涉嫌传播不良信息 , 被拉黑了 ! <a href='http://shuidianshuisb.com'>不服点这里</a> ");
        }else {
            //登录成功
            response.getWriter().append("恭喜你, "+uname+"登陆成功了");
        }
}

乱码问题

请求参数乱码问题: ***

tomcat8版本的新特性:

    在tomcat8版本, 官方修复了GET请求乱码的问题, GET请求编码更改为了自适应, 适应URL编码 !

    POST请求 因为可以很方便的对于请求体进行编码设置, 所以没有做任何的更新 !

出现原因:
    浏览器 与 tomcat 使用了不同的编码, 导致了乱码的问题发生 !

解决方案1:  
    适用于tomcat所有版本, 可以用于GET请求乱码问题, POST请求乱码问题 .
    解决的原理:  将乱码的数据, 打碎后, 重新按照正确编码组成 !

    格式:
        步骤1.    将乱码文字 , 按照ISO-8859-1编码, 转换为字节数组
            byte[] bytes = 乱码文字.getBytes("ISO-8859-1");
        步骤2.    将字节数组, 按照UTF-8编码重新组装 !
            String text = new String(bytes,"UTF-8");

解决方案2: 
    仅适用于POST请求的乱码问题, 用于设置请求体的编码 !

    格式:
        request.setCharacterEncoding("UTF-8");//代码必须出现在接收参数之前

响应时, 乱码的问题 ***

方式1.
    设置响应的内容类型为网页, 设置响应的内容编码为UTF-8
    格式: response.setContentType("text/html;charset=utf-8"); 

方式2. ***
    设置响应的内容类型为UTF-8 (注意: 可能通过浏览器打开 ,依然为乱码,原因是浏览器无法将其正确解析)
    格式: response.setCharacterEncoding("UTF-8");
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值