前言:
web资源有两种分类:
*静态资源
HTML ,JavaScript
*动态资源
Java server pages ,Serverlet
作用:
package com.serverlet.test;
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 Myservlet implements Servlet{
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public ServletConfig getServletConfig() {
// TODO Auto-generated method stub
return null;
}
@Override
public String getServletInfo() {
// TODO Auto-generated method stub
return null;
}
@Override
public void init(ServletConfig config) throws ServletException {
// TODO Auto-generated method stub
}
@Override
public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
// TODO Auto-generated method stub
System.out.print("hello world");
}
}
3.配置一个serverlet(作用是告诉服务器我们的serverlet有以下作用)
*打开WebContent->WEB-INF->web.xml(这个web.xml创建web动态项目的时候应该勾选上去)
配置如下:
类路径可以鼠标右键 copy quailifile name
Myservlet
com.serverlet.test.Myservlet
Myservlet
/s
在浏览器中输入地址:http://localhost:8080/ServletDome/
结果
在次输入后面给的虚拟地址:/s
结果(打印两次是因为我输了两遍)
(*要是对应的servlet和servlet mapping两个不一样的话可能会报错,那么我们要注意 tomcat启动里面报错打印的信息 根据报错的信息修改相应内容)
总结过程:
servlet的通用写法
看一下 servlet的 方法结构
servlet(接口)---->GenericServlet------>HttpServlet–>或者其他自己定义的方法
所以可以写成其他定义的方法
例子:
首先先写一个类继承httpservlet,我写的是myservlet2.java
package com.serverlet.test;
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 Myseverlet2 extends HttpServlet{
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
System.out.println("hello servlet");
}
}
xml中配置如下:
Myservlet2
com.serverlet.test.Myseverlet2
Myservlet2
/ss
运行结果
其实在运用中只经常使用的是doget 和 dopost 所以我们把service注释掉重写do’get和 dopost:
代码如下:
package com.serverlet.test;
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 Myseverlet2 extends HttpServlet{
// @Override
// protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// // TODO Auto-generated method stub
// System.out.println("hello servlet");
//
// }
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
System.out.println("dopost...");
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
System.out.println("doget servlet2...");
}
}
在继续输入地址为回车:http://localhost:8080/ServletDome/ss
结果
看出打印doget servlet2…所以//如果是doget请求就会打印这个方法
新建class 为Myserverlet3实现servlet方法
1.
在init方法中打印servlet初始化
代码如下:
package com.serverlet.test;
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 Myserverlet3 implements Servlet{
@Override
public void init(ServletConfig config) throws ServletException {
System.out.println("servlet初始化");
}
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public ServletConfig getServletConfig() {
// TODO Auto-generated method stub
return null;
}
@Override
public String getServletInfo() {
// TODO Auto-generated method stub
return null;
}
@Override
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
// TODO Auto-generated method stub
}
}
web.xml配置如下
Myserverlet3
com.serverlet.test.Myserverlet3
Myserverlet3
/sss
发布服务器地址栏输入:http://localhost:8080/ServletDome/sss
结果
重点小记
在其他浏览器继续输入该网址不能继续初始化init 因为一个servlet在创建后就初始化 并且只能初始化一次.
2.
给service方法一个打印hello service…
//2.只要客户端来了一个请求就执行这个方法
@Override
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
// TODO Auto-generated method stub
System.out.println("hello service...");
}
重启给地址:http://localhost:8080/ServletDome/sss
结果
在回车
重点小记
只要客户端来了一个请求就执行这个方法
该方法可以执行多次 一次执行一个
3.
给destory一个方法打印输出hello destory被调用了
@Override
public void destroy() {
// TODO Auto-generated method stub
System.out.println("hello destory被调用了...");
}
然后我们在server里面remove项目
结果
重点小记
servlet销毁的时候就执行这个方法
当项目从服务器 tomcat移除的时候就执行这个方法
正常关闭服务器就会执行该方法
init方法 --创建实例时候就初始化 ,只执行一次
service方法—每请求一次 就执行一次
destory方法–关闭服务器就执行
让servlet初始化时机提前
意义:默有的时候在初次访问servlet的时候,才会执行init方法,有的时候,我们需要在这个方法里面执行一些初始化工作,甚至做一些比较耗时的逻辑,那么这个时候,初次访问,可能会在init方法中逗留太久时间,那么我们就想办法让初始化的时机提前一点
继续新建Mysevlet4的class
代码如下:
package com.serverlet.test;
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 Myserverlet4 implements Servlet{
@Override
//1.一个servlet在创建后就初始化 并且只能初始化一次.
public void init(ServletConfig config) throws ServletException {
System.out.println("servlet 初始化....");
}
//2.只要客户端来了一个请求就执行这个方法
@Override
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
// TODO Auto-generated method stub
System.out.println("hello service...");
}
//3.servlet销毁的时候就会执行该方法
@Override
public void destroy() {
// TODO Auto-generated method stub
System.out.println("hello destory被调用了...");
}
@Override
public ServletConfig getServletConfig() {
// TODO Auto-generated method stub
return null;
}
@Override
public String getServletInfo() {
// TODO Auto-generated method stub
return null;
}
}
web.xml配置如下
Myserverlet3
com.serverlet.test.Myserverlet3
2
Myserverlet3
/sss
Myserverlet4
com.serverlet.test.Myserverlet4
4
Myserverlet4
/ssss
结果:在load-on-startup2里面就先初始化了
总结:在元素load-on-startup里面只要数字越小就越先执行(如果数字相同就是随机选择)一般不写负数 但是要从2开始(因为1在tomcat conf web.xml已经先被使用来访问各种静态资源,可以打开web.xml里面来看到详细信息)
servlet config:配置servlet
新建一个Myservletconfig类
代码如下
package com.serverlet.test;
import java.io.IOException;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import jdk.nashorn.internal.runtime.regexp.joni.Config;
public class Myservletconfig extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletConfig config=getServletConfig();
String ServletName=config.getServletName();
System.out.println("ServletName"+ServletName);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
super.doPost(req, resp);
}
}
web.xml配置如下:
Myserverlet5
com.serverlet.test.Myservletconfig
Myserverlet5
/sssss
结果:
//可以从打印输出中看到这个其实是获得servlet-name里面的文本内容
继续在doget方法中打印
代码
String getaddress=config.getInitParameter("address");
System.out.println("address:"+getaddress);
配置:
Myserverlet5
com.serverlet.test.Myservletconfig
address
sichuang
Myserverlet5
/sssss
结果
可以看出init -param里面可以初始化参数并且方法getInitParameter(“xx”);可以获得某一个参数
继续下一个方法
代码:
在web.xml中有多个初始化对象那么怎么获得了
Myserverlet5
com.serverlet.test.Myservletconfig
address
sichuang
age
18
Myserverlet5
/sssss
方法:
Enumeration getAllinitparam=config.getInitParameterNames();
while (getAllinitparam.hasMoreElements()) {
String AllName = (String) getAllinitparam.nextElement();
System.out.println("Allparam:"+AllName);
}
结果
//可以获得所有参数名称
也可以传进去参数的值得到参数的值
总结:
config三个方法new 对象接收并且输出
ServletConfig config=getServletConfig();
ServletConfig config=getServletConfig();
String number=config.getInitParameter("unber");
if (number==null) {
throw new IllegalArgumentException("servlet 在创建的时候一定要写这个参数");
}else {
System.out.println("number...");
}
打印出number…
总结:
假如开发一些应用的时候使用到的一些技术,或者一些代码,我们不会,但是有人写出来了,他的代码放置在自己的servlet类里面,刚好这个servlet里面的公司在注册servlet的时候,必须要在web.xml里面,生命init-params
servlet配置web.xmlservlet元素servlet生命周期servletconfig里面的各种方法详细介绍等…