IDEA-配置Serlvet(基于tomcat服务器)
HelloServelt测试小程序
package com.lz.xxx;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
public class Hello extends HttpServlet {
// get请求对应的方法
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("this is get method..");
PrintWriter out = resp.getWriter();
out.println("get method is running...");
}
// post请求对应的方法
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("this is post method..");
PrintWriter out = resp.getWriter();
out.println("post method is running...");
}
}
web.xml文件配置
hello com.lz.xxx.Hello hello /hello /myhello /abc/*
访问 localhost:8080/hello 响应如下:
ServletConfig接口的对象只能访问对应的Servlet中配置的参数
Tomcat初始化一个Servlet时,会将该Servlet的配置信息封装到一个ServletConfig对象中,通过调用 init(ServletConfig config) 方法将Servlet对象传递给Servlet。
在web.xml中的servlet元素里面配置
此处配置的参数将被加载进该Servlet对应的ServletConfig对象中
xx com.xx addName Rose
ServletConfig接口的常用方法
| 方法说明 | 功能描述 |
|---|---|
| String getInitParameter(String name) | 根据初始化参数名返回对应的初始化参数值 |
| Enumeration getInitParameterNames() | 返回一个 Enumeration 对象,其中包含了所有的初始化参数名 |
| ServletContext getSerlvetContext() | 返回一个代表当前Web应用的ServletContext对象 |
| String getServletName() | 返回Servlet的名字,即 web.xml中 |
使用测试
// 省略导入的包
public class TestServlet extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=utf-8");
PrintWriter out = resp.getWriter();
ServletConfig config = this.getServletConfig();
Enumeration configname = config.getInitParameterNames();
while (configname.hasMoreElements()){
String name = configname.nextElement();
String value = config.getInitParameter(name);
out.println(name + " = " + value);
}
}
}
ServletContext对象在当前这个Web应用中是唯一的,代表当前Web应用,该对象不仅封装了当前Web应用的所有信息,还可以配置整个Web应用的初始化信息。
注意:当前Web应用中的所有Servlet中都可以访问到
配置方法如下:
name Harry school lzjiaotong
使用测试
// 省略导入的包
public class TestServlet extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=utf-8");
PrintWriter out = resp.getWriter();
ServletContext context = this.getServletContext();
Enumeration names = context.getInitParameterNames();
while (names.hasMoreElements()){
String name = names.nextElement();
String value = context.getInitParameter(name);
out.println(name + "--->" + value);
}
}
}
ServletContext接口的方法
| 方法说明 | 功能描述 |
|---|---|
| Enumeration getAttributeNames() | 返回一个 Enumeration 对象,该对象包含了所有存放在ServletContext中的所有域属性名 |
| Object getAttribute(String name) | 根据参数指定的属性名返回一个与之匹配的域属性值 |
| void removeAttribute(String name) | 根据参数指定的域属性名,从ServletContext中删除匹配的域属性 |
| void setAttribute(String name, Object obj) | 设置ServletContext的域属性,其中name是域属性名,obj是域属性值 |
应用:
setattr.java
// 导入包省略
public class setattr extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=utf-8");
ServletContext context = this.getServletContext();
context.setAttribute("data", "I love you");
}
}
readattr.java
public class readattr extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=utf-8");
ServletContext context = this.getServletContext();
String value = (String)context.getAttribute("data");
PrintWriter out = resp.getWriter();
out.println("data" + " ==> " + value);
}
}
web.xml
setattr com.lz.setattr setattr /set readattr com.lz.readattr readattr /read
读取Web应用下的资源文件
在ServletContext接口中定义了一些读取 Web 资源的方法,这些方法是依靠 Servlet容器来实现的。Servlet容器根据资源文件相对于Web 应用的路径,返回关联资源文件的 IO流、资源文件在文件系统的绝对路径等。
ServletContext接口的常用方法
| 方法说明 | 功能描述 |
|---|---|
| Set getResourcePaths(String path) | 返回一个Set集合,集合中包含了资源目录中子目录和文件的路径名称。参数path必须以正斜线(/)开始,指定匹配资源的部分路径 |
| String getRealPath(String path) | 返回资源文件在服务器文件系统上的真实路径(绝对路径)。参数path代表资源文件的虚拟路径,它应该以正斜线(/)开始,“/” 表示当前Web应用的根目录,如果Servlet容器不能将虚拟路径装换为文件系统的真实路径,则返回null |
| URL getResource(String path) | 返回映射到某个资源文件的URL对象。参数path必须以正斜线(/)开始,“/” 代表当前Web应用的根目录 |
| InputStream getResourceAsStream(String path) | 返回映射到某个资源文件的InputStream输入流对象。参数则和getResource() 方法完全一致 |
src 下的 jiaotong.properties 文件
name=whb class=ruanjian
使用测试
// 省略导入的包
public class TestServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=utf-8");
PrintWriter out = resp.getWriter();
ServletContext context = this.getServletContext();
// 获取文件对应的流对象
InputStream resource = context.getResourceAsStream("./WEB-INF/classes/jiaotong.properties");
// 创建 Properties 对象
Properties props = new Properties();
// 将资源文件内容加载进 Properties 对象中
props.load(resource);
// 通过 Properties 对象获取文件中保存的键值对信息
String name = props.getProperty("name");
String cls = props.getProperty("class");
// 输出到浏览器
out.println("name = " + name);
out.println("class = " + cls);
}
}



