Javaweb开发
1 、 Web服务器是指驻留于因特网上某种类型计算机的程序,是可以向发出请求的浏览器提供文档的程序。当Web浏览器(客户端)连到服务器上并请求文件时,服务器将处理该请求并将文件反馈到该浏览器上,附带的信息会告诉浏览器如何查看该文件(即文件类型)
2、服务器是一种被动程序:只有当Internet上运行在其他计算机中的浏览器发出请求时,服务器才会响应。
用户(浏览器)访问服务端的什么东西?
静态web资源 : HTML CSS js
用户在访问静态资源的时候,这些资源不会变
动态web资源: jsp Servlet
用户在访问动态资源的时候,访问内容是由代码生成的
用法如何访问服务端?用户通过网址来请求服务器端
请求就是服务器端上面的静态资源和动态资源
请求完成之后会给浏览器一个响应结果
服务器:
搭建JavaWeb应用开发环境——Tomcat服务器:
1.Tomcat 服务器 Sun公司出品 开源免费 轻量级
我们写的Java代码 和 前端HTML 页面 全部是放在服务器上运行;(服务器开发是开发放到服务器上的代码而不是开发一个服务器)
Tomcat服务器下文件夹
bin 存放编译指令的(例如开启关闭服务)
conf 存放Tomcat自己的配置文件
lib 存放Tomcat依赖的架包
logs 存放是用户访问服务器的日志(查看错误)
temp 存放临时文件
webAPPs 默认存放应用程序的文件夹(你的工程)
work 存放Tomcat 自己的工作文件
wtpwebapps 与eclipse 关联后 工程存放的文件夹
2.命令行打开服务器:
1.前往Tomcat 的bin文件夹下
2.开启文件管理权限
获取文件夹权限(读写)
sudo chmod 755 *.sh
3.开启服务(window 下 执行的是 .bat 后缀的指令_) 注意不要重复开启服务,否则会出现端口被占用
执行打开服务器
sudo sh ./startup.sh
----------- 访问服务器上资源
访问的网址
URL : 统一资源定位符
http://localhost:8080/test/Helloorld.html
URI : 从服务器网址往后: 统一资源标识符
/test/Helloorld.html
http://IP地址:端口号/项目名称/访问资源
通过这个网址查看Tomcat是否启动
http://localhost:8080/test/HelloWorld.html
4.关闭服务
执行关闭服务器
sudo sh ./shutdown.sh
3.eclipse 联系服务器
工程被编译到服务器 实际上是把工程目录下的webContent 文件夹下内容编译进去
webContent 本身不出现
META-INF 扩展应用程序文件夹(暂时没有用)
WEB-INF 存放着工程的所有资源
lib 存放工程使用的jar包
(不用添加路径 会自动编译到服务器时)
web.XML 工程的配置文件
classes : 工程编译到服务器上出现的,存放的是你工程中类的.class 文件
注意: WEB-INF 文件夹下存放的资源不能通过网址去直接访问.
Servlet初识
简单介绍
Servlet(小服务程序) 是个Java接口
访问服务器实际上是访问的是Servlet (容器 : 有访问的动态资源)
javax.servlet.Servlet; 注意如果报错或提示不出来
修改或添加Tomcat到你的工程中 libraries
servlet 的生命周期方法:
Servlet 只在你第一次访问时创建一次当你再次访问该servlet时不会创建新的Servlet
只会重复调用服务方法 service方法;
--用户发出一个请求系统如何能创建一个对应的Servlet?
1.通过用户请求的网址 系统可以获取到项目的名称 /sh-web-01
2.找到对应的项目后 从项目中找到该项目的web.xml文件
3.从XML文件中读取到访问servelt的路径(/demo01)
4.通过servlet 路径找到用户要访问哪一个servlet 的名字(demo01)
5.通过servlet 的名字就能找到要创建的Servlet 属于哪个来
6.系统通过反射创建该类的对象 然后走声明周期的四个方法 实例化-->初始化-->service服务-->销毁
如何创建一个Servlet ?
方式一: 直接实现 Servlet 接口
public class Demo01 implements Servlet {
//实例化方法(创造对象的无参构造方法)
public Demo01() {
System.out.println("实例化对象的无参构造方法");
}
public void init(ServletConfig config) throws ServletException {
//初始化方法: 初始化Servlet 的配置信息
System.out.println("初始化init方法 被调用");
}
//服务方法; 接收请求 返回响应(处理用户请求 处理完成后 响应给用户)
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
System.out.println("Service方法被调用了");
}
//获取servlet 配置信息的用法
public ServletConfig getServletConfig() {
return null;
}
// 获取servlet 的版本 作者信息
public String getServletInfo() {
return null;
}
//Servlet 销毁方法
//服务器关闭
//该应用程序被移除也会调用
public void destroy() {
System.out.println("destory销毁方法 被调用");
}
}
方式二 : 继承GenericServlet类
利用缺省适配器方式:帮忙简化代码 生命周期方法可不写?
public class Demo02 extends GenericServlet {
@Override
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
System.out.println("demo02..Service");
/*适配器模式创建:使用哪个方法就重写哪个方法 用不上的方法可以不重写
使用extends关键字 继承 GenericServlet类,打开GenericServlet类,看里面的介绍
发现GenericServlet类实现了Servlet类,代码为:
public abstract class GenericServlet
implements Servlet, ServletConfig, java.io.Serializable{}
可见Servlet类是基础类,GenericServlet通过实现Servlet类,再让我们继承它这个类
可以方便我们写代码*/
}
}
方式三 : 直接继承HttpServlet 类
利用模板设计模式
public class Demo03 extends HttpServlet {
//重写doGet 和 doPost 方法
//注意重写完不要调用父类的doGet方法 否则一样会发送错误
//注意从浏览器发送的请求都是get请求
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
System.out.println("doGet******哈哈哈哈");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
System.out.println("doPOST********嘻嘻嘻嘻");
//两种请求共用一个处理方法
doGet(req, resp);
}
}
配置web.XML文件
<?xml version="1.0" encoding="UTF-8"?>
<!-- xml文件的版本号 和编码格式 -->
<!-- 表示该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_2_5.xsd" id="WebApp_ID" version="2.5">
<!-- 工程名称 -->
<display-name>sh-web-01</display-name>
<!-- 创建一个Servlet 配置servlet 访问地址-->
<servlet>
<!-- 给servlet 起个对象名 -->
<servlet-name>demo01</servlet-name>
<!-- 设置servlet 使用哪个类创建对象 -->
<!--注意填全类名 -->
<servlet-class>com.lanou3g.Demo01</servlet-class>
<!-- 可以配置Servlet创建的优先级 数越小优先级越高-->
<!-- 加上这个设置可以让在服务器启动时就会创建该Servlet -->
<load-on-startup>5</load-on-startup>
</servlet>
<!-- 给servlet 配置一个访问地址 -->
<servlet-mapping>
<!-- 表示要给哪一个servlet 对象配置访问地址 -->
<servlet-name>demo01</servlet-name>
<!-- 设置访问地址
http://localhost:8080/sh-web-01/demo01
/demo01 这个斜杠 表示的是项目名后的斜杠
-->
<url-pattern>/demo01</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>demo02</servlet-name>
<servlet-class>com.lanou3g.Demo02</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>demo02</servlet-name>
<url-pattern>/demo02</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>demo03</servlet-name>
<servlet-class>com.lanou3g.Demo03</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>demo03</servlet-name>
<url-pattern>/demo03</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>demo04</servlet-name>
<servlet-class>com.lanou3g.Demo04</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>demo04</servlet-name>
<!--利用通配符配置路基 -->
<!--
1. * .后缀名 *.action
2./demo04 配置的是绝对路径
3./*
4./ 默认配置方法(系统用的)
凡是通过服务器访问的资源都是Servlet
优先级 绝对路径> / > 带后缀的
-->
<url-pattern>/demo04</url-pattern>
</servlet-mapping>
<!-- 一个Servlet 配置多个访问路径 -->
<servlet-mapping>
<servlet-name>demo04</servlet-name>
<url-pattern>/demo999</url-pattern>
</servlet-mapping>
<!-- 设置欢迎页面 直接访问工程路径 出现的页面 -->
<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>
</web-app>