maven资源配置问题
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Gxp47xXz-1669114925848)(C:\Users\MU\Desktop\笔记\maven静态资源配置问题.jpg)]
<!--静态资源导出问题,在bulid中配置resource,来防止我们的资源导出失败的问题 -->
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
javaweb-Servlet
##serletContext
1.共享数据
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dFMumVCZ-1669114925850)(C:\Users\MU\Desktop\笔记\servletcontext.jpg)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lKQ2aptt-1669114925851)(C:\Users\MU\Desktop\笔记\读取servletcontext.jpg)]
2.读取资源文件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-280JViTj-1669114925852)(C:\Users\MU\Desktop\笔记\sevletcontext读取资源文件.jpg)]
Properties
- 在Java目录下新建properties
- 在resources目录下新建properties
- 发现:都被打包到了同一个路径下:classes,俗称class path。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aSl8LyFM-1669114925853)(C:\Users\MU\Desktop\笔记\读取资源文件.jpg)]
response下载文件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4TTbX81E-1669114925854)(C:\Users\MU\Desktop\笔记\response下载文件.jpg)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9H7DDFCO-1669114925855)(C:\Users\MU\Desktop\笔记\respose下载文件.jpg)]
Response验证码的实现
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//每三秒就刷新网页
resp.setHeader("refresh","3");
//给内存设置一个图片
BufferedImage image=new BufferedImage(80,20,BufferedImage.TYPE_INT_RGB);
//得到图片
Graphics2D g=(Graphics2D) image.getGraphics();//画笔
//设置背景颜色
g.setColor(Color.white);
g.fillRect(0,0,80,20);
//给图片写数据
g.setColor(Color.black);
g.setFont(new Font(null,Font.BOLD,20));
g.drawString(makenum(),0,20);
//告诉浏览器这个请求用图片打开
resp.setContentType("image/jpeg");
//让网站缓存,不让浏览器缓存
resp.setDateHeader("expires",-1);
resp.setHeader("Cache-Control ","no-cache");
//把图片写给浏览器
boolean wrete= ImageIO.write(image,"jpg",resp.getOutputStream());
}
//生成随机数
private String makenum(){
Random random=new Random();
String num=random.nextInt(9999999)+"";
StringBuffer sb=new StringBuffer();
for (int i = 0; i <7-num.length() ; i++) {
sb.append("0");
}
num=sb.toString()+num;
return num;
}
Reaponse重定向&转发
重定向:
- 实现页面跳转,url地址栏会发生变化 resp.sendRedirect(“/response_war/img”); //重定向
转发:
- 实现页面跳转,url地址栏不会发送变化 req.getRequestDispatcher(“/success.jsp”).forward(req, resp);
与转发的区别
- 相同点 都会实现页面跳转
- 不同点 转发url地址栏不会发生变化,重定向会发生变化
Request应用
HttpServletRequest代表客户端的请求,用户通过http协议访问服务器,http请求中的所有信息被封装到httpservletrequest,通过这个HttpServletRequest方法获得客户端的所有信息
1.获取前端数据的方法
- req.getParameter()
- req.getParametervalue()
cookie
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MzkuhTid-1669114925855)(C:\Users\MU\Desktop\笔记\cookie.jpg)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1aj46TpH-1669114925855)(C:\Users\MU\Desktop\笔记\编码解码(网络编程.jpg)]
Session(重点)
Session:服务器会给每一个用户(浏览器)创建一个Session对象;一个Session独占一个浏览器,只要浏览器没关闭,这个Session就存在。
解决乱码问题
//解决乱码问题
req.setCharacterEncoding("UTF-8");
resp.setCharacterEncoding("UTF-8");
resp.setContentType("text/html;charset=UTF-8");
//得到Session
HttpSession session=req.getSession();
//给session存东西
session.setAttribute("name","hello");
//获取session id
String id=session.getId();
//判断session是否新建
if(session.isNew()){
resp.getWriter().write("创建成功,ID为:"+id);
}else {
resp.getWriter().write("已经存在,ID为:"+id);
}
//获得session存的信息
System.out.println((String)session.getAttribute("name"));
Session和Cookie的区别:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9kJxxXVx-1669114925856)(C:\Users\MU\Desktop\笔记\session和cookie区别.jpg)]
会话自动过期:在web.xml配置
<session-config>
<session-timeout>分钟</session-timeout>
</session-config>
javaweb-jsp
什么是jsp
- Java服务器端页面,和servlet一样,用于动态web技术
- 本质上就是一个servlet
jsp原理
-
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UD9d3tNp-1669114925856)(C:\Users\MU\Desktop\笔记\jsp工作流程.jpg)]
-
在jsp页面中:只要是Java代码就会原封不动的输出;如果是HTML代码,就会转换为out.write(“\r\n”);这样的样子
jsp基础语法
<%--jsp表达式%>
<%=变量或者表达式%>
jsp脚本片段
<% 写一段Java代码(可嵌套html代码) %>
<% for(int i=0;i<5;i++){
%>
<hr>hello</hr>
<% } %>
//jsp声明
<%! %> 如同全局变量
jsp动/静态包含
(静态包含)
<%include file="要包含的文件路径"%>
(动态包含)
<jsp:include page="要包含的资源的路径"><</jsp:include>
jsp内置对象
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RPNersCr-1669114925857)(C:\Users\MU\Desktop\笔记\jsp内置对象.jpg)]
jsp作用域
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bR1OipkG-1669114925857)(C:\Users\MU\Desktop\笔记\jsp作用域.jpg)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tQHkEiOj-1669114925858)(C:\Users\MU\Desktop\笔记\jsp作用域2.jpg)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kjRZNsVV-1669114925858)(C:\Users\MU\Desktop\笔记\jsp属性范围特点.jpg)]
jsp标签、jstl标签、EL表达式
<!-- https://mvnrepository.com/artifact/taglibs/standard -->
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
<!-- 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>
EL表达式 ${ }
需要依赖的包
<%@page isELIgnored=“false” %> 开启EL
作用:
- 获取数据
- 执行运算
- 获取web开发的常用对象
jsp标签
-
<jsp:forward page="文件路径"> <jsp:param name="" value=""> </jsp:param>//传递参数</jsp:forward>//请求转发 //获取参数 <%= request.getParameter("name")%> <%= request.getParameter("value")%>
jstl表达式
- 作用:弥补HTML 标签的不足;自定义了许多标签供我们使用,标签的功能和Java代码一样
- 核心标签:核心标签是最常用的 JSTL标签。引用核心标签库的语法如下:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W71hzD1A-1669114925858)(C:\Users\MU\Desktop\笔记\jstl核心标签.jpg)]
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@page isELIgnored="false" %>
<form action="jstl-1.jsp" method="get">
<%--
EL表达式获取表单中的数据
${param.参数名}
--%>
<input type="text" name="username" value="${param.username}">
<input type="submit" value="登录">
<%--判断提交的用户名--%>
<c:out value="${param.username}"></c:out>
<c:if test="${param.username == 's'}" var="isme">
<c:out value="终于等到你"></c:out>
</c:if>
<c:out value="${isme}"></c:out>
</form>
javaBean
实体类
JavaBean的特定写法:
- 必须有一个无参构造
- 属性必须私有化
- 必须有对应的get/set方法
一般用来和数据库的字段做映射ORM;
ORM:对象关系映射
- 表–>类
- 字段–>属性
- 行记录–>对象[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ztpl9pLf-1669114925859)(C:\Users\MU\Desktop\笔记\javabean.jpg)]
MVC三层架构
什么是mvc
Model view Controller 模型视图控制器[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QhhUYkZQ-1669114925859)(C:\Users\MU\Desktop\笔记\mvc三层架构.jpg)]
1、model
- 业务处理:业务逻辑
- 数据持久层:CRUD
2、View
- 展示数据
- 提供链接发起servlet请求
3、controller(servlet)
- 接受用户的请求
- 交给业务层处理对用的代码
- 控制视图的跳转
过滤器Filter
Filter:用来过滤网站的数据[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UN4fIVY5-1669114925859)(C:\Users\MU\Desktop\笔记\过滤器.jpg)]
编写过滤器
public class encordingfilter implements Filter {
//初始化,web服务器启动就已经初始化了,随时等待过滤对象
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("初始化");
}
/*
1、过滤中的所有代码在过滤特定请求时都会执行
2、必须让过滤器继续通行
*/
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
servletRequest.setCharacterEncoding("UTF-8");
servletResponse.setCharacterEncoding("UTF-8");
servletResponse.setContentType("text/html;charset=UTF-8");
System.out.println("filter执行前");
filterChain.doFilter(servletRequest,servletResponse);//让我们的请求继续走,若不写程序就会被拦截
System.out.println("filter执行后");
}
//销毁,web服务器关闭就销毁过滤器
public void destroy() {
System.out.println("销毁了");
}
在web.xml中配置filter
<filter>
<filter-name>encordingfilter</filter-name>
<filter-class>com.filter.encordingfilter</filter-class>
</filter>
<filter-mapping>
<filter-name>encordingfilter</filter-name>
<url-pattern>/servlet/*</url-pattern>
</filter-mapping>
Filter实现全线拦截
#JDBC
JDBC
Java操作数据库的规范:俗称JDBC
JDBC所需要的包:
- java.sql
- javax.sql
- mysql-connerctor-java-…(连接驱动)
使用
1.加载驱动
2.连接数据库
3.向数据库发送sql的对象Statement:CRUD
4.编写sql
5.执行sql
6.关闭连接
public static void main(String[] args) throws SQLException, ClassNotFoundException {
String url="jdbc:mysql://localhost:3306/smbms?useUnicode=true&characterEncoding=utf-8&useSSL=false";
String username="root";
String password="123456";
//1.加载驱动
Class.forName("com.mysql.cj.jdbc.Driver");
System.out.println("加载驱动成功!");
//2.连接数据库
Connection connection= DriverManager.getConnection(url,username,password);
//向数据库发送sql的对象Statemant:CRUD
Statement statement=connection.createStatement();
//编写sql
String sql="select * from smbms_user";
//执行sql,返回查询结果
ResultSet resultSet = statement.executeQuery(sql);
while (resultSet.next()){
System.out.println("id"+resultSet.getObject("id"));
}
//关闭连接,释放资源
resultSet.close();
statement.close();
connection.close();
}
事务
ACID原则:保证数据的安全。
开启事务
事务提交 commit()
事务回滚 rollback()
关闭事务
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-y37gTA9l-1669114925860)(C:\Users\MU\Desktop\笔记\JDBC.jpg)]
junit单元测试
<dependency>
<groupId>junit</groupId> <artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
简单使用
@Test注解只有在方法上有效,只要加了这个注解的方法,就可以直接运行
@Test
public void text(){
System.out.println("hello");
}