Servlet应用总结

简介

Servlet运行过程

  1. Web浏览器    发出HTTP请求  到Web容器
  2. Web容器  首次访问创建目标Servlet  Servlet
  3. Web容器  创建请求和响应对象      request, response
  4. Web容器    调用Servlet方法    Servlet.service(req,resp)
  5. service(req,resp)获取请求信息,并把响应写入响应信息返回给Web容器
  6. Web容器  发出HTTP响应    Web浏览器

Servlet实现类

Servlet接口是SUN公司定义了两个默认的实现类;分别是GenericServlet, HTTPServlet;

  1. HTTPServlet 是只能够处理HTTP请求的servlet,是在原有的Servlet接口上添加了一些与HTTP协议的处理办法,他比Servlet接口的功能更为强大,因此开发人员在编写Servlet时,通常是继承这个类,而避免直接去实现Servlet接口;
  2. HTTPServlet在实现Servlet接口时,重写了servlet方法,该方法体内的代码会自动的判断用户的请求方式。如为post请求时,则调用dopost方法。如GET方法,则调用HTTPServlet的doGet方法。因此,开发人员在编写Servlet时,通常只需要重写doGet或doPost方法,而不是去重写service方法;

使用IDE开发Servlet

  1. 准备Servlet需要的jar包;
  2. 在IDEA中新建一个Web项目;
  3. 新建一个Servlet;
  4. 编写代码;
  5. 配置web.xml中Servlet映射的mapping  URL
  6. 启动Tomcat服务器;
  7. 访问servlet编写的网页;

一般情况下都会指定一个URL,一个URL对应一个请求;

Response请求

重定向

将这个请求,转换到另一个地址;

例如,当请求:http://localhost:8080/servlet01/dasd/aa.do,就会跳转到百度首页;

ServletContext

通过servletContext对象实现数据共享:是通过this获得ServletContext,实现数据的共享;

通过servletContext对象获取网站的配置文件

1.新建一个properties文件

driver=com.mysql.jdbc.Driver
username=root
password=123456
url=jdbc:mysql://localhost:3306/smbms

2.编写servlet类

package com.zhang.servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;

//读取properties配置文件
public class ServletDemo03 extends HttpServlet {

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

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //读取配置文件

        //1.获得配置文件的路径
        String realPath = this.getServletContext().getRealPath("/WEB-INF/classes/resources/database.properties");
        System.out.println("取得的路径为:"+realPath);

        Properties properties = new Properties();
        FileInputStream is = new FileInputStream(realPath);

        properties.load(is);//把文件流加载到配置文件的对象中;

        String driver = properties.getProperty("driver");
        String username = properties.getProperty("username");
        String password = properties.getProperty("password");
        String url = properties.getProperty("url");


        //响应到网页
        resp.getWriter().println(driver);
        resp.getWriter().println(username);
        resp.getWriter().println(password);
        resp.getWriter().println(url);

        //=======================================
        System.out.println(driver);
        System.out.println(username);
        System.out.println(password);
        System.out.println(url);



    }
}

3.配置web.xml

<servlet>
    <servlet-name>Demo</servlet-name>
    <servlet-class>com.zhang.servlet.ServletDemo</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>Demo</servlet-name>
    <url-pattern>/test</url-pattern>
</servlet-mapping>

4.访问网页查看

localhost:8080/demo/test

Request请求

jsp获取项目的路径

${pageContext.request.contextPath}

Request对象应用

package com.zhang.servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;


public class RequestDemo extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //查看request对象的方式
        System.out.println(request.getContextPath()); //获得web项目路径
        System.out.println(request.getRequestURI()); //请求的URL路径
        //Remote 远程
        System.out.println(request.getRemoteUser()); //获得远程的用户名
        System.out.println(request.getRequestedSessionId()); //获得SessionId;
        System.out.println(request.getServletPath()); //请求servlet的url
        System.out.println(request.getLocalAddr()); //获得本地地址  防火墙
        System.out.println(request.getLocalName()); //获得本地名字
        System.out.println(request.getLocalPort()); //获得访问的端口号

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request,response);
    }
}

实例:

Request对象接收前端用户提交的参数

1.编写前端注册页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>注册</title>
</head>
<body>


<%--JSP的注释--%>


<%--Form表单
    action:代表要提交的路径,表单要提交到哪里 ,可以提交到一个Servlet
        //提交到Servlet需要,获取到Web项目的路径下的Servlet
    method: 提交表单的方式
--%>
<h1>注册</h1>

<form action="${pageContext.request.contextPath}/r2" method="post">

    <p>用户名:<input type="text" name="username"></p>
    <p>密码:<input type="password" name="password"></p>

    <p>
        <input type="submit">
        <input type="reset">
    </p>

</form>

</body>
</html>

2.处理前端提交的Servlet信息

package com.zhang.servlet;


import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

//处理前端提交过来的数据
public class RequestDemo02 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req,resp);
    }

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

        //通过HttpServletRequest获取前端用户提交的信息
        //req.getParameterValues(); 获得前端传递的控件信息,通过控件的name;但是可以接受多个参数的控件,比如(多选框....)
        //req.getParameter(); 获得前端传递的控件信息,通过控件的name;

        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");

        String username = req.getParameter("username");
        String password = req.getParameter("password");

        //连接数据库,比较数据库中的信息是否匹配

        if (username.equals("admin")&&password.equals("1234567")){
            System.out.println("登录成功!"); //跳转到成功页面
        }else {
            System.out.println("登录失败!"); //提示重新注册
        }

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


    }
}

3.配置web.xml对应的文件

<servlet>
        <servlet-name>RequsetDemo</servlet-name>
        <servlet-class>com.zhang.servlet.RequestDemo</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>RequsetDemo</servlet-name>
        <url-pattern>/test</url-pattern>
    </servlet-mapping>

4.提交测试

转发和重定向的区别(面试题):

重定向:服务器通知客户端,去请求另外一个地址(客户端行为);重定向的地址栏会变而且不能携带参数;

转发:服务器自己转发服务器上的另外一个请求(服务器行为);转发的地址栏不会变,而且可以携带参数;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值