Java Web

day12-6_Servlet_JSP

2020-04-07  本文已影响0人  建国同学

新体会

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

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

1.为什么要使用servlet?

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

2.什么是servlet?

  • servlet的职责:
    1.获取请求参数,封装成对象.
    2.调用业务方法,处理请求.
    3.控制界面跳转.(可以跳转到jsp中).

3.准备工作:

| 项目名称(项目的根目录)
        | WEB-INF  (此处存放的资源不能被外界访问)
                | web.xml   (当前web应用的配置信息)
                | classes  (当前web应用的字节码输出路径)
                | lib  (存放第三方jar包) 
        | 静态资源  (html,js,css可供外界访问)

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. 等待下一次访问

四、如何获取请求参数

通用方式:不论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(变量) %> 的简写方式

上一篇 下一篇

猜你喜欢

热点阅读