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类

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,544评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,430评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,764评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,193评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,216评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,182评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,063评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,917评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,329评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,543评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,722评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,425评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,019评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,671评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,825评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,729评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,614评论 2 353

推荐阅读更多精彩内容