目录
作用
1、获取上下文路径
jsp/html :href/src(写路径:最好使用全局路径):绝对不会出现404
html:
http://localhost:8080/URI
代码操作:
方法一:
//1)先获取ServletContext 接口(web容器反射创建)
//public ServletContext getServletContext()
ServletContext servletContext = this.getServletContext();
//2)获取上下文路径 String getContextPath();
String contextPath = servletContext.getContextPath();
*******输出 /Servlet_jsp_war_exploded (是URI的一部分)
方法二:
//简化格式
//HttpServletRequest
//获取上下文 输出 /Servlet_jsp_war_exploded (是URI的一部分)
// 路径 String getContextPath();
String contextPath = request.getContextPath();
System.out.println(contextPath);
获取其他信息:
//获取URL :http://localhost:8080/Servlet_jsp_war_exploded/contextDemo1
String url = request.getRequestURL().toString();
System.out.println("url:"+url);
//获取URI :Servlet_jsp_war_exploded/contextDemo1
String uri = request.getRequestURI();
System.out.println("uri:"+uri);
//获取上下文:/Servlet_jsp_war_exploded
String contextPath = request.getContextPath();
System.out.println(contextPath);
//获取协议版本号:Http/1.1
String protocol = request.getProtocol();
System.out.println("protocol:"+protocol);
//获取默认提交方式:GET
String method = request.getMethod();
System.out.println("method:"+method);
//获取请求头信息
//String getHeader(请求头名称)---> 获取内容
String header = request.getHeader("User-Agent");//用户使用的浏览器类型
if(header.contains("Chrome")){
System.out.println("你使用的谷歌浏览器");
}else if(header.contains("firefox")){
System.out.println("你使用的火狐浏览器");
}else{
System.out.println("浏览器未知...");
}
2、请求转发--(本质属于"服务器行为")
当前请求当前后台/contextDemo3 跳转到前前台 login.html 登录页面中
1)配置
<servlet>
<servlet-name>ServletContextDemo3</servlet-name>
<servlet-class>com.qf.servletcontext_03.ServletContextDemo3</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ServletContextDemo3</servlet-name>
<url-pattern>/contextDemo3</url-pattern>
</servlet-mapping>
2)设置前端代码login.html文件
login.html
3)基本代码
方法一:
ServletContext servletContext = this.getServletContext();
//public RequestDispatcher getRequestDispatcher(String path)
//获取当前项目的请求分发器(接收web客户端的请求之后,将请求通过服务器进行转发到指定的页面上)
//路径必须"/"
RequestDispatcher requestDispatcher = servletContext.getRequestDispatcher("/login.html");
//public void forward(ServletRequest request, ServletResponse response)
//从当前servlet后台转发到前台资源地址上
requestDispatcher.forward(request,response);
方法二:
//请求转发的简写格式
//public RequestDispatcher getRequestDispatcher(String path)被封装请求对象中
//请求转发不需要携带上下文路径
//request.getRequestDispatcher("/login.html").forward(request,response);
request.getRequestDispatcher("/WEB-INF/hello.html").forward(request,response);
4)请求转发的特点
1、地址栏没有变化,始终访问后台某个地址
2、请求转发只能访问当前项目下的资源文件(html/jsp),以及包含WEB-INF资源文件
将jsp/html放在WEB-INF:为了数据安全(只能通过请求转发来访问)
3、请求转发的整个过程:是服务器行为,由web容器内部通过RequestDispaticher分发器来完成的事情,请求对象request对象一致
有业务数据需求,需要在jsp中获取后台接口数据,那么只能请求就转发,HttpServletRequest:域对象
4、请求转发不能跨工程访问别的资源文件,只能在当前项目下访问
3、获取全局参数
1)配置
<!--全局参数-->
<context-param>
<!--参数名称-->
<param-name>characterEncoding</param-name>
<!--参数值-->
<param-value>utf-8</param-value>
</context-param>
<servlet>
<servlet-name>ServletContextDemo2</servlet-name>
<servlet-class>com.qf.servletcontext_03.ServletContextDemo2</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ServletContextDemo2</servlet-name>
<url-pattern>/contextDemo2</url-pattern>
</servlet-mapping>
2)基本代码
//获取ServletContext对象
ServletContext servletContext = this.getServletContext();
//获取全局参数
//String getInitParameter(String var1);
String value = servletContext.getInitParameter("characterEncoding");
System.out.println("value:"+value);
//解决post提交的中文乱码
request.setCharacterEncoding(value);
//解决响应的乱码
response.setContentType("text/html;charset="+value+"");
response.getWriter().write("Servletcontext的作用2,获取全局参数配置");
4、域对象
1)什么是域对象
就是可以在不同servlet之间及进行“数据共享\数据传输” ---- web(容器)
2)域对象
servletContext:作为域对象去使用,范围:整个web应用程序
public void setAttribute(String name, Object object)
将指定的Object对象绑定在属性名称上,name必须唯一
public Object getAttribute(String name):获取在域对象中绑定的指定内容,通过属性名称
public void removeAttribute(String name) 从域对象中删除绑定的内容
3)域对象的数据类型
数据类型:PageContext 对象名称:page域 范围:在某一个jsp页面中有效
HttpServletRequest request 在一次请求中有效
HttpSession session 在一次会话中有效(存储在服务器端)
ServletContext context/application 全局对象,在整个web工程下有效(web容器一直处于运行状态)
4)基本代码
配置xml文件
<servlet>
<servlet-name>ServletDemo1</servlet-name>
<servlet-class>com.qf.servletcontext_04.ServletDemo1</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ServletDemo1</servlet-name>
<url-pattern>/demo1</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>ServletDemo2</servlet-name>
<servlet-class>com.qf.servletcontext_04.ServletDemo2</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ServletDemo2</servlet-name>
<url-pattern>/demo2</url-pattern>
</servlet-mapping>
user类
public class User{
private String username ;
private String password ;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User{" +
"username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}
方式一:
//ServletDemo1
public class ServletDemo1 extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1)获取全局对象
ServletContext servletContext = this.getServletContext();
//2)public void setAttribute(String name, Object object)
List<String> list = new ArrayList<>() ;
list.add("eric") ;
list.add("jakcy") ;
list.add("Lee") ;
servletContext.setAttribute("list",list);
protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
doGet(request,response);
}
}
//ServletDemo2
public class ServletDemo2 extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//1)获取全局对象
ServletContext servletContext = this.getServletContext();
//2)当前域对象中获取数据
//public Object getAttribute(String name):获取在域对象中绑定的内容,通过属性名称
List<String> list = (List<String>) servletContext.getAttribute("list");
for (String s : list) {
System.out.println(s);
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request,response);
}
}
方法二:
//ServletDemo1
User user = new User() ;
user.setUsername("张三");
user.setPassword("123456");
//将属性名称对应的值进行绑定
servletContext.setAttribute("user",user);
System.out.println("保存数据成功...");
//ServletDemo2
User user = (User) servletContext.getAttribute("user");
System.out.println("用户名是:"+user.getUsername());