新体会
- 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(方式一)
- 定义一个类,实现javax.servlet.Servlet接口.复写接口中的抽象方法
- 然后配置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
- 然后配置web.xml文件
6.定义Servlet(方式三)
- 写一个类去继承javax.servlet.http.HttpServlet类,
- 复写参数带着Http开头的service方法
- 然后配置web.xml文件
二、如何将Servlet交给Tomcat管理(几种方式)
1.方式一
- 把servlet编译好的.class文件放在WEB-INF目录下的classes文件夹中(window->show view->Navigator调整到真实的目录结构下)
- 在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()方法,扫尾的操作(一般不做,执行不到,所以不写代码)
2.执行流程
- 解析url,得出上下文路径,资源名
- 去server.xml里去找对应上下文路径的web应用
<Context docBase="C:\Users\LiChina\Desktop\WolfCode\codeWork2\day12_06\webapp" path="/"/>
- 在对应的web项目中去找到web.xml文件,然后找到资源名对应配置的url-pattern的映射,再找到映射的servlet对应的全限定名资源
- 判断是否是第一次访问,是则通过全限定名,创建对象,并调用init()初始化方法,否则直接执行service()方法(一定要有一个公共的构造方法)
- 请求一次调用一次service()服务方法,通过自己编写的业务逻辑,执行到浏览器
- 等待下一次访问
四、如何获取请求参数
- Request对象获取请求参数
通用方式:不论get还是post请求方式都可以使用下列方式来获取请求参数
- 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对象
- 在servlet类的service()方法中使用一下方法:
ServletOutputStream getOutputStream() : 获取字节输出流. 在文件下载中使用
java.io.PrintWriter getWriter() :获取字符输出流
注意:上面两个方法,在同一个时刻,只能使用一个,不能共存
- 使用输出流out.println("html内容"),输出到浏览器页面
方式二、使用jsp
为了遵守责任分离原则:谁擅长就让谁去做,使用jsp帮servlet绘制到界面
编写JSP的Java脚本表达式:
<%=表达式 %>
(实际上就是调用输出流打印到页面上) out.print(表达式)
<%=变量 %> 是 <% out.println(变量) %> 的简写方式