7.JavaWeb

一、基本概念

        Java Web,是用Java技术来解决相关web互联网领域的技术栈。静态web资源开发技术:HTML、CSS。动态web资源开发技术:JavaScript、JSP/Servlet、ASP、PHP等。在Java中,动态web资源开发技术统称为Java Web。

二、HTTP

        超文本传输协议(Hyper Text Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。

        HTTP请求:请求行、请求头、请求体。主要请求方式为GET和POST。

        HTTP响应:响应行、响应头、响应体。常见响应状态码有:200(请求成功)、302(重定向)、404(请求地址错误)、500(服务器错误)。

三、Tomcat服务器

        Tomcat 服务器是一个免费的开放源代码的应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。

        在maven项目中,静态资源放在webapp目录下,web应用目录结构为:

src
 |-main
    |-java
    |-resources
    |-webapp
        |-WEB-INF
             |-web.xml
 |-test
    |-java

        maven导入tomcat7插件:

<plugin>
    <groupId>org.apache.tomcat.maven</groupId>
    <artifactId>tomcat7-maven-plugin</artifactId>
    <version>2.2</version>
</plugin>

四、Servlet

        Java Servlet 是运行在 web 服务器或应用服务器上的程序,它是作为来自 web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。

        导入依赖:

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.1</version>
    <scope>provided</scope>
</dependency>

        Servlet 生命周期可被定义为从创建直到毁灭的整个过程。以下是 Servlet 遵循的过程:

  • Servlet 初始化后调用 init () 方法。
  • Servlet 调用 service() 方法来处理客户端的请求。
  • Servlet 销毁前调用 destroy() 方法。
  • 最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。

        Servlet 基本方法:

public class MyServlet implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        
    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {

    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {

    }
}

        HttpServlet 是服务 HTTP 请求并实现 javax.servlet.Servlet 接口的 Java 类。web 应用程序开发人员通常编写 Servlet 来扩展 javax.servlet.http.HttpServlet,并实现 Servlet 接口的抽象类专门用来处理 HTTP 请求。

//通知web容器当客户端访问哪些路径时,调用该类处理请求
@WebServlet("/hello")
public class MyServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doGet(req, resp);
    }

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

       HttpServletRequest 接口继承自 ServletRequest 接口,其主要作用是封装 HTTP 请求消息。由于 HTTP 请求消息分为请求行、请求消息头和请求消息体三部分。因此,在 HttpServletRequest 接口中定义了获取请求行、请求头和请求消息体的相关方法。

//通知web容器当客户端访问哪些路径时,调用该类处理请求
@WebServlet("/hello")
public class MyServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取当前web容器对象
        ServletContext servletContext = req.getServletContext();
        //设置与获取自定义属性,属性在不同servlet间传递
        req.setAttribute("",new Object());
        Object attribute = req.getAttribute("");
        req.removeAttribute("");

        //获取请求方法
        String method = req.getMethod();
        //获取url
        StringBuffer requestURL = req.getRequestURL();
        //获取uri
        String requestURI = req.getRequestURI();

        //获取请求头
        String header = req.getHeader("");
        //获取请求主体的MIME类型
        String contentType = req.getContentType();
        //获取客户端ip
        String remoteAddr = req.getRemoteAddr();
        //设置读取post请求体时的编码
        req.setCharacterEncoding("");
        //获取请求主体中使用的字符编码的名称
        String characterEncoding = req.getCharacterEncoding();

        //获取请求参数
        String parameter = req.getParameter("");
        //获取字符输入流
        BufferedReader reader = req.getReader();
        //获取字节输入流
        ServletInputStream inputStream = req.getInputStream();
        
        //请求转发
        req.getRequestDispatcher("/path").forward(req,resp);

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doGet(req, resp);//使用通用方法获取参数
    }
}

        HttpServletResponse 继承自 ServletResponse 接口。HttpServletResponse 对象专门用来封装 HTTP 响应消息,简称 response 对象。Servlet 容器会针对每次请求创建一个 response 对象,并把它作为参数传递给 Servlet 的 service 方法。Servlet 处理请求后,会将响应信息封装到 response 对象中,并由容器解析后返回给客户端。

//通知web容器当客户端访问哪些路径时,调用该类处理请求
@WebServlet("/hello")
public class MyServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //设置响应状态码
        resp.setStatus(200);

        //设置响应头
        resp.setHeader("","");
        //设置输出内容的MIME类型
        resp.setContentType("");
        //设置输出内容使用的字符编码
        resp.setCharacterEncoding("");

        //获取字符输出流
        PrintWriter writer = resp.getWriter();
        //获取字节输出流
        ServletOutputStream outputStream = resp.getOutputStream();

        //重定向
        resp.sendRedirect("");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doGet(req, resp);//使用通用方法获取参数
    }
}

        解决中文乱码:

new String(parameter.getBytes(StandardCharsets.ISO_8859_1),StandardCharsets.UTF_8);

五、会话跟踪

        Cookie 属于客户端会话技术,它是服务器发送给浏览器的小段文本信息,存储在客户端浏览器的内存中或硬盘上。当浏览器保存了 Cookie 后,每次访问服务器,都会在 HTTP 请求头中将这个 Cookie 回传给服务器。

//通知web容器当客户端访问哪些路径时,调用该类处理请求
@WebServlet("/hello")
public class MyServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        Cookie cookie=new Cookie("","");
        cookie.setMaxAge(60*60*24);
        
        //发送cookie(浏览器关闭即失效,发送中文需要编码)
        resp.addCookie(cookie);

        //获取cookie
        Cookie[] cookies = req.getCookies();


    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doGet(req, resp);//使用通用方法获取参数
    }
}

        Session 是服务器端会话技术。当浏览器访问 web 服务器的资源时,服务器可以为每个用户浏览器创建一个 Session 对象,每个浏览器独占一个 Session 对象。

//通知web容器当客户端访问哪些路径时,调用该类处理请求
@WebServlet("/hello")
public class MyServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        HttpSession session=req.getSession();

        //添加数据
        session.setAttribute("",new Object());
        //获取数据
        session.getAttribute("");
        //删除数据
        session.removeAttribute("");
        
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doGet(req, resp);//使用通用方法获取参数
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值