用户是如何访问网站的?
1.通过一个网址(URL)访问网站(发出一个请求)
2.实际上访问网站就是访问该网站的服务器
3.通过代码(jdbc)去访问数据库,进行增删改查
4.将查询的结果返回给服务器你写的那堆代码中
5.最后服务器将查询的结果响应回浏览器(用户)
注意:访问服务器上的是代码(静态资源和动态资源)
- 静态资源 HTML div+CSS(不管谁访问,内容不会改变)
- 动态资源 jsp servlet(根据不同的用户,返回不同信息)
服务器基础了解
TomCat服务器(黄猫):开源的,免费的轻量级服务器,属于sun公司
TomCat目录中各个文件夹的作用:
bin : TomCat服务器操作指令
cndf : 服务器的配置文件 web.xml
lib : 服务器自己使用的jar包,内置dbcp数据库连接池
webapps : 存放你的工程(将网站运行代码放上去)
temp : 服务器运行时产生临时文件
logs : 存放服务器的日志信息(开启关闭服务器时间 以及运行时产生错误)
work : 服务器自己的工作文件夹
利用Tomcat操作指令启动和关闭服务器
1.打开cmd(控制台)
2.切换盘符,输入 d:
3.cd(去往目录) 去往Tomcat下的bin文件夹
4.执行服务器开启服务的指令startup.bat
5.设置环境变量(提前设置好,步骤懒得改了)
新建变量名JAVA_HOME 变量值为jdk的bin文件夹路径
新建变量名JRE_HOME 变量值为jdk的jre文件夹的路径
6.访问Tomcat服务器的默认网页
格式 : http://ip地址:服务器的端口号/工程的名字/访问的资源
注意 : TomCat默认端口号 8080
7.关闭Tomcat服务,使用shutdown.bat
服务器上的工程目录
项目运行后,会将工程中的WebContent文件夹编译到服务器上(但是WebContent不会出现)
1.网页资源HTML页面(静态资源)
2.META-INF : 配置工程的扩展应用(暂时没用)
3.WEB-INF(重点) : 工程的所有资源
classes : 项目代码的.class文件
lib : 工程中使用.jar包(web工程不用添加jar的路径)
web.xml : 工程配置文件(配置Servlet)
JavaEE概念
- JavaEE是Java为服务器端提供的一套规范(接口)
- 规范中有jsp servlet , 是javax.servlet包下的
- 注意:需要给工程添加Tomcat包(添加完成才能使用这套接口)
servlet作用
定义:servlet(小服务程序) 就是一个Java中接口
1.可以接收用户(浏览器)发过来的请求
2.处理请求
3.可以将处理完的请求,再响应回浏览器
创建 Servlet 有三种方式
首先需要去工程的web.xml文件中,配置该servlet的访问路径
<?xml version="1.0" encoding="UTF-8"?>
<!-- Ctrl+shift+/ 注释 -->
<!-- xml文件的版本号,编码格式 -->
<!-- xml文件头,对文件中可使用的标签进行约束 -->
<!-- content model 规定了该xml文件可以使用什么标签 -->
<!-- 注意:建议你在书写这些标签时的顺序 -->
<web-app
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<!-- 工程名 -->
<display-name>sh-web-01</display-name>
<!-- 设置默认的欢迎页面 -->
<welcome-file-list>
<welcome-file>HelloWorld.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<!-- 配置servlet类和名字 -->
<servlet>
<!-- 给该servlet设置一个名字 -->
<servlet-name>demo01</servlet-name>
<!-- 设置servlet是哪个类的(使用全类名) -->
<!-- 系统通过反射可以将该类创建出来 -->
<servlet-class>com.lanou3g.Demo01</servlet-class>
</servlet>
<!-- 配置servlet的访问路径 -->
<servlet-mapping>
<!-- 设置给哪一个servlet配置路径 -->
<!-- 注意:要与配置时 名字相同 -->
<servlet-name>demo01</servlet-name>
<!-- 配置路径(见名知意) -->
<!-- /aaa 这个斜杠表示是 下面工程名后面的斜杠-->
<!-- http://localhost:8080/sh-web-01/ -->
<url-pattern>/demo01</url-pattern>
</servlet-mapping>
注意:
1.当用户第一次请求时,系统会创建出servlet对象,并且只创建一次
2.当用户再次请求同一个servlet时,不会再创建新的servlet对象,而是只会调用服务方法(service方法)
3.当停止服务器,调用销毁方法
4.不管多少用户(浏览器)访问 都只会创建一个servlet
方法一
- 实现Servlet接口
- 实现接口中的生命周期方法
- 构造方法 init service destroy(4个)
public class Demo01 implements Servlet{
// 构造方法
public Demo01() {
System.out.println("Demo01 的构造方法");
}
// 初始化servlet的配置信息
@Override
public void init(ServletConfig arg0) throws ServletException {
// TODO Auto-generated method stub
System.out.println("init 初始化方法");
}
// servlet的服务方法(处理请求方法)
@Override
public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
// TODO Auto-generated method stub
System.out.println("service 服务方法");
}
// servlet的销毁方法
// 1.服务器停止时
// 2.当应用程序从Tomcat中被移除时调用
@Override
public void destroy() {
// TODO Auto-generated method stub
System.out.println("destory 销毁方法");
}
// 获取当前servlet的配置信息
@Override
public ServletConfig getServletConfig() {
// TODO Auto-generated method stub
return null;
}
// 获取servlet的版本 作者信息
@Override
public String getServletInfo() {
// TODO Auto-generated method stub
return null;
}
}
方法二
- 继承 GenericServlet
- 只用实现服务方法
- 该类使用缺省适配器模式来写的
- 好处:节省代码
public class Demo02 extends GenericServlet{
@Override
public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
// TODO Auto-generated method stub
System.out.println("Demo2 服务方法");
}
}
方法三
- 继承 HttPServlet
- 利用模板设计模式
public class Demo03 extends HttpServlet{
// 重写doget
// 注意:重写方法后,不要调用父类中方法
// 父类中的处理就是给浏览器发送错误信息
// 可以在dopost方法中,调用doget方法
// 好处:不论接收请求时get还是post,写一次处理的代码就行
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doget");
}
// 重写dopost
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
内部访问流程
1.服务器会接收到用户请求过来网址
2.通过网址中的工程名/sh-web-01,在webapps文件中,找到对应的工程
3.在工程中找到web.xml文件,进行读取
4.通过用户的访问网址中 /demo01(访问的资源路径),找到该路径所对应的 servlet-name
5.通过servlet-name 找到对应servlet-class
6.通过servlet-class 系统反射出该类的对象
7.调用servlet的生命周期方法