javaweb-servlet学习笔记(1)

使用servlet方式获取前端数据的方式是request.getParameter(" "),括号里的值就是前端页面name属性的值。比如:

login.html代码是:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>登录页面</title>
</head>
<body>

    <form action="login" method="post">
        账号: <input type="text" name="name"> <br> 
        密码: <input type="password" name="password"> <br> 
        <input type="submit" value="登录">
    </form>

</body>
</html>

那么后端获取name和password的代码是:

package com.test.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class LoginServlet extends HttpServlet {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    public void doPost(HttpServletRequest req, HttpServletResponse res) throws IOException {

        String name = req.getParameter("name");
        String password = req.getParameter("password");
        String html = null;

        if (name.equals("1350023267") && password.equals("1350023267")) {
            html = "<h1 style='color:green'>success</h1>";
        } else {
            html = "<h1 style='color:red'>failed</h1>";
        }

        PrintWriter pw = res.getWriter();
        pw.println(html);

    }
}

 

这里是需要重新配置web.xml的:

<?xml version="1.0" encoding="UTF-8"?>
<web-app>
    <servlet>
        <servlet-name>HelloServlet</servlet-name>
        <servlet-class>com.test.servlet.HelloServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>HelloServlet</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
    <servlet>
        <servlet-name>LoginServlet</servlet-name>
        <servlet-class>com.test.servlet.LoginServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>LoginServlet</servlet-name>
        <url-pattern>/login</url-pattern>
    </servlet-mapping>
</web-app>

这里遇到的几个小问题是

1)比较name和password的问题:要用.equals比较。

2)新的LoginServlet必须重新配置web.xml文件。

3)当浏览器使用get方式提交数据的时候,servlet需要提供doGet()方法。当浏览器使用post方式提交数据的时候,servlet需要提供doPost()方法。

4)LoginServlet继承了HttpServlet,同时也继承了一个方法 service()。实际上,在执行doGet()或者doPost()之前,都会先执行service()。由service()方法进行判断,到底该调用doGet()还是doPost()。可以发现,service(), doGet(), doPost() 三种方式的参数列表都是一样的。所以,有时候也会直接重写service()方法,在其中提供相应的服务,就不用区分到底是get还是post了。比如把前面的登录的LoginServlet,改为提供service方法,也可以达到相同的效果。

5)关于中文乱码的问题,解决方案如下:

  在html页面添加如下代码:并且form提交的method修改为post。

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

  修改servlet,把下边这句话放在request.getParameter()之前。

request.setCharacterEncoding("UTF-8"); 

6)如果登录以后要跳转html页面的话,就要一下方式:

if (name.equals("1350023267") && password.equals("1350023267")) {
//            html = "<h1 style='color:green'>success</h1>";
            /*
             * 服务端跳转,也叫请求转发
             */
            req.getRequestDispatcher("success.html").forward(req, res);
        } else {
//            html = "<h1 style='color:red'>failed</h1>";
            /*
             * 客户端跳转,也叫重定向
             */
            res.sendRedirect("failed.html");
        }

重定向是由servlet给浏览器发一条消息,由浏览器再访问页面。

7)关于自启动的问题:

有的时候会有这样的业务需求: tomcat一启动,就需要执行一些初始化的代码,比如校验数据库的完整性等。但是Servlet的生命周期是在用户访问浏览器对应的路径开始的。如果没有用户的第一次访问,就无法执行相关代码。这个时候,就需要Servlet实现自启动即,伴随着tomcat的启动,自动启动初始化,在初始化方法init()中,就可以进行一些业务代码的工作了。自启动只需要在web.xml中在需要的Servlet中加入下面这句话就ok了。

<load-on-startup>10</load-on-startup>

比如:

    <servlet>
        <servlet-name>HelloServlet</servlet-name>
        <servlet-class>com.test.servlet.HelloServlet</servlet-class>
        <load-on-startup>10</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>HelloServlet</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>    

 如果有多个Servlet都配置了自动启动,数字越小,启动的优先级越高(取值范围是1-99)。

 

转载于:https://www.cnblogs.com/gaoyl520/p/9675669.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值