提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
目录
1.构建一个空maven项目,删掉src文件,重新导入依赖,建立一个新的module
2.2 /*IDEA的Tomcat出现乱码问题解决如下*/编辑
Element ‘web-app‘ cannot have character [children], because the type‘s content type is element-only.
一、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.总结
整体来说还是比较知识点分散,在投入项目时也遇到许多问题,继续前进吧!