day12-6_Servlet_JSP

新体会

  • ip区分主机,端口号是用来区分同一台主机上的不同的应用程序
  • js是跑在浏览器,进行解析的,servlet是跑在服务器,tomcat上的
  • ServletConfig对象:
    1.首先,服务器Tomcat底层,把配置文件里面的servlet信息封装在servletconfig对象里面
    2.在类中的初始方法中获取了servletconfig的对象信息,并把它赋予给我们的成员变量从而达到类中共享的目的
    3.在需要servletconfig对象信息的方法中,直接利用成员变量和相应的get方法读取,即可获得想要的信息
  • 浏览器ctrl+ F5清除当前缓存

一、如何定义一个Servlet(几种方式)

1.为什么要使用servlet?

将服务器的数据,动态的给界面上进行显示

2.什么是servlet?

  • 1.servlet是用于生成动态的web的组件.是javaEE的一种规范(如何自定义一个Servlet类, Tomcat如何来管理我们的Servlet).
  • 2.servlet也是服务器的一种资源,可以供外界去访问.
  • 3.静态资源可以直接返回给浏览器,但是如果要访问动态的资源,需要servlet(java的一个类)去执行某些方法.再给浏览器返回.
  • servlet的职责:
    1.获取请求参数,封装成对象.
    2.调用业务方法,处理请求.
    3.控制界面跳转.(可以跳转到jsp中).

3.准备工作:

  • 搭建规范的web项目结构.
| 项目名称(项目的根目录)
        | WEB-INF  (此处存放的资源不能被外界访问)
                | web.xml   (当前web应用的配置信息)
                | classes  (当前web应用的字节码输出路径)
                | lib  (存放第三方jar包) 
        | 静态资源  (html,js,css可供外界访问)
  • 添加依赖
    导入jar包(tomcat/lib/servlet-api.jar
  • 部署应用
    <Context docBase="项目真实地址" path="项目虚拟地址">

4.定义Servlet(方式一)

  1. 定义一个类,实现javax.servlet.Servlet接口.复写接口中的抽象方法
  2. 然后配置web.xml文件
<!--1.通知Tomcat,服务器来管理咱们自定义的Servlet类 -->
    <servlet>
                    <!-- 这里一般写简单名字 -->
        <servlet-name>HelloServlet</servlet-name>
        <!--2.告诉Tomcat 咱们自定义的类是哪个类 -->
        <servlet-class>cn.wolfcode._01_hello.HelloServlet</servlet-class>
        <!-- 给定初始化参数 -->
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
    </servlet>
    <!-- 3.给自定义的Servlet配置一个浏览器可以访问的地址或叫url -->
    <servlet-mapping>
        <servlet-name>HelloServlet</servlet-name>
        <!-- 在浏览器地址栏里访问的路径 -->
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>

5.定义Servlet(方式二)

1.写一个类去继承javax.servet.GenericServlet类(适配器模式),复写service方法即可

注意:此使处理的请求和响应,都不是专门针对HTTP协议的.如果想要调用真实类型的方法,强转即可.
ServletRequest 》》》HttpSeruletRequest
Serule tResponse 》》》HttpServletResponse

  1. 然后配置web.xml文件

6.定义Servlet(方式三)

  1. 写一个类去继承javax.servlet.http.HttpServlet类,
  2. 复写参数带着Http开头的service方法
  3. 然后配置web.xml文件

二、如何将Servlet交给Tomcat管理(几种方式)

1.方式一

  1. 把servlet编译好的.class文件放在WEB-INF目录下的classes文件夹中(window->show view->Navigator调整到真实的目录结构下)
  2. 在web.xml文件里配置servlet
    <servlet-name> 这个是我们要注册servlet的名字,一般跟Servlet类名有关
    <servlet-class> 这个就是指向我们要注册的servlet 的类地址, 要带包路径
    <servlet-name> 这个要与前面写的servlet一致
    <url-pattern> 配置这个组件的访问路径

2.方式二

把项目复制到tomcat服务器

三、理解Servlet的执行流程

1.servlet的生命周期

1.第一次访问时,服务器创建对象并调用初始化方法(一定要有一个公共的构造方法)
2.请求一次调用一次service()服务方法
3.服务器正常关闭才会执行destory()方法,扫尾的操作(一般不做,执行不到,所以不写代码)


Servlet的执行流程

2.执行流程

  1. 解析url,得出上下文路径,资源名
  2. 去server.xml里去找对应上下文路径的web应用
    <Context docBase="C:\Users\LiChina\Desktop\WolfCode\codeWork2\day12_06\webapp" path="/"/>
  3. 在对应的web项目中去找到web.xml文件,然后找到资源名对应配置的url-pattern的映射,再找到映射的servlet对应的全限定名资源
  4. 判断是否是第一次访问,是则通过全限定名,创建对象,并调用init()初始化方法,否则直接执行service()方法(一定要有一个公共的构造方法)
  5. 请求一次调用一次service()服务方法,通过自己编写的业务逻辑,执行到浏览器
  6. 等待下一次访问

四、如何获取请求参数

  • Request对象获取请求参数

通用方式:不论get还是post请求方式都可以使用下列方式来获取请求参数

  1. String getParameter(String name): 通过参数名,获取参数值.
    String name是你web.xml文件中init-param初始化参数标签里的param-name对应的值
    <servlet>
        <servlet-name>ServletConfigDemoServlet</servlet-name>
        <servlet-class>cn.wolfcode._02_servletconfig.ServletConfigDemoServlet</servlet-class>
        <!-- 给定初始化参数 -->
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
            <param-name>username</param-name>
            <param-value>小米</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>ServletConfigDemoServlet</servlet-name>
        <url-pattern>/config</url-pattern>
    </servlet-mapping>

2.String[] getParameterValues(String name):根据参数名称获取参数值的数组
3.Enumeration getParameterNames():获取所有请求的参数名称
4.Map<String,String[]> getParameterMap():获取所有参数的map集合

五、如何给浏览器响应信息

方式一、使用ServletResponse对象

  1. 在servlet类的service()方法中使用一下方法:
    ServletOutputStream getOutputStream() : 获取字节输出流. 在文件下载中使用
    java.io.PrintWriter getWriter() :获取字符输出流

注意:上面两个方法,在同一个时刻,只能使用一个,不能共存

  1. 使用输出流out.println("html内容"),输出到浏览器页面

方式二、使用jsp

为了遵守责任分离原则:谁擅长就让谁去做,使用jsp帮servlet绘制到界面

编写JSP的Java脚本表达式:
<%=表达式 %>
(实际上就是调用输出流打印到页面上) out.print(表达式)
<%=变量 %> 是 <% out.println(变量) %> 的简写方式

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

推荐阅读更多精彩内容