JSP网站开发自学笔记

一、JSP指令

1、include指令:

    该指令是文件加载指令,用于在JSP文件中插入一个文件,这个文件可以包含文本或代码。
    <%@ include file="被包含文件的地址" %>

2、page指令:

    用来定义JSP页面的全局属性,即用来指定所使用的脚本语言、导入指定的类及软件包等,会作用于整个JSP页面。
    <%@ page 属性1=“属性值1” 属性2=“属性值2” %>
    //如果为一个属性指定多个值,这些值之间用逗号分隔。(只能给import属性指定多个值)
pahe指令一共有13个属性:
    1、contentType:指定JSP页面的编码方式和JSP页面相应的MIME类型。默认MIME类型为test/html,默认的字符集类型为charset=ISO-8859-1。
    2、language:声明所使用脚本语言的种类。
    3、pageEncodeing:指定页面编码格式。
    4、isELIgnored:指定JSP文件是否支持EL表达式。
    5、import:指定所导入的包。
    6、extends:指定JSP页面产生的Servlet继承的父类。
    7、session:指定JSP页面中使用Session对象的情况。
    8、buffer:指定输出缓冲区的大小,默认值为8KB。
    9、autoFlush:指定当前输出缓冲区即将溢出时,是否强制输出缓冲区内容。
    10、isThreadSafe:指定JSP文件支持多线程的情况。
    11、info:设置JSP页面的相关信息,即可以使用servlet.getServletInfo()方法获取到JSP页面中的文本信息。
    12、isErrorPage:指定JSP文件是否进行错误异常处理。
    13、ErrorPage:指定错误处理页面。当JSP页面运行出错时,会自动调用所指定的错误页面。

3、taglib指令:

    该命令定义一个标签库,以及自定义标签的前缀。

二、JSP内置对象

1、out对象:
    out.println();
    out.newLine();//换行
    out.getBufferSize()//获取当前缓冲区大小
    out.getRemaining()//当前缓冲区剩余字节数目
2、request对象:
    方法:
        void setAttribute(String name,Object value)//将指定属性的值设置为value
        Object getAttribute(String name)//获取指定的属性值。
        String getParameter(String name)//获取请求参数名为name的参数值。
        Enumeration getParameterNames()//获取所有请求参数的集合名字
        String[] getparameterValues(String name)//获取name请求参数的参数值
        void setCharacterEncoding(String encoding)//设定编码格式。
        
        request.getMethod()//请求方法名
        request.getRequestURI()//请求的资源
        request.getProtocol()//请求使用的协议
        request.getServerName()//请求的服务器IP
        request.getServerPort()//请求的服务器端口
        request.getRemtoeAddr()//客户端的IP地址
        request.getRemoteHost()//客户端的主机名 
3、response对象;
    
    封装由JSP产生的相应,并返回客户端以响应请求。response对象包含了从JSP页面返回客户端的所有信息。
    
    response对象经常用于添加Cookie、设置HTTP标题、发送HTTP重定向、设置响应内容的类型和状态,以及编码URL等任务
    
    response.setHeader(String,String)//设置头信息
    response.setIntHeader("Refresh",2);//刷新页面
    response.sendRedirect(String URL);//跳转页面,重定向JSP文件
    
    void addCookie(Cookie Cookie)//添加Cookie对象,用于在客户端保存特定信息。
        eg:
            Cookie mycoo=new Cookie("username","haha");
            mycoo.setMaxAge(3600);
            response.addCookie(mycoo);
    void addHeader(String name,String value)//添加HTTP头信息,并且发送到客户端
    void containsHeader(String name)//判断指定名字的HTTP文件头是否存在
    void setContentType(String contentType)//设置MIME类型与编码方式
    void sendError(int)//向客户端发送错误的状态码。

4、session对象:
    用来记录每个客户端的访问状态
    
    String getId()//返回session创建时由JSP容器所设定的唯一标识。
    long getLastAccessedTime()//返回用户最后一次通过session发送请求的时间(单位毫秒)
    int getMaxInactiveInterval()//返回session的实效时间。返回类型为long,常被转化为Date类型,
        eg:Date ctime=new Date(session.getCreation Time())
    boolean isNew()//判断是否为新的session,可用于判断是否为非法用户
    void invalidate()//清空session
    Object getAttribute(String name)//获取session范围内name属性的值
    void setAttribute(String name,Object value)//设置session范围内name属性的值为value并储存到session中
    void removeAttribute(String name)//删除session范围内name属性的值
5、application对象:
    用于获取和设置Servlet的相关信息。他的生命周期是从服务器启动直到服务器关闭为止,即一旦创建了application对象,对象将会一中航存在,直到服务器关闭。
    
    void setAttribute(String name,Object value)//将一个对象的值存放到application中,存放的方式采用键值对
    Object getAttribute(String name)//根据属性名获取application中存放的值。
6、page对象:
    代表JSP本身,只有在JSP页面内才是合法的,可以看做时this关键字的别名。
    
    getClass()//返回当前Object的类
    hashCode()//返回该Object的哈希代码
    toString()//把该Object类转换成字符串
    equals(Object o)//比较该对象和指定的对象是否相等
    
7、pageContext对象;
    获取JSP页面的request、response、session、application、exception等对象。
    
    forward(String url)//将页面转发到另一个页面
    getAttribute(String name)//获取参数值
    getAttributeNamesInScope(int scope)//获取某范围的参数名称的集合,返回职位Enumeration对象
    getException()//返回exception对象
    getRequest()//返回Request对象
    getResponse()//返回Response对象
    getSession()//返回session对象
    
8、config对象:
    获取服务器配置信息。
    
    getServletContext()//获取Serlet上下文
    getServletName()//获取Servlet服务器名
    getInitParameter(String name)//获取服务器中name参数的初始值
    getInitParameterNames()//获取服务器所有初始参数名称,返回值为Enumeration对象
    
9、exception对象:
    用于处理JSP文件执行时发生的所有错误和异常
    
    getMessage()//返回exception对象的异常信息字符串
    getLocalizedmessage()//返回本地化的异常错误
    toString()//返回关于异常错误的简单信息描述
    fillInStackTrace()//重写异常错误的栈的执行轨迹
    
    
10、页面跳转
    1.request.getRequestDispatcher()是请求转发,前后页面共享一个request ;
       response.sendRedirect()是重新定向 前后页面不是一个request .
    2.RequestDispatcher.forward()是在服务器端运行;
       HttpServletResponse.sendRedirect()是通过向客户浏览器发送命令来完成.
       所以RequestDispatcher.forward()对于浏览器来说是“透明的”;
       而HttpServletResponse.sendRedirect()则不是。
    3.ServletContext.getRequestDispatcher(String url)中的url只能使用绝对路径;
       而ServletRequest.getRequestDispatcher(String url)中的url可以使用相对路径。
       因为ServletRequest具有相对路径的概念;而ServletContext对象无次概念。

三、JSP动作标签:

1、包含标签
    此标签提供了一种在JSP中包含页面的方式。她既可以包含静态文件,也可以包含动态文件。
    eg:
    //其中flush为清空缓冲区
    
2、转发标签
    用于页面重定向的动作标签,作用为停止当前JSP页面的执行,二将客户端请求转交给另一个JSP页面。
    转发与重定向的区别:转发实在服务端进行的,不会引起客户端的二次请求,因此浏览器的地址栏不会发生任何变化,所以效率高于重定向。
    eg:
3、参数标签
    提供参数的附属动作标签,以“名一值”的形式为其他动作标签提供附加信息,一般与标签include,forward、plugin联合使用
    eg
  • 注:当jsp:param与jsp:include动作标签一起使用时,jsp:param提供的参数值可以传递到jsp:include加载的文件中去

  • 动作标签一起使用时,可以实现在跳转页面的同时,向转向的页面传递参数的功能。
    
  • Sun公司倡导是:用HTML完成JSP页面的静态部分,用Javabeans完成动态部分,从而真正意义上的静态和动态分隔。

  •   与JavaBean相关的动作标签包括:
    

    4、创建Bean标签jsp:useBean
    用来装载一个将在JSP页面中使用的JavaBean。该功能充分发挥了Java组件重用的优势,也提高了JSP使用的方便性。
    eg:

      其中:
      id:JavaBean的实例名。
      class:JavaBean的权限定类名。
      scope:引用的JavaBean实例的作用域。默认为当前页面
          该属性包含4个值:page、request、page session和application。
          其中:
              page:JavaBean实例在当前页面有效
              request:JavaBean实例在本次请求有效;
              page session:javaBean实例在本次session内有效;
              application:JavaBean实例在应用内一直有效。
    

    5、设置属性值标签jsp:setProperty
    获取到Bean实例后,便可以利用jsp:setProperty动作标签来设置或修改Bean中的属性值。
    eg:

      其中:
          name:要进行设置的JavaBean的实例名
          property:需要设置的JavaBean实例中的属性名
          value:要为property中指定的属性设置其属性值
    

    6、获取属性值标签jsp:getProperty
    用来提取指定Bean属性的值,并将其转换成字符串,然后输出。
    eg:

      其中:
          name:需要输出的JavaBean的实例名
          property:需要输出的JavaBean实例中的属性名
    

四、JavaBean

1、JavaBean是一种特殊的java类,即有默认构造方法----只有get和set方法的Java类对象
具有以下特点:
    1、JavaBean包含一个无参的构造方法。
    2、JavaBean的类访问权限必须是public的。
    3、JavaBean中属性的获取和设置需要使用getXxx()方法和setXxx()方法。对于Boolean类型的成员来说,可以使用isXxx()方法

2、设置JavaBean的属性
    1. 
        其中,property="*"表示从request对象中将所有与JavaBean属性名字相同的请求参数传递给相应属性的setter方法;
    2.
        表示向JavaBean实例firstBean的属性id中传入指定的值。其中value用来指定传入Bean中属性的值
    3.
        将request对象中的参数id传入到JavaBean实例fristBean中
    4.
        将request对象中的参数personid传入到JavaBean实例fristBean的属性id中。其中param用于指定使用哪个请求参数来作为Bean属性的值。

五、Servlet

1、servlet配置与Servlet映射:
        (1)采用注解配置:
            @WebServlet("/FristServlet")
            
        (2)web.xml文件中配置
        <--注册Servlet-->
    
        //Servlet描述信息
       	servlet学习
       	//Servlet的名称
       	fristservlet
       	//Servlet类的完整类名
       	com.study.fristservlet
       	//当web服务器启动时创建
       	1
    
    
    <--Servlet映射-->
    
        //Servlet名称
        fristservlet
     	//访问URL地址
     	/haha
    
    
    //缺省Servlet,当系统没有此网站时跳转此页面
    
        //Servlet名称
        fristservlet
     	//访问URL地址
     	/
    
            
            
            
2、eg
    import java.io.IOException;
    import javax.servlet.ServletConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    /**
     * Servlet implementation class fristservlet
     * servlet实现类fristservlet
     */
    @WebServlet("/fristservlet")
    public class fristservlet extends HttpServlet {
    	private static final long serialVersionUID = 1L;
           
        /**
         * @see HttpServlet#HttpServlet()
         * 构造方法
         */
        public fristservlet() {
            super();
            // TODO Auto-generated constructor stub
            //业务处理代码
        }
    
    	/**
    	 * @see Servlet#init(ServletConfig)
    	 * 初始化方法
    	 */
    	public void init(ServletConfig config) throws ServletException {
    		// TODO Auto-generated method stub
    	}
    
    	/**
    	 * @see Servlet#destroy()
    	 * 销毁代码
    	 */
    	public void destroy() {
    		// TODO Auto-generated method stub
    	}
    
    	/**
    	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
    	 * 处理http GET请求
    	 */
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		// TODO Auto-generated method stub
    		response.getOutputStream().write("GET请求!!".getBytes()); 
    		response.getWriter().append("Served at: ").append(request.getContextPath());
    	}
    
    	/**
    	 *处理HTTP POST请求
    	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
    	 */
    	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		// TODO Auto-generated method stub
    		response.getOutputStream().write("POST请求!!".getBytes());
    		doGet(request, response);
    	}
    
    	/**
    	 * @see HttpServlet#doPut(HttpServletRequest, HttpServletResponse)
    	 * 处理HTTP PUT请求
    	 */
    	protected void doPut(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		// TODO Auto-generated method stub
    	}
    
    	/**
    	 * @see HttpServlet#doDelete(HttpServletRequest, HttpServletResponse)
    	 * 处理HTTP DELETE请求
    	 */
    	protected void doDelete(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		// TODO Auto-generated method stub
    	}
    
    	/**
    	 * @see HttpServlet#doHead(HttpServletRequest, HttpServletResponse)
    	 * 处理HTTP head请求
    	 */
    	protected void doHead(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		// TODO Auto-generated method stub
    	}
    
    	/**
    	 * @see HttpServlet#doOptions(HttpServletRequest, HttpServletResponse)
    	 * 处理HTTp OPTIONS请求
    	 */
    	protected void doOptions(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		// TODO Auto-generated method stub
    	}
    
    	/**
    	 * @see HttpServlet#doTrace(HttpServletRequest, HttpServletResponse)
    	 * 处理HTTP TRACE请求
    	 */
    	protected void doTrace(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		// TODO Auto-generated method stub
    	}
    
    }
  • [x]

  • 3、ServletConfig对象:

          用途:
                  数据库配置,编码格式配置等
          
          在web.xml(Servlet)配置文件中,可以使用一个或多个标签为servlet配置一些初始化参数
          
          
              data
              xxx
          
          
          在Servlet中获取方法:
          
          //得到指定的:
          String value=this.getServletConfig().getInitParameter("data");
          System.out.println("value")
      
          //得到所有的
          Enumeration e=this.getServletConfig().getInitParameterNames();
          while(e.hasMoreElements()){
              String name=(String) e.nextElement();
              String value=this.getServletConfig().getInitParameter(name);
              System.out.print(name+"="+value);
          }
    

    4、ServletContext对象:
    当WEB容器启动时,他会为每个WEB应用程序都创建一个对应的ServletContext对象,它代表当前WEB应用

          ServletConfig对象中维护了ServletContext对象的引用
          可以通过ServletConfig.getServletContext方法获得ServletContext对象
          
          获取方法:
              ServletContext context=this.getServletConfig().getServletContext();
              
          由于一个WEB应用中的所有Servlet同享用一个ServletContext对象,所以多个Servlet通过ServletContext对象实现数据共享。
          ServletContext对象通常也被称之为context域对象。
          
          
          存取方法:
              context.setAttribute("data", "haha");
              context.getAttribute("data");
              
          用途:聊天室
          
          
          页面的转发:
              无参:
                  RequestDispatcher rdDispatcher=this.getServletContext().getRequestDispatcher("/index1.jsp");
                  rdDispatcher.forward(request, response);
                  
            有参数:
    

    5、properties:资源文件

          读取.properties文件内容
               url=jdbc:mysql://localhost:3306/test
              username=root
              password=root
              
              方法1:
              
      	        InputStream inputStream=	this.getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties");
          		Properties properties=new Properties();
          		properties.load(inputStream);
          		String url= properties.getProperty("url");
          		String username=properties.getProperty("username");
          		String password=properties.getProperty("password");
          		System.out.println(url+username+password);
      		
      		方法2:通过servletContext的getRealPath方法的得到资源的绝对路径,再通过传统流读取资源文件
      		        多用于文件下载
      		    String path=this.getServletContext().getRealPath("/WEB-INF/classes/db.properties");
      		    FileInputStream in=new FileInputStream(path);
      		    Properties properties=new Properties();
          		properties.load(inputStream);
          		String url= properties.getProperty("url");
          		String username=properties.getProperty("username");
          		String password=properties.getProperty("password");
          		System.out.println(url+username+password);
          	方法3、当读取资源文件的程序不是servlet,需要用类装载器去读取
          	    //sevlet调用其他程序,在其他程序中如何读取资源文件
          	    注意::
          	        资源文件不能太大
              	private static Properties dbconfig=new Properties();
              	static {
              		InputStream in=UserDao.class.getResourceAsStream("db.properties");
              		try {
              			dbconfig.load(in);
              		} catch (IOException e) {
              			// TODO Auto-generated catch block
              			throw new ExceptionInInitializerError();
              		}
              	}
              	//用静态代码块写,页面调用一次
              方法4、当需要每次刷新修改页面
                      通过类装载的方式得到资源位置,再通过传统方式读取资源文件的数据,这样可以读取到更新后的数据
                      String path2=UserDao.class.getClassLoader().getResource("db.properties").getPath();
              		try {
              			FileInputStream in=new FileInputStream(path);
              		} catch (FileNotFoundException e) {
              			// TODO Auto-generated catch block
              			e.printStackTrace();
              		}
    

    6、Servlet的常用类和接口:
    一、Servlet接口:
    void init(ServletConfig config)//初始化Servlet
    void service(ServletRequest req,ServletResponse res)//该方法用于相应客户端的请求。
    void destory()//清理方法,用于释放资源
    java.lang.String getServletInfo()//获取Servlet开发者定义的信息;
    ServletConfig getServletConfig()//获取Servlet的相关配置信息,该方法会返回指向ServletConfig的引用
    二、HttpServlet抽象类:
    void doPost(HttpServletRequest request,HttpServletResponsen response)
    void doGET(HttpServletRequest request,HttpServletResponsen response)
    三、GenericServlet抽象类:

      四、ServletRequest和ServletResponse接口
          当收到客户请求时,Servlet容器会创建一个ServletRequest对象,用来封装请求数据;
          创建一个ServletResponse对象,用来封装相应数据。
          这两个对象被作为servic()方法的参数传递Servlet;
          Servlet利用ServletRequest对象获取客户端的请求数据;
          利用ServletResponse对象发送最后的相应数据。
          ServletRequest和ServletResponse接口在javax.servlet包中定义;
          
          ServletRequest包含的部分方法:
              Object getAttribute(String name)//返回属性名为name的属性值。不存在返回null
              void setAttribute(String name,Object obj)//在请求中保存属性名为name的属性。
              String getContentType()//返回请求正文的MIME类型。若类型未知的话,返回null
              ServletInputStream getIntputStream()
              //返回一个输入流。使用该输入流可以以二进制的方式来读取请求正文。
              String getParameter(String name)
              //返回请求中name参数的值。如果name参数包含多个值,则返回第一个。
          ServletResponse包含的主要方法:
              ServletOutputStream getOutputStream()//返回一个ServletOutputStream对象,用来发送对客户端的响应。
              void setContentLength(int length)//设置响应数据的长度
              void setBufferSize(int size)//设置发送到客户端的数据缓冲区的大小。
              PrintWriter getWriter()//返回PrintWriter类的对象,将字符文本发送到客户端。
      
      五、HTTPServletRequest接口:
          ServletRequest接口表示Servlet的请求,而HTTPServletRequest接口是他的子接口。
          HttpServletRequest接口代表了客户端的HTTP请求。
          
          Cookie[] getCookies()
          //返回有服务器存放在客户端的Cookie数组,常常使用Cookie来区分不同的客户。
          HttpSession getSession()
          //获取当前的HTTP会话对象。
          HTTPSession getSession(boolean create)
          //获取当前的HTTP会话对象。不存在自动创建新回话
      六、HttpServletResponse接口:
          ServletResponse接口表示Servlet的响应,而HttpServletResponse接口是它的子接口。
          HTTPServletResponse接口表示对客户端的HTTP响应,
          
          public void addCookie (Cookie cookie)
          //向响应的头部加入一个Cookie
          
          void setStatus(int status)
          //将响应状态码设定为指定值,只用于不产生错误的响应
          
      七、HTTPSession接口:
          由Servlet容器负责创建,可以存放客户状态信息。
          
          String getId()//获取Session的ID
          Object getAttribute(String name)
          //根据name参数返回保存在HTTPSession对象中的属性值
          Enumeration getAttributeNames()
          //返回当前HTTPSession对象中所有的属性名
          isNew()//判断该Session是否属于新创建。如果是新创建的返回true
          void setAttribute(String name,Object value)
          //将名一值属性保存在HTTPSession对象中
          void invalidate()
          //使当前的Session实效,同时Servlet容器会释放掉HTTPSession对象占用的资源。
    

六、JSP文件操作
1、获取文件信息:
File类:
File(String filename)
File(String directoryPath,String filename);
File(File f,String filename)
***filename是文件名字;
***directoryPath是文件路径
***f是指定成一个目录的文件
方法:
String getName()//获取文件的名字。
boolean canRead()//判断文件是否可读;
boolean canWrite()//判断文件是否可被写入;
boolean exits()//判断文件是否存在
long length()//获取文件的长度

2、创建、删除web服务目录
    (1)创建目录
        boolean file.mkdir()//创建目录
    (2)列出目录下的所有文件
        如果File对象是一个目录
        String[] list()//用字符串形式返回目录下的全部文件
        File[] listFiles()//用File对象形式返回目录下的全部文件
    (3)列出指定类型的文件
        String[] list(FilenameFilter obj);//字符串形式返回目录下指定类型文件
        FIle[] listFiles(FilenameFilter obj)
        
        其中,FilenameFilter是一个接口,该接口有一个方法
        boolean accpt(File dir,String name)
        当向list方法传递一个实现该接口的对象时,list方法在列出文件后,
        将调用accept方法检查文件是否符合accept方法指定的目录和文件名字要求
3、删除文件和目录
    boolean delete()//删除指定文件或目录。

七、JDBC

    1、API:
        (1)Connection接口:
            用于连接特定数据库的连接会话,值有获得特定数据库的连接对象,才能访问该数据库,操作其中的数据表、视图和存储过程等
        (2)DriverManager类:
            主要作用于用户及驱动之间。它是JDBC中的管理层
            通过它可以管理数据库厂商提供的驱动程序
            并建立应用程序与数据库之间的连接
        (3)Statement接口:
            Statement接口封装了执行SQL啊啊语句和获取查询接口的基本方法。
        (4)PreparedStatement接口:
            用于将程序中的变量做查询条件的参数等。继承Statement接口
        (5)ResuletSet接口:
            封装了数据查询的结果集。
     
    2、    增删改eg:
            try {
    			//一、加载Mysql驱动程序
    			Class.forName("com.mysql.jdbc.Driver");
    			//二、定义要连接数据库的地址URL
    			String mysqlURL="jdbc:mysql://localhost:3306/jsp_db";
    			//三、调用DriverManage对象的getConnection()方法
    			Connection conn=(Connection) DriverManager.getConnection(mysqlURL,"root","root");
    			//四、创建语句对象
    			//(1)使用Connection接口的CreateStatement方法创建了一个Statement语句对象。
    			//用于传递不带参数的SQL语句给DBMS数据库管理系统来执行
    			Statement stmt=(Statement) conn.createStatement(); 
    			//(2)使用Connection接口的PrepareStatement方法创建一个PrepareStatement对象
    			//该对象用于传送带有一个或多个输入参数的SQL语句
    			PreparedStatement psm=(PreparedStatement) conn.prepareStatement("insert into tbl_user(name,password,email) values('haha','hehe','xixi')");
    			//(3)使用Connection接口的PrepareCall方法创建一个CallableStatement语句对象。
    			//用于调用储存过程
    			//CallableStatement csm=(CallableStatement)conn.prepareCall("{call validate(?,?)}");
    			//五、执行语句
    			//调用Statement接口的executeQuery、executeUpdate及execute三个方法执行SQL语句。
    			
    			//(1)execute方法用于执行select查询语句,返回单个结果集,保存在ResuletSet对象中
    			String sql="select * from tbl_user";``
    			ResultSet re=stmt.executeQuery(sql);
    			//(2)executeUpdate方法用于执行SQL的INSERT、UPDATE和DELETE等DML
    			//此时返回SQL语句执行时操作的数据表中受影响的行数,返回值是一个整数
    			//executeUpdate方法还可以用于执行SQL的CREATE TABLE、DROP TABLE等DDL(Data Definition Language)
    			//数据库定义语言语句。此时返回值为0
    			String sql1="DELETE FROM tbl_user WHERE id='2'";
    			int n=stmt.executeUpdate(sql1);
    			System.out.println(n);
    			while(re.next()) {
    				System.out.println(re.getString("name"));
    			}
    		
    			
    		} catch (Exception e) {
    			// TODO: handle exception
    		}finally{
    		    re.close();
    			stmt.close();
    			conn.close();
    		}
    3、批量操作
        将批量的SQL语句一次性发送到数据库中进行执行,从而解决多次与数据库连接所产生的速度瓶颈··
        eg:
            java.sql.Connection conn=null;
    		java.sql.PreparedStatement ps=null;
    		try {
    			Class.forName("com.mysql.jdbc.Driver");
    			conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/jsp_db","root","root");
    			String sql="insert into tbl_user(id,name,password,email) value(?,?,?,?)";
    			ps=(PreparedStatement)conn.prepareStatement(sql);
    			
    			for(int i=0;i<10;i++) {
    				ps.setString(1,"学生"+i);
    				ps.setString(2, "密码"+i);
    				ps.setString(3, "邮箱"+i);
    				ps.addBatch();
    			}
    			int[] rows=ps.executeBatch();
    			System.out.println(rows.length);
    			
    		
    		} catch (Exception e) {
    			System.out.println(e);
    			// TODO: handle exception
    		}finally {
    			try {
    				ps.close();
    				conn.close();
    			} catch (SQLException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    			
    		}

八、EL表达式

1、EL的基本语法:
    "${"开头,"}"结尾,中间为合法的表达式
    ${expression}
        expressin:用于指定要输出的内容,可以是字符串,
                也可以是有EL运算符组成的表达式。
    eg:
        <%
    	session.setAttribute("name", "haha");
    	%>
    	${name}
    	
    	${"haha"}
    EL的特点:
        (1)EL可以与JSTL结合使用,也可以与JavaScript语句结合使用。
        (2)EL中会自动进行类型转换。
        (3)EL不仅可以访问一定变量,而且还可以访问JavaBean中的属性以及
            嵌套属性和集合对象。
        (4)在EL中可以执行算数运算,逻辑运算,关系运算和条件运算等。
        (5)在EL中可以获得命名空间(PageContext对象)
        (6)在使用EL进行除法运算时,如果0作为除数,则返回无穷大Infinity
        (7)在EL中可以访问JSP的作用域(request,session,application,page)
        (8)扩展函数可以与Java类的静态方法进行映射。

2、与低版本的环境箭筒-----禁用EL
    安装的web服务器能够支持Servlet2.4/JSP2.0可以使用EL
    
    1.使用斜杠"\"符号
        \${expression}
    2.使用page指令
        <%@ page isELIgnored="boolean"%>//是否禁用
    3.在web.xml文件中配置元素
        
        	
      		    *.jsp
      		    true
             
       

3、EL保留关键字:
    and,eq,gt,true,instanceof,div,or,ne,le,False,empty,mod,not,It,ge,null
4、通过EL访问数据:
    (1)通过EL提供的"[]"和"."运算符可以访问数据。通常情况下,这两个是等价的,可以相互替换
    eg:
        
        
        ${person.name}或者${person[name]}
    注意:
        当对象的属性名中包括一些特殊的符号(.或者-)的时候
        只能用${person[name]};
  
    (2)数组元素的获取:
        应用"[]"可以获取数组的指定元素,但是"."运算符则不能。
        eg:
            获取request范围中的数组arrBook中的第一个元素:
                ${arrBook[0]}
        eg:
            <%
        		String[] arr={"123","456","789"};
        		//定义一位数组
        		request.setAttribute("book", arr);
        		//将数组保存到request对象中
        	%>
        	<%
        		String[] arr2=(String[])request.getAttribute("book");
        		//获取保存到request范围内的变量
        		for(int i=0;i
        			${I}:${book[I]}
        			//输出第n个元素
        	<%
        		}
        	%>
        必须将循环变量i保存到request范围内的变量中,否则将不能正确访问数组
        
        
       
        
    (3)List集合元素的获取
        应用"[]"运算符可以获取List集合中的指定元素,但是"."运算符则不能
        eg:
            向session域中保存一个包含3个元素的List集合对象,并应用El输出该集合的全部元素
            <%
        		List list=new ArrayList();
        		list.add("相框");
        		list.add("笔筒");
        		list.add("鼠标垫");
        		request.setAttribute("goodsList",list);
        	%>
        	<%
        		List list1=(List)request.getAttribute("goodsList");
        		for(int i=0;i
        			${I}:${goodsList[I]}
        	<%} %>
        	
5、在EL中判断对象是否为空
    ${empty user}
        空的话返回true

6、在EL中进行逻辑关系判断
    (1)、关系运算符:
        ==或eq; !=或ne; <或lt; >或gt; <=或le; >=或ge
    (2)、逻辑运算符
        &&或and; ||或and; !或not;
7、在EL中进行条件运算:
    格式:
        ${条件表达式?表达式1:表达式2}
    说明:
        条件表达式:用于指定一个条件表达式,该表达式的值为Boolean型。可以由关系运算符、逻辑运算符和empty运算符组成。
        表达式1:用于指定当条件表达式为true时,返回的值;
        表达式2:用于指定当条件表达式的值为false时,返回的值;
8、EL的隐含对象:
    为了能够获得Web应用程序中的相关数据
    
    一、页面上下文对象:
        页面上下文对象为pageContext,用于访问JSP内置对象。
        
        1、访问request对象:
            通过pageContext获取JSP内置对象中的request对象:
                ${pageContext.request}//获取request对象后,可以通过该对象获取与客户端相关的消息
            。
        2、访问response对象:
            ${pageContext.response}//获取响应相关信息
            
        3、访问out对象:
            ${pageContext.out}//获取与输出相关的信息
        4、访问session对象:
            ${pageContext.session}//获取JSP内置对象中的session对象相关的消息
        5、访问exception对象
            ${pageContext.exception}//获取JSP页面的异常信息
        6、访问page对象:
            ${pageContext.page.class}//获取当前页面的类文件
        7、访问ServletContext对象:
            ${pageContext.servletContext}//获取Servlet上下文信息
    二、访问作用域范围的隐含对象:
        1、pageScope隐含对象:
            用于返回包含page(页面)范围内的属性值的集合,返回值为java.util.Map对象
            eg:
                
            	
            	用户名为:${pageScope.person.name}
        2、requestScope隐含对象:
            返回包含request请求范围内的属性值集合,返回值为java.util.Map;
            eg:
                <%request.setAttribute("userName","haha")%>
                ${requestScope.userName}
        3、sessionScope隐含对象:
            返回包含session会话范围内的属性值的集合,返回值为java.util.Map;
            eg:
                 <%session.setAttribute("userName","haha")%>
                ${requestScope.userName}
        4、applicationScope隐含对象:
            用于返回包含application范围内的属性值的集合
            eg:
                <%application.setAttribute("message","haha")%>
                ${applicationScope.message}
            
    三、访问环境信息的隐含对象:
        1、param对象:
            用于获取请求参数的值,应用在参数值只有一个的情况下。返回的结果为字符串
            eg: 
                
                ${param.name1}
        2、paramValues对象:
            请求参数名对应多个值时,用此对象获取请求参数的值。返回结果为数组
            eg:
                ${paramValues.affect[0]}
        3、header和headerValue对象
            用于获取HTTP请求的一个具体的header的值,
            当一个header用于多个不同的值的时候用headerValues对象
            eg:
                ${header.connection}或${headerValues["connection"]}
        4、initParam对象:
            用于获取Web应用初始化参数的值。
                eg:
                    
                        author
                        mr
                    
                ${initParam.author}
        5、cookie对象:
            用来获取coolie对象,但是如果获取cookie中的值,需要使用cookie对象中value属性:
            <%Cookie cookie =new Cookie("user","mrbccd");
            responser.addCookie(cookie);
            %>
            ${cookie.user.value}

9、定义和使用El的函数:
    (1)编写一个Java类,并在该类中编写公用的静态方法,用于实现自定义EL函数的具体功能。
    (2)编写标签库描述文件,对函数进行声明。
        该文件的扩展名为.tld,被保存到Web应用的WEB-INF文件夹下;
    (3)在JSP页面中引用标签库,并调用定义的EL函数,实现相应的功能
    
    .tld文件创建方法:
        (1)New ---->other........
        (2).输入xml ----> XML File ----> 将默认的NewFile.xml更改为   xxx.tld---->Next
        (3)Create XML file from a DTD file ----> Next
        (4)Select XML Catalog entry
        (5)选择-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN----->Next

九、JSTL核心标签库

    1、标签库:
        (1)核心标签库:
            <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
            用于完成JSP页面的常用功能:
                其中:
                    表达式标签:
                    URL标签:
                    流程控制标签:
                    循环标签包括:
                
                :将表达式的值输出到JSP页面中,相当于JSP<%=表达式%>
                :在指定范围内定义变量,或为指定的对象设置属性值
                :从指定的JSP范围中移除指定的变量
                :捕获程序中出现的异常,相当于JAVA语言中的try...catch
                :导入站内或其他网站的静态和动态文件到Web页面中。
                :将客户端发出的request请求重定向到其他URL服务端
                :使用正确的URl重写规则构造的一个URl
                :为其他标签提供参数信息,通常与其他标签结合使用。
                :根据不同的条件去处理不同的业务,和java中的if语句类似,但是没有else
                :相当于switch
                根据循环条件,遍历数组和集合类中的所有或部分数据
                迭代字符串中由分隔符分隔的各成员
        (2)格式标签库:
            <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
            用于处理和解决国际化相关的问题。
        (3)Sql标签库
            <%@ taglib prefix="sql" uri="https://java.sun.com/jsp/jstl/sql"%>
            提供了基本的访问关系型数据的能力,可以简化对数据库访问。
        (4)XML标签库
            <%@ taglib prefix="sql" uri="https://java.sun.com/jsp/jstl/sql"%>
            可以处理和生成XML的标记,可以方便的开发基于xml的Web应用
        (5)函数标签库
            <%@ taglib prefix="sql" uri="https://java.sun.com/jsp/jstl/sql"%>
            用于完成分解字符串,连接字符串,返回子串,确定字符串是否包含特点的子串等功能。
            
    
    2、配置JSTL:
        将javax.servlet.jsp.jstl-api-1.2.1.jar和javax.servlet.jsp.jstl-1.2.1.jar;复制到WEB-INF\lib路径
        
    3、表达式标签:
        (1)输出标签:
            语法1、
                
            语法2、
                
                    defaultValue
                
            解释:
                value:
                    用于指定将要输出的变量或表达式。为Object,可以使用EL
                escapeXml
                    可选属性,用于指定是否转换特殊字符。器属性值为true或false,
                    默认true,表示转换,即将HTML标签转换为转义字符,在页面中显示出了HTML标签;
                    如果是false,则将其中的html、xml解析出来。
                    ---------------------------------------------------------
                    字符        字符实体代码    |    字符        字符实体代码
                      <             <        |      >                >
                      ,             '      |       "               "
                      &             &
                default属性:
                    用于指定当value属性值等于null时,将要显示的默认值。如果没有指定该属性,将输出空的字符串
                      
        (2)变量设置标签
            语法1:
                在scope指定的范围内将变量值储存到变量中。
                
            语法2:
                
            语法3:
                将变量值储存在target属性指定的目标对象的propName属性中。
                
            语法4:
                将标签体储存到target属性指定的目标对象的propName属性中。
                
                    标签体
                
                
            解释:
            ----------------------------------------------------------------
                var:用于指定变量名。通过该标签定义的变量名,可以通过EL指定为的value属性的值
                value:用于指定变量值,可以使用EL
                scope:用于指定变量的作用域,默认值为page。可选值包括page、request、session、application
                target:用于指定储存变量值或者标签体的目标对象,可以是JavaBean或Map集合对象
                property:用于指定目标对象储存数据的属性名
                
            eg:
                
            	
            	
            	
            	
            	wgh
            	
                
                
        (3)变量移除标签
            
            
            解释:
                var:用于指定要移除的变量名。
                scope属性:用于指定变量的有效范围,可选值:page、request、session、application。
                
        (4)捕获异常标签:
            
            ...//可能存在异常的代码
            
            
            解释:
                var属性:可选属性,用于指定储存异常信息的变量。
        (5)导入标签
                语法1:
                    
                        标签体
                    
                语法2:
                     
                        标签体
                    
                解释:
                --------------------------------------------------------------------
                url:用于指定被导入的文件资源的URL地址。
                context:  上下文路径,用于访问同一个服务器的其他Web应用,其值必须"/"开头
                var:用于指定变量名称。String类型
                scope:用于指定变量的存在范围,默认值为page,可选值为page、request、session和application
                varReader:用于指定一个变量名,该变量用于以Reader类型储存被包含的文件内容
                charEncoding:用于指定被导入文件的编码格式
                标签体:可选,如果需要为导入的文件传递参数,则可以在标签体的位置通过标签设置参数
                
            eg:
                1、
                       <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
                    
                    
                    	
                    
                
                2、${param.typeList}
        (6)动态生成URL标签
            语法1:
                
            语法2:
                
                    
                    ...
                    //可以有多个
                
                
            解释:
                value:用于指定将要处理的URL地址,可以使用EL
                context:上下文路径,用于访问同一个服务器的其他Web工程,其值必须以"/"开头;
                var:属性:用于指定变量名称,该变量用于保存新生成的URL地址
                scope属性:用于指定变量的存在范围。
        
        (7)、重定向标签
            语法1、该语法格式没有标签体,并且不添加传递到目标路径的参数信息。
                
            语法2、该语法格式向客户请求重定向到目标路径,并且在标签体重使用标签传递其他参数
                
                    
                    ...
                
            说明:
                url:必选属性,用于指定待定向资源的URL,可以使用EL。
                context属性:用于在使用相对路径访问外部context资源时,指定资源的名字
        (8)传递参数标签
            
            说明:
                url:用于指定参数名,可以引用EL
                value:用于指定参数值,可以引用EL。
        
        (9)条件判断标签
            语法1、
                
            语法2、
                 
                    标签体
                
            解释:
                test:必选属性,用于指定条件表达式,可以使用EL
                var:可选属性,用于指定变量名,该变量用于保存test属性的判断结果。
                scope:用于指定变量的有效范围,默认为page。可选值有page、request、session和application
        (10)条件选择标签
            
                标签体 //由标签和标签组成
            
            
        (11)条件测试标签
            
                标签体
            
        (12)其他条件标签
            
                标签体
            
        (13)循环标签
            语法1:集合成员迭代
                
                    标签体
                
            语法2:数字索引迭代
                
                标签体
                
            解释:
                item:用于指定被循环遍历的对象,多用于数组和集合类。该属性的属性值可以是数组、集合类、字符串和枚举类型,并且可以通过    EL进行指定
                var:用于指定循环体的变量名,该变量用于储存items指定的对象的成员
                begin:用于指定循环的其实为止,如果没有指定,则从集合的第一个值开始迭代。可以使用EL
                end:用于指定循环的终止位置:如果没有指定,则一直迭代到集合的最后一位。可以使用EL
                step:用于指定循环的步长。可以使用EL
                varStatus:用于指定循环的状态变量,该属性还有4个状态属性
                标签体:可以是JSP页面可以显示的任何元素
            --------------------------------------------------------------------    
            varStatas属性:
                index   int     当前循环的索引值,从0开始
                count   int     当前痪的循环技术,从1开始
                frist   boolean 是否为第一次循环
                last    boolean 是否为最后一次循环
        
        (14)迭代标签
        
            
                标签体
            
            
            ------------------------------------------------------------------------------
            items:用于指定要迭代的String对象,该字符串通常由指定的分隔符分隔
            delims:用于指定分隔字符串的分隔符,可以同时又多个分隔符
            var:用于指定变量名,该变量中保存了分隔后的字符串
            begin:用于指定迭代开始的位置,引索引从0开始
            end:用于值定迭代的结束位置
            step:用于指定迭代的步长,默认步长为1
            varStatus:用于指定循环的状态变量,同标签一样
            标签体:可以是JSP页面可以显示的任何元素

你可能感兴趣的:(学习,java,jsp,网站开发,java)