1.servlet 概述
Servlet:运行在web服务器上的小的JAVA程序,用来接受和响应从客户端发送过来的请求,通常使用HTTP协议。
使用Servlet:类实现Servlet接口,并部署到服务器。
入门程序
public class ServletDemo implements Servlet{
/*
* 用来处理客户的请求,并且做出响应的方法
*
* */
@Override
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
// TODO Auto-generated method stub
res.getWriter().println("hello servlet....");
}
<?xml version="1.0" encoding="UTF-8"?>
<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>WebExercise</display-name>
<welcome-file-list>
<welcome-file>index.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>test1</servlet-name>
<!-- Servlet的全路径 -->
<servlet-class>com.itheima.a_servlet.ServletDemo</servlet-class>
</servlet>
<!-- Servlet的映射 -->
<servlet-mapping>
<servlet-name>test1</servlet-name>
<!-- Servlet的访问路径 -->
<url-pattern>/ServletDemo</url-pattern>
</servlet-mapping>
</web-app>
查询地址:http://localhost:8080/WebExercise/ServletDemo
2.使用ServletRequest接受参数
getParameter — 用于接受一个名称对应一个值的数据
getparameterMap — 接受一个名称对应多个值得数据
getParameterNames — 用于接受表单中的所有数据,Map的Key是表单提交的参数,Map的value是提交参数的值。
getParameterValues — 用于获取表单中提交的所有参数的名称。
2.1Servlet的实现关系
- Servlet :接口
- GenericServlet : 通用的接口
- HttpServlet :Http接口,编写一个类继承HttpServlet,重写doget和doPost。
2.2Servlet ->Service -> Dao
3.servlet的生命周期
生命周期:一个对象从创建到销毁的过程
Servlet生命周期:Servlet从创建到销毁的过程
*何时创建:用户第一次访问Servlet创建Servlet的实例。
*何时销毁:当项目从服务器中移除的时候,或者关闭服务器的时候。
用户第一次访问Servlet的时候,服务器会创建一个Servlet的实例,那么Servlet中的init方法就会执行,任何一次请求服务器创建一个新的线程访问Servlet中的Service方法,在Service方法颞部根据请求的方式的不同调用DoXXX的方法(get请求调用doGet,,post调用doPost),当Servlet中服务器中移除,或者服务器关闭的时候,Servlet就会被销毁。
3.1Servlet的相关配置
【启动时创建Servlet】
Servlet默认是在第一次访问的时候创建的,现在让Servlet在服务器启动的时候创建好,进行对Servlet的配置。
在web.xml中在标签中进行配置:
*2 //Tomcat启动就加载。
【URL-Pattern的配置】
URL-Pattern配置方式共有三种:
1.完全路径匹配 : 以 / 开始 eg:/servletDemo04, /aaa/ServletDemo5 , /aaa/bbb/ServletDemo6
2.目录匹配 : 以 / 开始,需要以 * 结束。Eg:/* , /aaa/* , /aaa/bbb/*
3.扩展名匹配 : 不能以 / 开始,以* 开始的。eg:.do , .action ,
错误的写法: /.do
*完全路径匹配 > 目录匹配 > 扩展名匹配
3.2开发中路径的编写
相对路径:都是需要找位置的相对关系,不能以 / 开头
* ./当前路径 ../上一级目录
* 使用相对路径访问:
绝对路径:不需要找位置的相对关系,以 / 开始,
*绝对路径中氛围客户端路径和服务器端路径:
*客户端路径:一定要加工程名 /day09/ServletDemo06
*服务器端路径:不需要加工程名 /ServletDemo06
4.登录5秒后,跳转到另一个界面
【使用HTTP协议中的refresh头信息】
Refresh可以定时页面跳转,需要使用程序设置头信息才可以。
【response中设置响应头】
addHeader(String Name,String value);
setHeader(String name, String value);
例如:头信息:xxx:aaa
【使用JS实现读秒的效果】
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="Refresh" content="5;url =/WebExercise/demo5-refresh/index.html">
<title>success page</title>
<script type="text/javascript">
var time = 5;
window.onload = function(){
setInterval('changeTime()',1000);
}
function changeTime(){
time--;
document.getElementById("s1").innerHTML = time;
}
</script>
</head>
<body>
<h1>success</h1>
<h3>页面将在<span id="s1">5</span>秒后跳转</h3>
</body>
</html>
5登录次数
【ServletContext对象】
用来存取数据,****ServletContext对象存取数据,存的数据都是有一定作用的范围的,这种对象称为是域对象。
*setAttribute
*getAttribute
*removeAttribute
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
// 1.接收表单提交的参数
String username = request.getParameter("username");
String password = request.getParameter("password");
// 2.封装实体对象
User user = new User();
user.setUsername(username);
user.setPassword(password);
// 3.调用业务岑处理数据
UserService userService = new UserService();
try {
User existUser = userService.login(user);
// 4.根据处理结果显示信息
if (existUser == null) {
// 登录失败
response.getWriter().println("fail");
}else{
// 登录成功
response.getWriter().println("success");
// 记录次数。
int count = (int) this.getServletContext().getAttribute("count");
count++;
this.getServletContext().setAttribute("count", count);
response.setHeader("Refresh", "5;url=/WebExercise/showCount");
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.setContentType("text/html;charset=utf-8");
int count = (int)this.getServletContext().getAttribute("count");
response.getWriter().println("<h1>您是第"+count+"为登录成功的用户<h1>");
}
6.总结
【ServletConfig】获得Servlet的配置信息
getInitParameter(String name) — 获得Servlet的初始化参数。
getIntParameterNames(String name); —- 获得所有的Servlet的初始化参数的名称。
getServletContext()
getServletName() — 获得Servlet在web.xml中的配置的Name的值。
【ServletContext】是一个域对象
*作用范围:整个web工程
*创建:服务器启动的时候,tomcat服务器为每个web项目创建一个单独的ServletContext对象。
*销毁:服务器关闭的时候,或者项目从服务器移除的时候。
-> ServletContext的作用:
*1.用来获取全局初始化参数
*2.用来获得文件的MIME的类型。
*3.作为域对象存储数据
*4.用来兑取Web项目下的文件
7.读取Web工程下的文件
【需求】
现在有一个配置文件在web工程下 的src下,项目要发布到tomcat中,需要编写一段程序读取文件。