文章目录
1.Servelet的初次学习
1.概念:
servlet就是运行在服务器端的小程序(server applet),定义了一个类被浏览器访问的规则。
2.功能:
- 接受请求
- 处理请求
- 做出响应
3.快速入门:
步骤如下:
- 创建一个javaweb项目
- 定义一个类实现Servlet的接口
- 重写该接口的所有的方法
- 配置web.xml文件
- 发布项目
- 通过浏览器访问该servlet小程序
浏览器的地址填写:http://localhost:8080/上下文路径(idea中设置的项目路径)/demo(web.xml中配置的虚拟路经)
代码展示:
Servlet小程序
public class Demo implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
//主要在这个方法里面操作响应和请求对象
System.out.println("servlet响应了");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
web.xml文件
<servlet>
<servlet-name>Demo</servlet-name>
<servlet-class>com.g.Demo</servlet-class>
<!--在servlet-class中填写Servlet存放路径-->
</servlet>
<servlet-mapping>
<servlet-name>Demo</servlet-name>
<url-pattern>/demo</url-pattern>
<!--设置访问时的虚拟路径-->
</servlet-mapping>
4.原理:
2.servlet的生命周期
- 创建servlet(init):当servlet被创建的时候就会被初始化,servlet被创建是开始于浏览器的第一次访问。一般做一些初始化的工作。
- 服务(service)
- 销毁(destroy):一般做一些善后工作。
注意:servlet是单例的,是指tomcat会给所有创建一个线程,但是所有人的请求只会在一个servlet中执行,所以防止出现线程安全的问题,尽量不要设置成员变量,如果非要设置成员变量,那就将成员变量设置为私有常量(private final 变量),只允许读,不允许写
4.获取初始化参数的方式
servlet
@Override
public void init(ServletConfig servletConfig) throws ServletException {
//获取初始化参数
String name = servletConfig.getInitParameter("name");
System.out.println(name);
}
web-xml文件
<servlet>
<servlet-name>Demo</servlet-name>
<servlet-class>com.g.Demo</servlet-class>
<!--在servlet-class中填写Servlet存放路径-->
<init-param>
设置初始化参数
<param-name>name</param-name>
<param-value>初始化参数</param-value>
</init-param>
</servlet>
4.配置Servlet的创建时机
在web.xml的标签中配置
<!-- 修改servlet的创建时机:
负整数:默认值 -1,在第一次被访问时创建
非负整数:在服务器启动时创建数字越小,优先级越高-->
<load-on-startup>0</load-on-startup>
3.定义servlet的三种方式
-
继承servlet
-
继承genenicSelvet
1.适配器 2.对ServletConfig进行优化。提升config对象的作用域 3.实现了ServletConfig接口,简化对config对象的使用方式
-
继承httpServlet(终极方式)
需要手动重写doget方法和dopost方法 注意去掉super.doGet(); 和 super.doPost();
4.idea快速创建Servlet
5.servlet中的全局域的学习(servlet context)
1.概念:
代表了整个web应用,当使用浏览器时,就会创建一个servletcontext对象。
获取全局域对象的方法:
//方法一
ServletContext servletContext1 = request.getSession().getServletContext();
//方法二
ServletContext servletContext2 = this.getServletContext();
2.作用:
在servlet之间传递数据;
存储所有用户共享的数据方法:
setAttribuate()
以键值对的形式将数据存储到全局域对象中。
getAttrivuate()
通过键找值的形式获取全局域中存放的值。
removeAttribute()
删除存放在全局域中存放的值
3.域对象:
ServletContext:代表整个web应用
HttpSession:会话域
ServletRequest:请求域
PageContext:页面域
6.获取服务端的真实路径
1.真实路径
是指服务器下的路径,即创建了javaweb工程后,原始的java工程通过解译后路径会发生变化。
getRealPath()获取服务器端的动态路径:
- 1.webRoot下:项目根目录下
- 2.WEB-INF下: 项目根目录下/WEB-INF
- 3.src下: 项目根目录下/WEB-INF/classes
注意:如果getRealPath("/"),获取的路径是项目的根目录
ServletContext只能用于web环境。如果是非web环境,则使用ClassLoader来获取真实路径
2.获取服务器端的普通类的对象
不可能将服务器的路径写死
-
方法一(使用类加载器的方式获取普通类的对象):
//1.获取该类对应的类加载器对象 ClassLoader loader = this.getClass().getClassLoader(); //2.获取文件运行的真实路径 URL url = loader.getResource("a.txt"); String path = url.getPath(); //注意类加载器来获取路径也有局限性 只能获取src目录下的文件
-
方法二(getresourceAsStream()获取文件以流的形式创建):
InputStream stream =MyUtil.class.getResourceAsStream("/a.txt"); //将获取的的流的形式创建出来 System.out.println(stream);
7.如何打war包
war包就是一种压缩包,部署好的war包放在tomcat下的webapps文件夹下面,开启服务器war包会自动解压,删除文件只需要删除war包,文件也会随着一块删除。