Javawbe的实战案例

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

目录

文章目录

一、maven的一些注意事项 

 二、servlet

1.构建一个空maven项目,删掉src文件,重新导入依赖,建立一个新的module

1.1  子类

 1.2 父类

 二、子类的web.xml配置最新的版本自带的有点旧

 2.1 定义一个java类

2.1、编写servlet映射

2.2 /*IDEA的Tomcat出现乱码问题解决如下*/​编辑

2.3 

 2.4 Servlet

2.5mapping 问题 

 *.bug问题

Element ‘web-app‘ cannot have character [children], because the type‘s content type is element-only.

2.6  servletcontext对象

2.7读取资源类

properties

 2.8HttpServletsponse

 2.9  实现重定向

 3.0 HttpServletRequest (重要)




一、maven的一些注意事项 

1.配置问题 

1.Tomcar闪退

  

2.每次重复配置maven 

 

 3.配置好的pom.xml字段含义

 4.maven下main文件下的改变

5. Tomcat官方例子源代码

 

 6.导入官方依赖

(1)去官网找到需要的依赖

(2) 放到</dependencies> </dependencies>里,再刷新下

 二、servlet

(1).是sun公司开发的动态web技术

(2).servlet是sun公司下的一个API接口,实现的话只要Java类部署到web中、编写一个类,实现接口

把实现的servlet的Java程序叫servlet

1.构建一个空maven项目,删掉src文件,重新导入依赖,建立一个新的module

1.1  子类


//子类有的的依赖
<parent>
        <artifactId>untitled2-maven1</artifactId>
        <groupId>org.example</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>

 1.2 父类

  <modules>
        <module>selvert01</module>
    </modules>

 二、子类的web.xml配置最新的版本自带的有点旧

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                      http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0"
         metadata-complete="true">
</web-app>

 2.1 定义一个java类

package com.bilibili.servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

public class selverts extends HttpServlet {

    //由于get或者post只是请求实现的不同的方式,可以互相调用
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        PrintWriter writer = resp.getWriter();
        writer.print("hello,,serverr");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPost(req, resp);
    }
}

2.1、编写servlet映射

因为编写的Java程序是要通过浏览器访问的,而浏览器是要连接web服务器,所以需要注册servlet

给一个访问路径。

<servlet>
    <servlet-name>hellotya</servlet-name>
    <servlet-class>com.bilibili.servlet.selverts</servlet-class>
</servlet>
<!--selvert请求-->
    <servlet-mapping>
        <servlet-name>hellotya</servlet-name>
        <url-pattern>hellotya</url-pattern>
    </servlet-mapping>

2.2 /*IDEA的Tomcat出现乱码问题解决如下*/

2.3  </注册名>

 

 2.4 Servlet

2.5mapping 问题 

1.一个servlet可以指定一条映射路径 

<servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>

2.一个servlet可以指定多条映射路径

   <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello1</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello2</url-pattern>
    </servlet-mapping>

3.一个servlet可以指定通用映射路径  

<servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello2/*</url-pattern>
    </servlet-mapping>

4.一个servlet可以指定默认映射路径(首页会被挤掉)

<servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>

5.也可以自定义

<servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/*.do</url-pattern>
    </servlet-mapping>

6.优先级

指定好的映射路径级别最高,如果没有旧走默认路径

 <servlet>
        <servlet-name>mxx</servlet-name>
        <servlet-class>com.bilibili.servlet.ErrorServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>mxx</servlet-name>
        <url-pattern>/mxx</url-pattern>
    </servlet-mapping>

 *.bug问题

Element ‘web-app‘ cannot have character [children], because the type‘s content type is element-only.

看代码注释有没有规定符号

2.6  servletcontext对象

我们可以把ServletContext当成一个公用的空间,可以被所有的客户访问,如上图,A、B、C三个客户端都可以访问。WEB容器在启动时,它会为每个Web应用程序都创建一个对应的ServletContext,它代表当前Web应用,并且它被所有客户端共享。

2.6.1

servlet1方法

package com.bilibili;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class mxx extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext context = this.getServletContext();
        String usesrname = "元首";
        context.setAttribute("usernaem",usesrname);
        //System.out.println("人事如潮人如水,不甚今朝一场醉");

    }
 }

 2.6.2 servlet2方法

package com.bilibili;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class getmxx extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext context = this.getServletContext();
        String username = (String)context.getAttribute("username");
        resp.setContentType("text/html");
        resp.setCharacterEncoding("utf-8");
        resp.getWriter().print("名字"+username);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPost(req, resp);
    }
}

 3.web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                      http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0"
         metadata-complete="true">

    <servlet>
        <servlet-name>nazi</servlet-name>
        <servlet-class>com.bilibili.mxx</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>nazi</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
    <servlet>
        <servlet-name>getb</servlet-name>
        <servlet-class>com.bilibili.getmxx</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>getb</servlet-name>
        <url-pattern>/getc</url-pattern>
    </servlet-mapping>

</web-app>

 servlet2方法去取servlet1方法里面的名字,用web.xml编程映射路径,Tomcat启动,就行了,

加了一个公交车原理,方法都可以去上他。

2.7读取资源类

properties

在Java目录、resource下新建的目录,都被打包到同一路径下,这一路径称为classpath

获得db.proprites的表内的内容以及输出

package com.bilibili;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class Serlvetdemo3 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        InputStream is = this.getServletContext().getResourceAsStream("/target/classes/com/bilibili/mxx");
        Properties pro = new Properties();
        pro.load(is);
        String user =pro.getProperty("username");
        String pwd =pro.getProperty("password");
        resp.getWriter().print(user+pwd);

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    }
}

配置web.xml文件 

   <servlet>
        <servlet-name>s5</servlet-name>
        <servlet-class>com.bilibili.ServletDemo2</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>s5</servlet-name>
        <url-pattern>/s5</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>s6</servlet-name>
        <servlet-class>com.bilibili.Serlvetdemo3</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>s6</servlet-name>
        <url-pattern>/s6</url-pattern>
    </servlet-mapping>

 2.8HttpServletsponse

HttpServletsponse应用

2.8.1下载文件

设置参数

package Demo;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.URLEncoder;

public class demo1 extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        1.获取下载路径
        String resultpath = "E:\\ecn_bews_project\\untitled2-maven1\\response\\src\\main\\resources\\医智诺.png";
        System.out.println("下载文件路径"+resultpath);
//        2.下载文件名
       resultpath.substring(resultpath.lastIndexOf("\\")+1);
//        3. 设置浏览器支持下载
         resp.setHeader("Content-disposition","attachment;filename"+ URLEncoder.encode("GBK"));
//        4.下载文件的输入流
        FileInputStream in = new FileInputStream(resultpath);
//        5.创建缓冲区
        int len = 0;
        byte[] buffer = new byte[1024];
//        7.获取OutputStream对象
        ServletOutputStream out = resp.getOutputStream();
//        8.把FileOutputStream流写入buffer缓冲区9.使用OutputStream将缓冲区中的数据输出到客户端
        while ((len =in.read(buffer))>0){
            out.write(buffer,0,len);
        }
             in.close();
            out.close();
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       doGet(req, resp);
    }
}

配置文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                      http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0"
         metadata-complete="true">

    <servlet>
        <servlet-name>file</servlet-name>
        <servlet-class>Demo.demo1</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>file</servlet-name>
        <url-pattern>/down</url-pattern>
    </servlet-mapping>

</web-app>

2.8.2 浏览器刷新验证

package Demo;

import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;

public class demo2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //如何让浏览器刷新五秒钟每次
        resp.setHeader("refresh","3");

        //在内存中创建图片
        BufferedImage image = new BufferedImage(80, 80, BufferedImage.TYPE_INT_RGB);
        //得到图片
        Graphics2D p = (Graphics2D) image.getGraphics();//Java的2d画笔
        //设置图片背景颜色
        p.setColor(Color.blue);
        p.fillRect(0,0,80,20);
        //给图片写数据
        p.setColor(Color.pink);
        p.setFont(new Font(null,Font.BOLD,20));
        p.drawString(makenum(),0,20);

        //告诉浏览器,这个请求用图片打开
        resp.setContentType("image/jpeg");

        //网站存在缓存,不让浏览器缓存
        resp.setDateHeader("exprise",-1);
        resp.setHeader("Cache-Control","no-cache");
        resp.setHeader("Prama","no-cache");

        //把图片写给浏览器

        ImageIO.write(image,"jpg",resp.getOutputStream());

    }
    //生成随机数
    private String makenum(){
        Random num = new Random();
        String i = num.nextInt(999999)+"";
        StringBuffer sg = new StringBuffer();
        for (int j = 0; j <6-i.length() ; j++) {
            sg.append("0");
        }
        String s = sg.toString() + i;
        return i;
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                      http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0"
         metadata-complete="true">

    <servlet>
        <servlet-name>image</servlet-name>
        <servlet-class>Demo.demo2</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>image</servlet-name>
        <url-pattern>/images</url-pattern>
    </servlet-mapping>

</web-app>

 2.9  实现重定向

 @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       resp.sendRedirect("/re/img"); //重定向
    }

重定向和转发的区别

相同:都会跳转web网页

不同:重定向的url地址会变, 转发不会 

重定向案例代码实现输入账号密码就跳转到"成功"页面

web.xml

    <servlet>
        <servlet-name>Request</servlet-name>
        <servlet-class>Demo.demo4</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Request</servlet-name>
        <url-pattern>/login</url-pattern>
    </servlet-mapping>

 success.jsp

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

<h1>haihaihiaa</h1>

</body>
</html>

index.jsp

<html>
<body>
<h2>Hello World!</h2>

<%--这里提交的路径,在寻找项目的路径--%>
<%--${pageContext.request.contextPath}代表当前的项目--%>
<form action="${pageContext.request.contextPath}/login" method="get">
    用户名:<input type="text" name="username"><br>
    密码:<input type="password" name="password"><br>
    <input type="submit">
</form>

</body>
</html>

demo4.java 

package Demo;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class demo4 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //处理请求
        String username = req.getParameter("username");
        String password = req.getParameter("password");

        System.out.println(username+";"+password);
        resp.sendRedirect("/re/success.jsp");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

 3.0 HttpServletRequest (重要)

 HttpServletRequest代表客户端的请求,用户通过http协议访问服务器,http请求中的所有信息会被封装到HttpServletRequest,通过HttpServletRequest方法,获得客户端所有的响应

 web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                      http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0"
         metadata-complete="true">
    <servlet>
        <servlet-name>loginselvert</servlet-name>
        <servlet-class>ppackage.demo1</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>loginselvert</servlet-name>
        <url-pattern>/loginsel</url-pattern>
    </servlet-mapping>
</web-app>

 demo1.java

package ppackage;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Arrays;

public class demo1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        //后台接收到乱码问题req接收设置成GBK
        req.setCharacterEncoding("UTF-8");
        resp.setCharacterEncoding("UTF-8");

        String username = req.getParameter("username");
        String password = req.getParameter("password");
        String[] hobbies = req.getParameterValues("hobbies");

        System.out.println(username);
        System.out.println(password);
        System.out.println(Arrays.toString(hobbies));


        //通过请求转发
  System.out.println(req.getContextPath());

  req.getRequestDispatcher(req.getContextPath()+"/succ.jsp").forward(req,resp);


    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

succ.jsp 

<%--
  Created by IntelliJ IDEA.
  User: ecn
  Date: 2022/8/12
  Time: 16:31
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>

<h1>success</h1>

</body>
</html>

index.jsp 

<%--
  Created by IntelliJ IDEA.
  User: ecn
  Date: 2022/8/12
  Time: 16:06
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登录</title>
</head>
<body>
<h1>登录</h1>
<div style="text-align: center">
    <%--以post表单提交到loginsel请求--%>
    <form action="${pageContext.request.contextPath}/loginsel" method="post">
        username:<input type="text"name="username"><br>
        passoword:<input type="password"name="p"><br>
        hobby:
        <input type="checkbox"name="hobbies" value="唱">唱
        <input type="checkbox"name="hobbies" value="跳">跳
        <input type="checkbox"name="hobbies" value="rap">rap
        <input type="checkbox"name="hobbies" value="篮球">篮球
        <input type="checkbox"name="hobbies" value="说唱">说唱

        <br>
        <input type="submit">
    </form>
</div>

</body>
</html>

3.1、cookie 和session

3.1.1、会话:用户打开一个浏览器,点击很多超链接,访问很多web资源,关闭浏览器,这个过程称为会话

cookie:服务端给客户一个信件,客户端下次访问服务端带上信件就可以,客户端技术

session:服务器已经登记你的来到,下次来时直接匹配,服务器技术,可以保存信息

3.12 cookie 

 //cookie,服务器端从客户端获取
        Cookie[] cookies = req.getCookies();//这里返回数组。说明Cookie有多个存在



cookie.getValue()//获得cookie的value

cookie.getName()//获得cookie的key

new Cookie("lastloginTime", System.currentTimeMillis()+"");//新建一个cookie

cookie.setMaxAge(24*60*60);//设置cookie的有效期

 resp.addCookie(cookie);//响应给客户端一个cookie

URLEncode.encode("嘻嘻嘻","UTF-8");//编码

URLDecoder.decode(cookie.getValue(),"UTF-8") //解码 两个都用于中文乱码

3.13、session


  

  //得到session
        HttpSession session = req.getSession();

          demo1s name = (demo1s) session.getAttribute("name");
        System.out.println(demo1s.toString());
    }


   //手动注销
        session.invalidate();

web.xml 会话自动配置

 <!--设置session默认的失效时间-->
         <session-config>
             <!--1分钟后session自动失效,以分钟为单位-->
             <session-timeout>1</session-timeout>
         </session-config>

3.14、JSP 

java Server pages :java服务器端页面,用于开发动态技术

与HTML的区别:

   1.HTML只给用户通过静态的数据  2.jsp可以嵌入Java代码,为用户提供动态数据

JSP本质就是一个Selvert类 ,用户通过网络上的web容器将jsp页面转换为xxx.class文件,所以用户最后访问到的是class文件还是一个selvert类。

  <%--jsp表达式
  作用用来将程序输出到客户端
  <%=表达式或变量%>
  --%>
  <%=new java.util.Date()%>
  <hr>
  <%--jsp脚本片段--%>
  <%
    int sum =0;
    for (int i = 0; i < 100; i++) {
      sum=+i;
    }
    out.println(sum);
  %>

  <%--在代码中嵌入HTML元素--%>
  <%
    for (int i = 0; i < 5; i++) {

  %>
  <h1>大叔大婶市场撒 <%=i%></h1>
  <%
    }
  %>

3.14.1 jsp声明 

<%!
  static {
    System.out.println("localstatcia selvert");
  }
  private int gdsa =0;
  public void kkk(){
    System.out.println("进入了方法");
  }
%>

 /***/bug

<%--如果图片不显示出来就取这样写--%>
<img src="./img/11.png"alt="500">

3.14.2jsp指令将两个页面合二为一 

<%@include file="common/head.jsp"%>
<h1>网页主体</h1>
<%@include file="common/foot.jsp"%>

 4.九大内置对象

 

<%
    pageContext.setAttribute("name1","大厦1"); //保存的数据只在一个页面有效
    request.setAttribute("name2","大厦2");//保存的数据只在一次请求有效,请求转发会携带
    session.setAttribute("name3","大厦3"); //保存的数据在一次会话中有效
    application.setAttribute("name4","大厦4");//保存的数据只会在服务器有效,从打开服务器到关闭服务器
%>

<%
  String name1 = (String) pageContext.findAttribute("name1");
  String name2 = (String) pageContext.findAttribute("name2");
  String name3 = (String) pageContext.findAttribute("name3");
  String name4 = (String) pageContext.findAttribute("name4");

%>

<h1>取出的值:</h1>
<h1>${name1}</h1>
<h1>${name2}</h1>
<h1>${name3}</h1>
<h1>${name4}</h1>

 

 4.1 EL 标签 、jsp标签 、JSTL标签

4.1.1 EL标签 :获取数据、执行运算、获取web开发的常用对象

依赖的包

   <!--jstl表达式的依赖-->
    <!-- https://mvnrepository.com/artifact/javax.servlet.jsp.jstl/jstl-api -->
    <dependency>
        <groupId>javax.servlet.jsp.jstl</groupId>
        <artifactId>jstl-api</artifactId>
        <version>1.2</version>
    </dependency>

    <!--standard依赖-->
    <!-- https://mvnrepository.com/artifact/taglibs/standard -->
    <dependency>
        <groupId>taglibs</groupId>
        <artifactId>standard</artifactId>
        <version>1.1.2</version>
    </dependency>

jsp标签 

<jsp:forward page="/jsptag-EL.jsp">
<jsp:param name="name" value="value11"></jsp:param>>
<jsp:param name="age" value="vlaue222"></jsp:param>
</jsp:forward>

 4.1.2 jstl表达式

就是用来弥补HTML标签的不足,可以自定义标签,并且与java语言相同

核心标签:

使用前要导入taglib。

在TOmcat中也要导入jstl包,standard的包才能使用,如果没有导入就会跳转不到那个页面

 /** Ctrl + alt +L 对齐代码

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--c = core 核心--%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h4>if测试</h4>

<hr>
<form action="coreif.jsp" method="get">
    <input type="text" name="username" value="${param.username}">
    <input type="submit" value="登录">
</form>
<%--判断提交管理员是否,是的话输出欢迎--%>
<c:if test="${param.username=='adimin'}" var="isAdmin">
    <c:out value="管理员welcome"/>
</c:if>
<c:out value="${isAdmin}"/>


</body>
</html>

<c:when> 

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<c:set var="score" value="95"/>

    <c:choose>
        <c:when test="${score>=90}">
            优秀
        </c:when>

        <c:when test="${score>=85}">
            良好
        </c:when>

        <c:when test="${score>=80}">
            一般
        </c:when>

    </c:choose>



</body>
</html>

 <c:foreach> 

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page import="java.util.ArrayList" %><%--
  Created by IntelliJ IDEA.
  User: ecn
  Date: 2022/8/16
  Time: 11:17
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%
    ArrayList<String> objects = new ArrayList<>();
    objects.add(0, "22成都市");
    objects.add(1, "23额温枪所");
    objects.add(2, "24委屈");
    objects.add(3, "25大厦");
    objects.add(4, "22额温枪");
    request.setAttribute("list", objects);
%>
<%--
var:遍历出来的变量
items,遍历的对象
begin 哪里开始
end 哪里结束
step 结束
--%>
<c:forEach var="objects" items="${list}">
    <c:out value="${objects}"/><br>

</c:forEach>

<hr>

<c:forEach var="objects" items="${list}" begin="1" end="3" step="2">
    <c:out value="${objects}"/><br>
</c:forEach>

</body>
</html>

 <c:when>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<c:set var="score" value="95"/>

    <c:choose>
        <c:when test="${score>=90}">
            优秀
        </c:when>

        <c:when test="${score>=85}">
            良好
        </c:when>

        <c:when test="${score>=80}">
            一般
        </c:when>

    </c:choose>



</body>
</html>

 5、Javabean

用法都和之前的表达式有异曲同工之处所以直接上代码

 javabean.jsp

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

<jsp:useBean id="people" class="pojo.people" scope="page"/>

<jsp:setProperty name="people" property="id" value="18"/>
<jsp:setProperty name="people" property="plane" value="腓特烈"/>
<jsp:setProperty name="people" property="tanks" value="Z23"/>

坦克:<jsp:getProperty name="people" property="tanks"/>
飞机:<jsp:getProperty name="people" property="plane"/>
id:<jsp:getProperty name="people" property="id"/>


</body>
</html>

 people。java

package pojo;

public class people {

    //实体类一般与数据库表一一对应
    public people(int id, String tanks, String plane) {
        this.id = id;
        this.tanks=tanks;
        this.plane = plane;
    }
    private int id;
    private String tanks;
    private String plane;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getTanks() {
        return tanks;
    }


    public void setTanks(String tanks) {
        this.tanks = tanks;
    }

    public String getPlane() {
        return plane;
    }

    public void setPlane(String plane) {
        this.plane = plane;
    }

    @Override
    public String toString() {
        return "people{" +
                "id=" + id +
                ", tanks='" + tanks + '\'' +
                ", plane='" + plane + '\'' +
                '}';
    }
}

 6.MVC

 7.Filter

 

 和Selvert一样,只是接口不同,多了chain

filter.java

package com.filter;

import javax.servlet.*;
import java.io.IOException;
//初始化
public class filters implements Filter {

    //执行前
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("filter执行前");

    }
      //chain
    /*
    * 1.过滤器中的所有代码,在过滤特定请求时会执行
    * 2. 必须让过滤器继续同行*/
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
           servletRequest.setCharacterEncoding("gbk");
           servletResponse.setCharacterEncoding("gbk");
           servletResponse.setContentType("text/html;charset=GBK");

        System.out.println("filter执行前");
        filterChain.doFilter(servletRequest,servletResponse);
        System.out.println("filter执行后");
    }

    //销毁
    @Override
    public void destroy() {
        System.out.println("filter销毁!");
    }
}

web.xml配置filter

   <filter>
        <filter-name>filters</filter-name>
        <filter-class>com.filter.filters</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>filters</filter-name>
        <url-pattern>/filteres/*</url-pattern>
    </filter-mapping>
</web-app>

showselvert.java

package servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class showselvert extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
     // resp.setCharacterEncoding("gbk");
        resp.getWriter().write("你你好");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

 8.监听器

package listener;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

//在线人数监听
public class online implements HttpSessionListener {

    //创建session监听
    //一旦创建session就会触发这个事件
    @Override
    public void sessionCreated(HttpSessionEvent httpSessionEvent) {
     ServletContext session = httpSessionEvent.getSession().getServletContext();
        Integer sessionline = (Integer) session.getAttribute("sessionline");
        if (sessionline==null){
            sessionline= new Integer(1);
        }else {
            int count = sessionline.intValue();
            sessionline = new Integer(count+1);
        }
        session.setAttribute("sessionline",sessionline);
    }

    //销毁session监听
    //一旦销毁session就会触发这个事件

    public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
        ServletContext session = httpSessionEvent.getSession().getServletContext();
        Integer sessionline = (Integer) session.getAttribute("sessionline");
        if (sessionline==null){
            sessionline= new Integer(0);
        }else {
            int count = sessionline.intValue();
            sessionline = new Integer(count-1);
        }
        session.setAttribute("sessionline",sessionline);
    }

    }

  <listener>
        <listener-class>listener.online</listener-class>
    </listener>
</web-app>

8.1、GUI 

嵌套两种颜色Java窗口

package listener;

import java.awt.*;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

public class TestCanel {
    public static void main(String[] args) {
        Frame frame = new Frame("放假啊啊啊啊啊1");//新建一个窗体
        Panel panel = new Panel(null);//面板
        frame.setLayout(null);//设置窗体布局

        frame.setBounds(300,400,500,500);
        frame.setBackground(new Color(0,0,225));//设置背景颜色

        panel.setBounds(50,50,300,300);
        panel.setBackground(new Color(0,255,0));

        frame.add(panel);

        frame.setVisible(true);

        //监听事件(关闭)
        frame.addWindowListener(new WindowListener() {
            @Override
            public void windowOpened(WindowEvent e) {
                System.out.println("打开");
            }

            @Override
            public void windowClosing(WindowEvent e) {
                System.out.println("关掉");
                System.exit(0);
            }

            @Override
            public void windowClosed(WindowEvent e) {

            }

            @Override
            public void windowIconified(WindowEvent e) {
                System.out.println("激活");
            }

            @Override
            public void windowDeiconified(WindowEvent e) {
                System.out.println("未激活");
            }

            @Override
            public void windowActivated(WindowEvent e) {

            }

            @Override
            public void windowDeactivated(WindowEvent e) {

            }
        });


    }
}

 8.2 JDBC 

package bilibili;

import java.sql.*;

public class TestJdbc {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
      String url ="jdbc:mysql://43.142.160.32:3306/jdbc?useUnicode=true&characterEncoding=GBK";
      String username = "mxx";
     //这里设置自己密码 

      Class.forName("com.mysql.jdbc.Driver");

        Connection connection = DriverManager.getConnection(url, username, password);

        Statement statement = connection.createStatement();

         String sql ="select * from user";

        ResultSet rs = statement.executeQuery(sql);

        while (rs.next()){
            System.out.println("id"+rs.getObject("id"));
            System.out.println("name"+rs.getObject("name"));
            System.out.println("password"+rs.getObject("password"));
            System.out.println("email"+rs.getObject("email"));
            System.out.println("birthday"+rs.getObject("birthday"));
        }
         rs.close();
         statement.close();
        connection.close();

    }
}

 8.2.1 @Test

一种特有的Java包,要导包进来,可以到系统自带的包 alt +enter 

9.总结

整体来说还是比较知识点分散,在投入项目时也遇到许多问题,继续前进吧!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值