一、web资源
在http协议当中,规定了请求和响应双方, 客户端和服务器端。与web相关的资源。
- 静态资源
html 、 js、 css
- 动态资源
servlet/jsp
二、Servlet介绍+创建tomcat配置
简单使用Web工程
切换工作空间(左上角文件–切换工作空间)
自动打开然后需要配置Tomcat,点开右上角透视图(如图)–JAVAEE
- 点击下边输出框的Servers–提示一行NO….–然后空白位置右键new
- Apache–tomcat版本7.0
- 选定tomcat–下面的Servers里面的tomcat7–右键open–中间Server Locations选中第二个
- 新建一个web项目–右键new–other–Web–Dynamic Web Project
- 新建一个名字HelloServlet–Dynamic web module version更改为2.5
- 在HelloServlet–WebContent新建名为index.html文件
- index里面写一个h标签内容–点run as–选自己的tomcat–稍等一会(提前不要打开tomcat)
- 可以通过访问网页展示
1
| http://localhost:8080/HelloServlet/index.html
|
三、Servlet操作代码
- 在前面的基础上Java Resources–src–新建HelloServer类(实现Server接口)–要实现五个方法(只用改service方法)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| package server; import java.io.IOException; import javax.servlet.Servlet; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; public class HelloServer implements Servlet{ public static void main(String[] args) { }
@Override public void destroy() {}
@Override public ServletConfig getServletConfig() { return null; }
@Override public String getServletInfo() { return null; }
@Override public void init(ServletConfig arg0) throws ServletException {} @Override public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException { System.out.println("helloServlet..."); } }
|
- 配置Servlet:告诉服务器我们的应用要这么写个servlet
点开WebContent–WFB-INF–lib–web.xml–点击下面框的source更改–然后重启tomcat
1 2 3 4 5 6 7 8 9 10 11
| <!--1.向tomcat报告 我有一个XXX类,路径是XXX--> <servlet> <!--提示报错之后选最后一个servlet-name--> <servlet-name>HelloServer</servlet-name> <!--提示报错之后选最后一个servlet-class--> <servlet-class>server.HelloServer</servlet-class> <!--需要写包.类名--> </servlet>
<!--2.注册servlet的映射,servletName:找到上面注册的具体servlet,url-pattern:在地址栏上的path--> <servlet-mapping> <!--提示报错之后选最后一个servlet-name--> <servlet-name>HelloServer</servlet-name> <url-pattern>/a</url-pattern> <!--一定要记得写/ 实在项目名后写的地址--> </servlet-mapping>
|
- 地址栏输入–http://localhost:8080/项目名称(HelloServlet)/a
执行框会显示类的结果:
四、Servlet 执行过程
执行分析过程:tomcat应用(localhost:8080)–找到项目(HelloServlet)–找到web.xml–找下面的url-pattern的/a–找到servlet-mapping中的servlet-name(类名)–找到上面的servlet-class 然后开始创建该类的实例–实现service方法
五、Servlet的通用写法
Servlet (接口)
|
|
GenericServlet
|
|
HttpServlet (用于处理http的请求)
- 定义一个类—继承HttpServlet—复写doGet 和 doPost
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| package server; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class shixian extends HttpServlet { //Get请求会来这个方法 @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("get---"); } //POST请求会来这个方法 @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("post----"); } }
|
六、Servlet 生命周期
init方法
在创建该servlet的实例时,就执行该方法。
一个servlet只会初始化一次, init方法只会执行一次
默认情况下是 : 初次访问该servlet,才会创建实例。
service方法
只要客户端来了一个请求,那么就执行这个方法了。
该方法可以被执行很多次。 一次请求,对应一次service方法的调用
destroy方法
servlet销毁的时候,就会执行该方法
1. 该项目从tomcat的里面移除。
2. 正常关闭tomcat就会执行 shutdown.bat
doGet 和 doPost不算生命周期方法,所谓的生命周期方法是指,从对象的创建到销毁一定会执行的方法, 但是这两个方法,不一定会执行。
完整代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| package server; import java.io.IOException; import javax.servlet.Servlet; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServlet; public class Hello implements Servlet{
///1 (一次) //在创建servlet实例-->执行的方法 //默认是初次访问servlet,才会创建实例 @Override public void init(ServletConfig config) throws ServletException { System.out.println("Hello初始化..."); //重启tomcat--浏览器输入http://localhost:8080/HelloServlet/Hello--控制台会输出 } //2 (多次) //只要客户端来请求,就执行 @Override public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { System.out.println("客户端来请求,service方法已经执行了"); //重启tomcat--浏览器输入http://localhost:8080/HelloServlet/Hello--控制台会输出 } //3 //用于servlet销毁 ///1. 该项目从tomcat的里面移除。 //2. 正常关闭tomcat(shutdown.bat)就会执行 @Override public void destroy() { System.out.println("destroy方法已经执行了"); //重启tomcat--浏览器输入http://localhost:8080/HelloServlet/Hello--控制台会输出 }
@Override public ServletConfig getServletConfig() { // TODO 自动生成的方法存根 return null; } @Override public String getServletInfo() { // TODO 自动生成的方法存根 return null; } }
|
七、Servlet创建实例提前(缓解init方法逗留时间太长)
- 默认情况下,只有在初次访问servlet的时候,才会执行init方法。 有的时候,我们可能需要在这个方法里面执行一些初始化工作,甚至是做一些比较耗时的逻辑。
- 那么这个时候,初次访问,可能会在init方法中逗留太久的时间。 那么有没有方法可以让这个初始化的时机提前一点。
- 在配置的时候, 使用load-on-startup元素来指定, 给定的数字越小,启动的时机就越早。 一般不写负数, 从2开始即可。
web.xml里面更改:
1 2 3 4 5
| <servlet> <servlet-name>HelloServlet04</servlet-name> <servlet-class>com.itheima.servlet.HelloServlet04</servlet-class> <load-on-startup>2</load-on-startup> //增加这一行 </servlet>
|
八、ServletConfig(API)
Servlet的配置,—>这个对象,获取servlet配置时的一些信息
完整代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| package server; import java.io.IOException; import java.util.Enumeration; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class ServletConfig extends HttpServlet {
@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //ServletConfig -----> 获取servlet配置的信息 //1.得到servlet配置对象 javax.servlet.ServletConfig config=getServletConfig(); //获取servlet里面xml的配置名称servletName String servletName=config.getServletName(); System.out.println("servletName="+servletName); System.out.println("-------"); //获取servlet里面具体的某一个参数 String address=config.getInitParameter("address"); //配置文件写的<param-name>address</param-name> System.out.println("address="+address); System.out.println("-------"); //遍历取出所有的参数名称 Enumeration<String> names = config.getInitParameterNames(); //ctrl+1--选“将方法给定指定局部变量 ” while (names.hasMoreElements()) { String key = (String) names.nextElement(); String value = config.getInitParameter(key); System.out.println("key==="+key + " value="+value); } } //来了post请求,就让它去执行doGet方法 @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }
|
web.xml配置文件加入:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| <!--ServletConfig类的配置文件--> <servlet> <!--提示报错之后选最后一个servlet-name--> <servlet-name>ServletConfig</servlet-name> <!--提示报错之后选最后一个servlet-class--> <servlet-class>server.ServletConfig</servlet-class> <!--需要写包.类名--> <!-- 添加初始化参数 init-param --> <init-param> <param-name>address</param-name> <param-value>beijing...</param-value> </init-param>
<init-param> <param-name>age</param-name> <param-value>18</param-value> </init-param> <init-param> <param-name>name</param-name> <param-value>zhangsan</param-value> </init-param>
</servlet> <servlet-mapping> <!--提示报错之后选最后一个servlet-name--> <servlet-name>ServletConfig</servlet-name> <url-pattern>/ServletConfig</url-pattern> </servlet-mapping>
|
重新打开tomcat–浏览器输入http://localhost:8080/HelloServlet/ServletConfig--控制台得到结果