index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="demo01">ServletConfig配置</a><br/>
<a href="demo02">ServletConext上下文</a><br/>
<a href="demo03">作用域</a><br/>
<a href="demo04">重定向</a><br/>
<a href="demo05">请求转发</a><br/>
</body>
</html>
web.xml
<?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>day13</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>
<!--全局的参数 spring的全局配置-->
<context-param>
<param-name>contextLocation</param-name>
<param-value>class:applicationContext.xml</param-value>
</context-param>
<servlet>
<description></description>
<display-name>Demo01Servlet</display-name>
<servlet-name>Demo01Servlet</servlet-name>
<servlet-class>com.ujiuye.web.servlet.Demo01Servlet</servlet-class>
<!--参数信息-->
<init-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value>
</init-param>
<init-param>
<param-name>aaa</param-name>
<param-value>bbb</param-value>
</init-param>
<init-param>
<param-name>ccc</param-name>
<param-value>ddd</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>Demo01Servlet</servlet-name>
<url-pattern>/demo01</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>Demo02Servlet</servlet-name>
<servlet-class>text.web.servlet.Demo02Servlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Demo02Servlet</servlet-name>
<url-pattern>/demo02</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>Demo03Servlet</servlet-name>
<servlet-class>text.web.servlet.Demo03Servlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Demo03Servlet</servlet-name>
<url-pattern>/demo03</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>BookServlet</servlet-name>
<servlet-class>text.web.servlet.BookServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>BookServlet</servlet-name>
<url-pattern>/book</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>Demo04Servlet</servlet-name>
<servlet-class>text.web.servlet.Demo04Servlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Demo04Servlet</servlet-name>
<url-pattern>/demo04</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>Demo05Servlet</servlet-name>
<servlet-class>text.web.servlet.Demo05Servlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Demo05Servlet</servlet-name>
<url-pattern>/demo05</url-pattern>
</servlet-mapping>
</web-app>
ServletConfig
是一个servlet的配置类 ,专门配置本类(自己的servlet)的参数配置的相关的工作。
作用:获取一些servlet一些配置信息。
范围:只适用于自己的 servlet
Demo01Servlet.java
package text.web.servlet;
import java.io.IOException;
import java.util.Enumeration;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Demo01Servlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//配置对象
ServletConfig config = getServletConfig();
//获取信息
String encoding = config.getInitParameter("encoding");
System.out.println(encoding);
//GBK
//获取servlet的名称
String name = config.getServletName();
System.out.println(name);
//Demo01Servlet
Enumeration<String> names = config.getInitParameterNames();
while(names.hasMoreElements()) {
String key = names.nextElement();
String value = config.getInitParameter(key);
System.out.println(key+"...."+value);
}
//aaa...bbb
//ccc...ddd
//encoding...GBK
//上下文
//config.getServletContext();
//day02Servlet有设置
String val = (String)getServletContext().getAttribute("username");
System.out.println(val);
//zhangsan
//day03Servlet有设置
String str = (String)request.getAttribute("aa");
System.out.println(str);
//null
//day05Servlet有设置
String user = (String)request.getAttribute("user");
System.out.println(user);
//jack
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
ServletContext
context: 环境 上下文 整个项目都生效 项目的引用
这个类是整个项目全局的servlet类,可以获取每一个servlet的信息,比ServletConfig大
ServletContext:管理项目 全局信息 全局属性
this.getServletContext()
config.getServletContext()
context.getXXX
setAttribute(,)
getAttribute()
Demo02Servlet.java
package text.web.servlet;
import java.io.IOException;
import java.util.Enumeration;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Demo02Servlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//全局上下文对象
ServletContext context = getServletContext();
String initParameter = context.getInitParameter("contextLocation");
System.out.println(initParameter);
//class:applicationContext.xml
Enumeration<String> keys = context.getInitParameterNames();
while(keys.hasMoreElements()) {
String key = keys.nextElement();
System.out.println(key);
}
//contextLocation
String contextPath = context.getContextPath();
System.out.println(contextPath);
// /day13
//服务器信息
String serverInfo = context.getServerInfo();
System.out.println(serverInfo);
//Apache Tomcat/9.0.17 (服务器)
context.setAttribute("username", "zhangsan");
//设置属性
//获取属性 全局 作用整个项目
String val = (String)context.getAttribute("username");
System.out.println(val);
//zhangsan
//day03Servlet有设置
Object attribute = request.getSession().getAttribute("cc");
System.out.println(attribute);
//dd
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
作用域
指作用的范围, 在servlet作用域是可以存储值和数据。
解决值传递的问题 cookie session
request:单次请求 请求转发
session:整个会话 活化 钝化
context:整个项目
Demo03Servlet.java
package text.web.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Demo03Servlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//作用域 请求转发
request.setAttribute("aa", "bb");
String val = (String)request.getAttribute("aa");
System.out.println(val);
//bb
//session会话
request.getSession().setAttribute("cc", "dd");
Object attribute = request.getSession().getAttribute("cc");
System.out.println(attribute);
//dd
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
多方法请求:CRUD放在同一个Servlet
<form action=" ">
<input type="hidden" name="mark" value="save"/>
</form>
getParamater("mark")
判断
BookServlet.java
package text.web.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class BookServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String mark = request.getParameter("mark");
if("save".equals(mark)) {
save(request,response);
}else if("delete".equals(mark)) {
delete(request,response);
}else if("update".equals(mark)) {
update(request,response);
}else if("query".equals(mark)) {
query(request,response);
}
}
/*
* 查询功能
* */
private void query(HttpServletRequest request, HttpServletResponse response) {
System.out.println("查询");
}
/*
* 更新功能
* */
private void update(HttpServletRequest request, HttpServletResponse response) {
System.out.println("更新");
}
/*
* 删除功能
* */
private void delete(HttpServletRequest request, HttpServletResponse response) {
System.out.println("删除");
}
/*
* 添加功能
* */
private void save(HttpServletRequest request, HttpServletResponse response) {
System.out.println("添加");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
请求转发与重定向*****
forward: 转发 request
redirect:重定向
请求一次资源的两种处理结果。1.再次去访问另一个资源 2.内部协调,给浏览器一个响应
转发:使用请求对象,当请求到达服务器不终止而是去请求别的资源。
重定向:使用请求对象,当访问一个资源的时候返回再次请求的路径。
request.getRequestDispatcher(路径).forward(request,response);
url不发生变化,但是内部资源调转。
response.sendRirdect(路径)
url会发生变化,可以请求站外资源。
重定向
Demo04Servlet.java
package text.web.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Demo04Servlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//request.getHeader("Reference"); 防盗链
System.out.println("接收到请求了...");
//重定向 定位到站内资源 项目内资源 同时还可以定位到别的项目的资源
response.sendRedirect("https://baijiahao.baidu.com/s?id=1641796916171128791&wfr=spider&for=pc");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
请求转发
Demo05Servlet.java
package text.web.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Demo05Servlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//重定向 response
//请求转发 只能请求本站的资源没有问题 html
request.setAttribute("user", "jack");
request.getRequestDispatcher("/demo01").forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
Servlet3.0特性 注解模式 配置 注解
注解方式访问
jdk1.5 支持注解
servlet3.* 支持注解
@WebServlet("/demo06") 写在类上面
替代
<servlet>
<servlet-name>Demo05Servlet</servlet-name>
<servlet-class>com.ujiuye.web.servlet.Demo05Servlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Demo05Servlet</servlet-name>
<url-pattern>/demo05</url-pattern>
</servlet-mapping>