目录
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、(输出整个方法)
ServletContext:
不同用户发起的请求获取到的都是同一个对象, 该对象由用户共同拥有
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);
String path2 = context.getContextPath();
System.out.println(path2);
}
}
web.xml文件:
ServletContextServlet
com.mashibing.ServletContextServlet
ServletContextServlet
/context
java文件:ServletContextServlet2(上下文程序2)
@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
(第一种,全局)//从web.xml中获取参数值:必须写最上面
(使用ServletContext对象可以获取web.xml中的全局配置文件,在web.xml中每个Servlet也可以进行单独的配置)
beijing
beautiful
====================================================================
···
···
···
网站计数器案例:用户访问次数,(刷新也算)
java文件:NumServlet(计数服务)
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
新建项目:
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
Servlet:
优点:逻辑处理方便
缺点:界面表现麻烦
JSP:
优点:界面表现方便
缺点:逻辑处理麻烦
常见的几种动态网页技术:
JSP(Java Server Page)
ASP(Active Server Page)
PHP(Hypertext Preprocessor) 超级文本预处理语言
java类中:
jsp文件:page
局部代码块:
可以将java代码跟页面展示的标签写到一个jsp页面中,java代码转译成的servlet(程序)文件中,java代码跟输出是保存在service(服务)方法中
缺点:
代码可读性比较差,开发比较麻烦
=====================================================================
全局代码块:java文件中:
定义公共的方法的时候需要使用全局代码块使用<%!%>,生成的代码在servlet类中
调用的时候需要使用局部代码块
=====================================================================
输出结果也可用:<% =a %>方式输出
比如:
<% String i =“jsp简单”;%>
<% =i %>
=====================================================================
//contentType:表示浏览器解析响应信息的时候使用的编码和解析格式
//language:表示jsp要转译成的文件类型
//导入java.util.* 和java.lang.* 的包
//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" %>
创建jsp文件:error.jsp
添加:
//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);
%>
页面导入的方式
静态导入:
不会将静态导入的页面生成一个新的servlet文件,而是将两个文件合并
优点:运行效率高
缺点:两个页面会耦合到一起,两个页面中不能存在相同名称的变量,不利于维护
动态导入:
两个页面不会进行合并,分别生成自己的servlet文件,但是页面在最终展示的时候是合并到一起的
优点:没有耦合,可以存在同名的变量
//jsp文件:staticImport(静态导入)
<%@ include file="staticImport.jsp"%>
//jsp文件:dynamicImport(动态导入)
<jsp:include page="dynamicImport.jsp">jsp:include>
调试:(该文件与主文件)
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
Title //网页名称
<%
//int i= 200; //另一个文件不能有变量i(不能重名,会500)
%>
我是静态导入页面
调试:(该文件与主文件)
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
Title //网页名称
我是动态导入
请求转发:(登录进去时,转发到另一个地址(程序))
jsp文件:page
添加:
jsp文件:forward(请求转发)
添加:
(地址没变)
jsp文件:page
添加:
jsp文件:forward(请求转发)
添加:
<%=request.getParameter("china")%>
//横线
<%=request.getParameter("hebei")%>