1,servle介绍:
html+css+js
Servlet:用来开发动态web的技术
属于javaee规范
【1】,javaEE Servers创建项目
a,new Dynamic Web Project
2,配置文件直接点下一步:
3,填写网站的名称,内容确定进行创建成功
4,关联自己的服务器
完成
2,servle 的使用
【1】手动导入
servlet使用步骤
[1]写一个类继承httpServlet
[2]重写doGet和doPost方法
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doget");
PrintWriter writer = resp.getWriter();
writer.println("<html>");
writer.println("<body>");
writer.println("Hello Servlet");
writer.println("</body>");
writer.println("</html>");
}
[3]配置servlet
web.xml中的配置
<!-- 配置Servlet -->
<servlet>
<servlet-name>Hello</servlet-name>
<servlet-class>类的全类名</servlet-class>
</servlet>
<!-- 配置servlet访问路径 -->
<servlet-mapping>
<servlet-name>要与配置的servlet匹配</servlet-name>
<url-pattern>浏览器要访问的路径</url-pattern>
</servlet-mapping>
【2】自动导入
new Servle 会自动导包 清单文件会自动生成
配置访问文件
2,取消继承的方法fhish,查看清单目录自动配置
2,servle的执行流程:
servlet运行机制
[1]发送一个请求 http://localhost:8080/02_range/hello
[2]tomcat解析是哪个应用程序
[3]找到这个应用程序 并且解析 web.xml
[4]解析web.xml里面的url-pattern 比对成功的话 解析 servlet-name
[5]通过这个servlet-name 找到这个Servlet这个类
利用eclipse提供的Servlet创建Servlet
*处理bug网页打不开,出现404错误
解决方法 重写类中实现的方法 init doget 一定要去除 doget 和dopost 里面的super()方法
3,servle的生命周期
[1]构造方法
[2]init方法初始化 只会创建的时候执行一次
[3]处理客户端对service的调用 多次请求 多次调用
[4]service
[5]销毁servlet
doget 和 doPost 构造方法中直接使用。父类执行
servlet有俩种方式 会启动
1.正常的请求 会启动servlet
2.让tomcat启动的时候就去加载servlet 需要在web.xml里面配置 很少用因为生命周期太长了
配置以后启动tomcat 直接调用service 方法 service 会按请求方式调用doget 或者 dopost方法
<servlet>
<servlet-name>LifeServlet</servlet-name>
<servlet-class>com.heima.life.LifeServlet</servlet-class>
<load-on-startup>1</load-on-startup> 他的级别只有1-9
</servlet>
4,url - pattern 的三种写法
web.xml 下url路径更改写法,依然可以访问资源
[1]完全路径匹配 /hello
[2]目录匹配 /*
[3]扩展名匹配 *.do *.action
注意字符串的拼接,不要有两个//
优先级:完全路径匹配>目录匹配>扩展名匹配
字节流和字符流不能同时使用
绝对路径是从服务器端口号后面开始匹配
相对路径是从服务器应用程序后面开始匹配
相对路径: 相对于当前访问的路径 路径前面 不会加 /
绝对路径: 一个绝对的路径 路径前面 一定要加 /
项目开发常用的是绝对路径
99乘法表案例:
【1】创建DyNamic Web Project 项目
【2】创建Servlet服务
package com.xiaoshuai;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class CfbServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// [1]获取请求传递过来的参数
String str_number = req.getParameter("number");
// [2]将请求过来的参数转成了int类型
int number = Integer.parseInt(str_number);
// [3]获取了一个字符流
PrintWriter writer = resp.getWriter(); // 字符流
// resp.getOutputStream();// 字节流 (字符流和字节流不能同时出现)
// [4]乘法表
for (int i = 1; i <= number; i++) {
for (int j = 1; j <= i; j++) {
writer.print(i + " * " + j + " = " + i * j + " ");
}
writer.println();
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
【3】WebCOntent下创建HTML网页
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="cfb" method="get">
请输入一个数:<input type="text" name="number" /> <input type="submit"
value="提交">
</form>
</body>
</html>
问题:
1,web.xml 里面的<url-pattern>和 命名.html 中 acction 不同无法关联
2,输入网址,servlet 中 url 是一个网址 创建的 命名.html 也是一个网址。命名.html关联url路径