0
点赞
收藏
分享

微信扫一扫

010-servlet入门

陆佃 2021-09-21 阅读 51
JavaJava web

Servlet

Serlvet开发步骤

/**
 *  1、写一个类继承自HttpServet
 *  2、重写父类的doget和dopost
 *  3、注册Servlet(将Servlet用url地址进行映射)
 *
 */
public class TestServlet extends HttpServlet{
    /**
     * 处理get请求的方法
     */
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("处理get请求");

    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("处理post请求");
    }
}

web.xml配置

<!-- TestServlet的映射    注册TestServlet -->  
<!-- 
  servlet-name      给Servlet取名字
  servlet-class       指明是哪一个Serlvet
  -->
<servlet>
    <servlet-name>test</servlet-name>
    <!-- 全限定名    包名+类名 -->
    <servlet-class>com.qf.servlet.TestServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>test</servlet-name>
    <!-- 
       注意: 必须有一个  /    
       http://localhost:8080/JavaWeb01/test
     -->
    <url-pattern>/test</url-pattern>
</servlet-mapping>

测试

启动项目
在地址栏输入   http://localhost:8080/你的工程名/test

Servlet的生命周期

/**
 * 
 * Servlet的生命周期
 * Servlet生命周期的方法
 *     1、init()方法    Servlet初始化          当第一次访问的时候就创建Servlet
 * 2、service()方法  Serlvet处理请求      每次请求都会执行service方法
 * 
 *         service方法会接收到请求,然后根据请求将请求分发给doGet方法或者是doPost方法
 *         一般在开发中都是重写doGet和doPost方法
 * 
 * 3、destory()方法   Servlet被销毁       当tomcat容器销毁的时候Serlvet也会被销毁
 * 
 * 当客户端发送请求达到Servlet的时候,会执行init()方法,创建Servlet的对象。
 * 并且执行对应doget方法或者是doPost方法,如果再次发送请求,只会执行doget方法或者是doPost方法
 * 不会再创建Servlet对象,所以说Servlet是单例的(只有一个实例)
 * 当tomcat服务器停止的时候,Servlet就会被销毁
 * 
 * 启动tomca的时候,就会创建此Servlet的对象
 * <load-on-startup>1</load-on-startup>  
 *
 */

代码实现

public class LifeServlet extends HttpServlet{
    @Override
    public void init() throws ServletException {
        System.out.println("这是Servlet初始化的方法");
    }

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("执行了方法");
    }

    @Override
    public void destroy() {
        System.out.println("这是Servlet销毁的方法");
    }
}

web.xml配置

<servlet>
    <servlet-name>life</servlet-name>
    <servlet-class>com.qf.servlet.LifeServlet</servlet-class>
    <!--  在启动tomca的时候,就会创建此Servlet的对象-->
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>life</servlet-name>
    <url-pattern>/life</url-pattern>
</servlet-mapping>

Serlvet处理响应

在Servlet中处理响应,通过HttpServletResponse对象
通过resp.getWrite()获取输出流
PrintWrite out = resp.getWrite();
out.write("响应的内容");

代码实现

public class DemoServlet extends HttpServlet{

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //给客户端响应     
        PrintWriter out = resp.getWriter();
//        out.write("cxk,hello");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }

}

web.xml配置

<servlet>
    <servlet-name>demo</servlet-name>
    <servlet-class>com.qf.servlet.DemoServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>demo</servlet-name>
    <url-pattern>/demo</url-pattern>
</servlet-mapping>

Serlvet处理请求

在Servlet中处理请求,通过HttpServletRequest对象
方法的参数 表示的是前端页面上的name属性名
通过:req.getParameter("username");获取请求参数

代码实现

login.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登录页面</title>
</head>
<body>
    <!-- 
        访问login.html
        http://localhost:8080/JavaWeb01/login.html
        访问LoginServlet
        http://localhost:8080/JavaWeb01/login
     -->

    <form action="login" method="post">
        用户名<input type="text" name="username">
        密码 <input type="password" name="password">
        <input type="submit" value="登录">
    </form>
</body>
</html>

LoginServlet

public class LoginServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //处理请求 
        //1、获取请求的参数           方法的参数 表示的是前端页面上的name属性名
        String username = req.getParameter("username");
        String password = req.getParameter("password");

        System.out.println(username);
        System.out.println(password);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

web.xml配置文件

<servlet>
    <servlet-name>login</servlet-name>
    <servlet-class>com.qf.servlet.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>login</servlet-name>
    <url-pattern>/login</url-pattern>
</servlet-mapping>

解决乱码

1、get请求  在tomcat8.5以上的版本没有乱码     ISO-8859-1
2、post请求  会乱码
    //解决post请求乱码
    req.setCharacterEncoding("utf-8");

3、响应会乱码
    //处理响应乱码
    resp.setCharacterEncoding("utf-8");
    resp.setContentType("text/html;charset=utf-8");

所以以后再所有的Serlvet中先写上着三行代码
req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");

Servlet的跳转

/**
 *            Servlet中实现跳转
 *             跳转指的是一个页面(Servlet)跳转到另外一个页面(Servlet)
 *             跳转分为两种
 *                 客户端跳转(重定向)       HttpServletResponse        地址栏会发生改变
                                                               不能携带数据
 *                 resp.sendRedirect("welcome.html");
 * 
 *                 服务端跳转(请求转发)  HttpServletRequest       地址栏不会发生改变
                                                                  可以携带数据
 *                 req.getRequestDispatcher("welcome.html").forward(req, resp);
 */
public class TestServlet extends HttpServlet{
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //http://localhost:8080/JavaWeb02/test
        //http://localhost:8080/JavaWeb02/welcome.html


        //重定向到welcome.html页面
        //resp.sendRedirect("welcome.html");

        //Dispatcher 分发、转发
        //req.getRequestDispatcher("welcome.html").forward(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {    
        doGet(req, resp);
    }

}

路径问题

//获取上下文路径    获取项目的路径
req.getContextPath();

路径问题总结:在重定向与转发的路径标准方式
重定向的时候 路径:   req.getContextPath()+"/资源的位置"
转发的时候   路径:   "/资源的位置"
重定向
//   /JavaWeb02/html/welcome.html
resp.sendRedirect(req.getContextPath()+"/welcome.html");

转发
//   /JavaWeb02/test/test/welcome.html
//   这里的 / 斜杠  表示WebContent路径
req.getRequestDispatcher("/welcome.html").forward(req, resp);

举报

相关推荐

0 条评论