Servlet是java web中的动态资源,是三大组件(Servlet,Filter,Listener)之一,用于处理客户端的请求,并作出相应,具体用法为:
一,实现Servlet的三种方式:
1.实现javax.servlet.Servlet接口
public class ServletOne implements Servlet{
public void destroy(){}
public ServletConfig getServletConfig(){}
public String getServletInfo(){}
public void init(ServletConfig arg0) throws ServletException {}
public void service(ServletRequest request, ServletResponse response)
throws ServletException, IOException {}
}
(1).init()方法在Servlet创建时被调用
(2).destroy()方法在Servlet销毁时创建
(3).service()方法每请求一次servelt调用一次
2.继承javax.servlet.GenericServlet,并重写其所有的抽象方法
public class ServletTwo extends GenericServlet{
@Override
public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {}
}
3.继承javax.servlet.http.HttpServlet
public class ServletFour extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}
}
(1).doGet()处理get请求
(2).doPost()处理post请求
注:用此方法实现的Servlet只能处理http协议的请求
二,配置Servlet
通过以上方式定义好了一个Servlet,但此时的Servlet还不能处理客户端请求,因为没有给此Servlet指定处理来自客户端的那个请求,因此要把此Servlet配置成能处理客户端请求的Servlet。在WebContent/WEB-INF/web.xml中配置如下:
<servlet>
<servlet-name>one</servlet-name>
<servlet-class>com.web.servlet.ServletOne</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>one</servlet-name>
<url-pattern>/one</url-pattern>
</servlet-mapping>
一个<servlet>标签就把一个Servlet和一个名字绑定在了一起,一个<servlet-mapping>标签就把一个servlet名字和一个路径绑定在了一起,因此经过此配置客户端就可以通过访问 http://localhost:8080/项目名/one 这一个路径来访问 com.web.servlet.ServletOne 这个Servlet。当然一个<servlet-mapping> 标签也可以有多个<url-pattern>标签,来给一个Servlet绑定多个访问路径,如:
<servlet-mapping>
<servlet-name>TServlet</servlet-name>
<url-pattern>/login</url-pattern>
<url-pattern>/log</url-pattern>
</servlet-mapping>
也可以在<servlet-mapping>标签中使用通配符*来指定访问路径,但是*不能出现在路径的中间位置如:
<url-pattern>/servlet/*</url-pattern> 对的
<url-pattern>*.do</url-pattern> 对的
<url-pattern>/*.do</url-pattern> 错的
那么就会出现一个地址同时匹配一个精确的<url-pattern>和一个使用了通配符的<url-mapping>,此时会优先选择精确<url-mapping>所绑定的Servlet。
三,域对象
域对象是指在一定作用域被共享的对象,在Servlet中有四大域对象:ServletContext,HttpSession,ServletRequest,PageContext,注意:PageContext是jsp的九大内置对象之一,因为jsp是一个特殊的Servlet,故这里将PageContext也算在内。域对象通用的操作属性的方法为:
void setAttribute(String name,Object obj) 网域对象中保存一个属性
Object getAttribute(String name) 从域对象中获取一个属性值
void removeAttribute(String name) 从域对象中移除一个属性
四,获取资源文件
1.获取资源的真实路径:
ServletContext context = getServletContext()
String path = context.getRealPath("/a.txt")
2.获取资源流:
InputStream in = context.getResourceAsStream("/a.txt")
注:以上参数必须以 / 开头,表示相对于项目
3.获取类路径下的资源
对于web项目来说,当把项目发布后就没有 src 这个目录,所以在拿类路径下的资源文件时,就不能用 new InputStream("") 这种方式来获取。此时src目录就相当于WebContent/WEB-INF/classes目录,可以用两种方式来获取
(1).类.getResourceAsStream(String path)
path以 / 开头表示路径相对于 classes
path不以 / 开头表示路径相对于当前类
(2).类.getClassLoader().getResourceAsStream(String path)
此时path只想对于classes
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。