JavaWeb笔记

HTTP

请求行

(1)请求方式

(2)资源路径

(3)HTTP版本

GET /index.html HTTP/1.1

响应状态行

(1)HTTP版本

(2)一个表示成功或错误的整数代码

由三位数字组成,表示请求是否被理解或被满足,响应状态码的第一个数字定义了响应的类别

(3)对状态码进行描述的文字信息

HTTP/1.1 200 OK

响应消息头

Servlet

Servlet是运行在Web服务器端的<u>java应用程序</u>,Servlet对象主要封装了<u>对HTTP请求的处理</u>,并且它的运行需要Servlet容器的支持

Servlet由<u>Servlet容器</u>提供,Servlet容器是指提供了Servlet功能的服务器,Servlet容器将Servlet动态地加载到服务器上。与HTTP协议相关的Servlet使用<u>HTTP请求</u>和<u>HTTP响应与客户端进行交互</u>。因此Servlet容器支持所有HTTP协议的请求和响应。

Servlet接口

Servlet就是一种实现了Servlet接口的类,由Web容器负责创建并调用,用于接收和响应用户的请求

init(), service(),destroy()这三个方法可以表现Servlet的生命周期,他们会在某个特定的时刻被调用,Servlet容器指的是Web服务器

Servlet接口两个默认的实现类

GenericServlet

抽象类,提供了部分实现,并没有实现HTTP请求处理

HttpServlet

HttpServlet是GenericServlet的子类,继承了所有方法,并且为HTT P请求中的POST,GET等类型提供了具体的操作方法。

Servlet开发

Servlet的配置

(1)通过Web应用的配置文件web.xml来完成配置和使用

//xml配置文件中
<servlet>
        <servlet-name>ServletDemo2</servlet-name>
        <servlet-class>com.it.servlet.ServletDemo2</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>ServletDemo2</servlet-name>
        <url-pattern>/servletDemo2</url-pattern>
    </servlet-mapping>
public class ServletDemo2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.getWriter().write("aaaaaaaaaaaa");

    }

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

(2)@WebServlet注解

生命周期

(1)初始化阶段

当客户端向Servlet容器发出HTTP请求访问Servlet时,Servlet容器首先会解析请求,检查内存中是否已经有了该Servlet对象,有就直接使用,没有就创建Servlet实例对象,调用init()方法完成Servlet的初始化,在Servlet生命周期中,init()方法只被调用一次。

(2)运行阶段

(3)销毁阶段

ServletConfig接口

ServletContext接口

获取Web应用程序的初始化参数

当Servlet容器启动时,会为每个Web应用创建一个唯一的ServletContext对象代表当前Web应用,ServletContext对象不仅封装了当前Web应用的所有信息,而且实现了多个Servlet之间的数据共享

<context-param>
        <param-name>companyName</param-name>
        <param-value>itcast</param-value>
    </context-param>
    <context-param>
        <param-name>city</param-name>
        <param-value>beijing</param-value>
    </context-param>
    <context-param>
        <param-name>course</param-name>
        <param-value>java</param-value>
    </context-param>
//获取servletContext对象
        ServletContext servletContext = this.getServletContext();

        String companyName = servletContext.getInitParameter("companyName");
        String city = servletContext.getInitParameter("city");
        resp.getWriter().write(companyName + " " + city);
ServletContext servletContext = this.getServletContext();
Enumeration<String> names = servletContext.getInitParameterNames();
        while (names.hasMoreElements()){
            String name = names.nextElement();
            String value = servletContext.getInitParameter(name);
            resp.getWriter().write(value);
        }

实现多个Servlet对象共享数据

读取Web应用下的资源文件

1.getResourceAsStream()
        //获取servletContext对象
        ServletContext servletContext = this.getServletContext();

        InputStream is = servletContext.getResourceAsStream("/WEB-INF/itcast.properties");

        Properties pro = new Properties();
        pro.load(is);
        String company = pro.getProperty("Company");
        String address = pro.getProperty("Address");
        resp.getWriter().write(company + " " + address);
2.getRealPath()
        //获取servletContext对象
        ServletContext servletContext = this.getServletContext();

        String realPath = servletContext.getRealPath("/WEB-INF/itcast.properties");
        FileInputStream is = new FileInputStream(realPath);

        Properties pro = new Properties();
        pro.load(is);
        String company = pro.getProperty("Company");
        String address = pro.getProperty("Address");
        resp.getWriter().write(company + " " + address);

三个发送状态码的方法

发送响应消息体相关的方法

1.getOutputStream()

ServletOutputStream os = resp.getOutputStream();
        String str = "hello";
        os.write(str.getBytes());
        os.print(str);

2.getWriter()

PrintWriter writer = resp.getWriter();
        writer.write("hello");

请求重定向

重定向含义

指的是Web服务器接收到客户端的请求后,可能由于某些条件限制,不能访问当前请求URL所指向的Web资源,而是指定了一个新的资源路径,让客户端重新发送请求

解决响应中文乱码问题

1

resp.setCharacterEncoding("utf-8");
        resp.setHeader("Content-Type","text/html;charset=utf-8");

2

        resp.setContentType("text/html;charset=utf-8");

获取请求行信息

resp.getxxxxx();

获取请求头信息

请求转发

getRequestDispatcher()方法

Servlet的跳转要通过RequestDispatcher接口的实例对象实现,HttpServletRequest接口提供了该方法用于获取RequestDispatcher对象

forword()方法

用于将请求从一个Servlet对象传递给另一个Web资源

获取请求参数

Request对象传递数据

req.setAttribute("username","张三");
req.getAttribute("username");
req.removeAttribute("username");

解决请求参数中的中文乱码问题

//处理请求参数的中文乱码问题
req.setCharacterEncoding("utf-8");

会话技术

在Web开发中,服务器跟踪用户信息的计数称为会话技术。

Cookie类

构造方法

public Cookie(String name,String value){
    //name指定Cookie的名称 value指定Cookie的值
}

Session类

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容