javaweb -- 4、Servlet系列之ServletContext、ServletConfig、JSP

目录

7

7.1:Servlet系列之ServletContext(程序上下文)和ServletConfig(程序配置)

2、ServletConfig:(程序配置)

8

8.1: Servlet系列之JSP介绍

1、Servlet与JSP的优点与缺点 ​

2、动态生成网页数据:

3、创建JSP同时也生成一个java类文件

4、Luyten软件可以查看配置文件内容:

5、(需要注意的地方)

8.2:

1、(输出变量)

2、(输出整个方法)

 


7

7.1Servlet系列之ServletContext(程序上下文)和ServletConfig(程序配置)

ServletContext

         不同用户发起的请求获取到的都是同一个对象, 该对象由用户共同拥有

API:javaweb -- 4、Servlet系列之ServletContext、ServletConfig、JSP_第1张图片

javaweb -- 4、Servlet系列之ServletContext、ServletConfig、JSP_第2张图片

java文件:ServletContextServlet(上下文程序)

*      作用:
*          不同用户发起的请求获取同一个对象
*      特点:
*          1、由服务器创建
*          2、所有用户共享同一个ServletContext对象
*          3、所有的servlet都可以访问到同一个ServletContext中的属性
*          4、每一个web项目对应的是一个ServletContext
public class ServletContextServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request,response);
    }
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

//获取servletContext对象方式:
        //方式一(用得较多)
        ServletContext context = this.getServletContext();
        //方式二
        ServletContext context1 = this.getServletConfig().getServletContext();
        //方式三
        ServletContext context2 = request.getSession().getServletContext();

        System.out.println(context==context1);
        System.out.println(context == context2);
        System.out.println(context1==context2);

//设置属性值(需要配合下面的java代码ServletContextServlet2)
        context.setAttribute("111","zhangsan");
//从web.xml中获取参数值(下面有代码解释)
        String value = context.getInitParameter("beijing");
        System.out.println(value); 

//获取某个文件的路径

        String path = context.getRealPath("web.xml");
        System.out.println(path);

//获取web项目的上下文路径

        String path2 = context.getContextPath();
        System.out.println(path2); 
    }
}

javaweb -- 4、Servlet系列之ServletContext、ServletConfig、JSP_第3张图片

web.xml文件:


    ServletContextServlet
    com.mashibing.ServletContextServlet


    ServletContextServlet
    /context

java文件:ServletContextServlet2(上下文程序2)

javaweb -- 4、Servlet系列之ServletContext、ServletConfig、JSP_第4张图片


@WebServlet(name = "ServletContextServlet2")
public class ServletContextServlet2 extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request,response);
    }
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        ServletContext context = this.getServletContext();
        String value = (String) context.getAttribute("111"); //改其他数字会null
        System.out.println(value);
    }
}

web.xml文件:


    ServletContextServlet2
    com.mashibing.ServletContextServlet2


    ServletContextServlet2
    /context2

第一次启动浏览器:

第二次启动浏览器:javaweb -- 4、Servlet系列之ServletContext、ServletConfig、JSP_第5张图片

(第一种,全局)//从web.xml中获取参数值:必须写最上面

(使用ServletContext对象可以获取web.xml中的全局配置文件,在web.xml中每个Servlet也可以进行单独的配置)


    beijing
    beautiful

====================================================================

    ···
    ···

···

网站计数器案例:用户访问次数,(刷新也算)

java文件:NumServlet(计数服务)

javaweb -- 4、Servlet系列之ServletContext、ServletConfig、JSP_第6张图片

public class NumServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request,response);
    }
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");

//获取Servletcontext对象
        ServletContext context = this.getServletContext();
//获取属性值
        Integer num = (Integer) context.getAttribute("num");
        if(num==null){
            context.setAttribute("num",1); //没访问进去,次数显示1
        }else{
            num++; //访问成功,计数加1
//将num设置会servletcontext对象中
            context.setAttribute("num",num);
        }
//获取输出对象
        PrintWriter out = response.getWriter();
        out.write("");
        out.write("");
        out.write("");
        out.write("");
        out.write("用户访问的次数是"+context.getAttribute("num")+"次");
        out.write("");
        out.write("");
    }
}

web.xml文件:


    NumServlet
    com.context.NumServlet


    NumServlet
    /num

javaweb -- 4、Servlet系列之ServletContext、ServletConfig、JSP_第7张图片(刷新也算访问)

新建项目:

2、ServletConfig(程序配置)

javaweb -- 4、Servlet系列之ServletContext、ServletConfig、JSP_第8张图片

java文件:ServletConfigServlet(程序配置)

public class ServletConfigServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request,response);
    }
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取对象
        ServletConfig config = this.getServletConfig();
        String value = config.getInitParameter("china");
        System.out.println(value);

//获取所有的key
        Enumeration initParameterNames = config.getInitParameterNames();
        while (initParameterNames.hasMoreElements()){
            String key = initParameterNames.nextElement();
            String value2 = config.getInitParameter(key);
            System.out.println(key+"----"+value2);
        }
    }
}

(第一种,局部)//从web.xml中获取参数值:必须写最上面

作用:方便每一个servlet获取自己单独的属性配置
特点:每一个servlet单独拥有一个servletConfig对象


    ServletConfigServlet
    com.mashibing.ServletConfigServlet
    
        china
        beijing
    

    
        hebei
        shijiazhuang
    



    ServletConfigServlet
    /config

8

8.1: Servlet系列之JSP介绍

javaweb -- 4、Servlet系列之ServletContext、ServletConfig、JSP_第9张图片

1、Servlet与JSP的优点与缺点 javaweb -- 4、Servlet系列之ServletContext、ServletConfig、JSP_第10张图片

Servlet:

    优点:逻辑处理方便

    缺点:界面表现麻烦

JSP:

    优点:界面表现方便

    缺点:逻辑处理麻烦

2、动态生成网页数据:

常见的几种动态网页技术:

    JSP(Java Server Page)

    ASP(Active Server Page)

    PHP(Hypertext Preprocessor) 超级文本预处理语言

3、创建JSP同时也生成一个java类文件

javaweb -- 4、Servlet系列之ServletContext、ServletConfig、JSP_第11张图片

java类中:

javaweb -- 4、Servlet系列之ServletContext、ServletConfig、JSP_第12张图片

4、Luyten软件可以查看配置文件内容:

javaweb -- 4、Servlet系列之ServletContext、ServletConfig、JSP_第13张图片javaweb -- 4、Servlet系列之ServletContext、ServletConfig、JSP_第14张图片

5、(需要注意的地方)

javaweb -- 4、Servlet系列之ServletContext、ServletConfig、JSP_第15张图片

8.2:

javaweb -- 4、Servlet系列之ServletContext、ServletConfig、JSP_第16张图片

javaweb -- 4、Servlet系列之ServletContext、ServletConfig、JSP_第17张图片

jsp文件:page

javaweb -- 4、Servlet系列之ServletContext、ServletConfig、JSP_第18张图片
局部代码块:
        可以将java代码跟页面展示的标签写到一个jsp页面中,java代码转译成的servlet(程序)文件中,java代码跟输出是保存在service(服务)方法中
        缺点:
            代码可读性比较差,开发比较麻烦

=====================================================================
javaweb -- 4、Servlet系列之ServletContext、ServletConfig、JSP_第19张图片  

idea中显示:

全局代码块:java文件中:javaweb -- 4、Servlet系列之ServletContext、ServletConfig、JSP_第20张图片
        定义公共的方法的时候需要使用全局代码块使用<%!%>,生成的代码在servlet类中
        调用的时候需要使用局部代码块

=====================================================================

1、(输出变量)

 

输出结果也可用:<% =a %>方式输出

比如:

      <% String i =“jsp简单”;%>

      <% =i %>

页面显示:

2、(输出整个方法)

=====================================================================

//contentType:表示浏览器解析响应信息的时候使用的编码和解析格式

//language:表示jsp要转译成的文件类型

//导入java.util.* 和java.lang.* 的包javaweb -- 4、Servlet系列之ServletContext、ServletConfig、JSP_第21张图片

//pageEncoding="utf-8" 是设置页面编码格式(改英文)

<%@ page contentType="text/html;charset=UTF-8" language="java" import="java.util.*,java.lang.*" pageEncoding="utf-8" %>

//turn:保留session对象
//false:不保留session对象

<%@ page session="true" %>

javaweb -- 4、Servlet系列之ServletContext、ServletConfig、JSP_第22张图片javaweb -- 4、Servlet系列之ServletContext、ServletConfig、JSP_第23张图片

创建jsp文件:error.jsp

添加:

javaweb -- 4、Servlet系列之ServletContext、ServletConfig、JSP_第24张图片 

javaweb -- 4、Servlet系列之ServletContext、ServletConfig、JSP_第25张图片(发生逻辑错误)

//errorPage:当页面发生逻辑错误的时候,跳转指定页面
<%@ page errorPage="error.jsp" isErrorPage="true" %>

//继承,要继承的父类(包名+类名)
<%@ page errorPage="error.jsp" extends="??" %>

<%
String path = request.getContextPath();
    System.out.println(path);

String basePath = request.getScheme()
+"://"
+request.getServerName()
+":"
+request.getServerPort()
+path
+"/";
    System.out.println(basePath);
%>

页面导入的方式javaweb -- 4、Servlet系列之ServletContext、ServletConfig、JSP_第26张图片
        静态导入:
            不会将静态导入的页面生成一个新的servlet文件,而是将两个文件合并
            优点:运行效率高
            缺点:两个页面会耦合到一起,两个页面中不能存在相同名称的变量,不利于维护
        动态导入:
            两个页面不会进行合并,分别生成自己的servlet文件,但是页面在最终展示的时候是合并到一起的
            优点:没有耦合,可以存在同名的变量
//jsp文件:staticImport(静态导入)javaweb -- 4、Servlet系列之ServletContext、ServletConfig、JSP_第27张图片

<%@ include file="staticImport.jsp"%>

//jsp文件:dynamicImport(动态导入)
<jsp:include page="dynamicImport.jsp">jsp:include>

创建:jsp文件:staticImport(静态导入)javaweb -- 4、Servlet系列之ServletContext、ServletConfig、JSP_第28张图片

调试:(该文件与主文件)

<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title //网页名称


<%
//int i= 200; //另一个文件不能有变量i(不能重名,会500)
%>
我是静态导入页面


创建:jsp文件:dynamicImport(动态导入)javaweb -- 4、Servlet系列之ServletContext、ServletConfig、JSP_第29张图片

调试:(该文件与主文件)

<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title //网页名称


我是动态导入


请求转发:(登录进去时,转发到另一个地址(程序))

javaweb -- 4、Servlet系列之ServletContext、ServletConfig、JSP_第30张图片

jsp文件:page

添加:

javaweb -- 4、Servlet系列之ServletContext、ServletConfig、JSP_第31张图片

 

jsp文件:forward(请求转发)

添加:

javaweb -- 4、Servlet系列之ServletContext、ServletConfig、JSP_第32张图片 (地址没变)
我是转发页面

 

jsp文件:page

添加:

javaweb -- 4、Servlet系列之ServletContext、ServletConfig、JSP_第33张图片

jsp文件:forward(请求转发)

添加:

<%=request.getParameter("china")%>

//横线 <%=request.getParameter("hebei")%>

javaweb -- 4、Servlet系列之ServletContext、ServletConfig、JSP_第34张图片

 

你可能感兴趣的:(javaweb,java)