首页
友链
Search
1
01-快捷命令
134 阅读
2
寒假计划
129 阅读
3
浏览器规范(ES module)和 node.js 规范(Common JS)
121 阅读
4
03-概念解析
120 阅读
5
学期计划(大三下学期)
103 阅读
计划
算法
面试题
运维
Ansible
Linux
数据库
neo4j
共用
web 前端
CSS
JavaScript
Vue
Node.js
英语单词
工程化
JAVA
mysql
收获
面试
mybatis
Spring
基础
spring-mvc
问题
项目
宠物乐园
速查
问题集
git
学习
sql
二阶段
登录
Search
标签搜索
spring
mysql
vue
ansible
CSS
面试
计划
收获
JAVA面试题
spring-mvc
Starrylsi
累计撰写
106
篇文章
累计收到
37
条评论
首页
栏目
计划
算法
面试题
运维
Ansible
Linux
数据库
neo4j
共用
web 前端
CSS
JavaScript
Vue
Node.js
英语单词
工程化
JAVA
mysql
收获
面试
mybatis
Spring
基础
spring-mvc
问题
项目
宠物乐园
速查
问题集
git
学习
sql
二阶段
页面
友链
搜索到
51
篇与
的结果
2024-09-15
02-Restful风格
三个关键点1.把请求参数加入到请求的资源地址中2.原来的增,删,改,查。使用HTTP请求方式,POST、DELETE、PUT、GET分别一一对应。3.所有资源都共享统一的接口,以便在客户端和服务器之间传输状态。使用的是标准的 HTTP 方法,比如 GET、PUT、POST 和 DELETE注意事项1.配置文件中要添加注解驱动和静态资源放行2.必须使用重定向概念Restful是一种设计风格。对于我们Web开发人员来说。就是使用一个url地址表示一个唯一的资源。然后把原来的请求参数加入到请求资源地址中。然后原来请求的增,删,改,查操作。改为使用HTTP协议中请求方式GET、POST、PUT、DELETE表示。传统的方式是: 比如:http://ip:port/工程名/资源名?请求参数 举例:http://127.0.0.1:8080/springmvc/book?action=delete&id=1 restful风格是: 比如:http://ip:port/工程名/资源名/请求参数/请求参数 举例:http://127.0.0.1:8080/springmvc/book/11.restful风格中请求方式GET、POST、PUT、DELETE分别表示查、增、改、删GET请求 对应 查询 http://ip:port/工程名/book/1 HTTP请求GET 表示要查询id为1的图书 http://ip:port/工程名/book HTTP请求GET 表示查询全部的图书 POST请求 对应 添加 http://ip:port/工程名/book HTTP请求POST 表示要添加一个图书 PUT请求 对应 修改 http://ip:port/工程名/book/1 HTTP请求PUT 表示要修改id为1的图书信息 DELETE请求 对应 删除 http://ip:port/工程名/book/1 HTTP请求DELETE 表示要删除id为1的图书信息 2.SpringMVC中如何发送GET请求、POST请求、PUT请求、DELETE请求。我们知道发起GET请求和POST请求,只需要在表单的form标签中,设置method=”get” 就是GET请求。设置form标签的method=”post”。就会发起POST请求。而PUT请求和DELETE请求。要如何发起呢。1.要有post请求的form标签2.在form表单中,添加一个额外的隐藏域_method=”PUT”或_method=”DELETE”3.在web.xml中配置一个Filter过滤器org.springframework.web.filter.HiddenHttpMethodFilter(注意,这个Filter一定要在处理乱码的Filter后面)3.Restful风格的Controller如何实现思路: 需要一个符合javabean规范的Book类,一个视图,一个控制层3.1 index.jsp<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <a href="${pageContext.request.contextPath}/book/1">查询一个图书</a><br/> <a href="${pageContext.request.contextPath}/book">查询全部图书</a><br/> <form action="${pageContext.request.contextPath}/book" method="post"> <input type="hidden" name="id" value="1" /> <input type="hidden" name="name" value="这是需要添加的图书" /> <input type="submit" value="这是添加操作"/> </form> <!-- 我们要发送put请求或是delete请求, 1、有一个post请求的form标签 2、添加一个隐藏域,<input type="hidden" name="_method" value="delete|put"/> 3、添加一个restful支持的filter过滤器====HiddenHttpMethodFilter。 --> <form action="${pageContext.request.contextPath}/book/1" method="post"> <input type="hidden" name="_method" value="delete"/> <input type="submit" value="这是删除操作"/> </form> <form action="${pageContext.request.contextPath}/book/1" method="post"> <input type="hidden" name="_method" value="put"/> <input type="hidden" name="id" value="1" /> <input type="hidden" name="name" value="这是需要修改的图书" /> <input type="submit" value="这是修改操作"/> </form> </body> </html>3.2 BookController@Controller public class BookController { @RequestMapping(value = "/book", method = RequestMethod.GET) public String list() { System.out.println("查询全部图书"); return "redirect:/index.jsp"; } @RequestMapping(value = "/book/1", method = RequestMethod.GET) public String queryBookById() { System.out.println("查询id为1的图书信息"); return "redirect:/index.jsp"; } @RequestMapping(value = "/book", method = RequestMethod.POST) public String addBook(Book book) { System.out.println("把book对象【" + book + "】插入到数据库"); return "redirect:/index.jsp"; } @RequestMapping(value = "/book/1", method = RequestMethod.DELETE) public String deleteBookById() { System.out.println("删除id为1的图书信息"); return "redirect:/index.jsp"; } @RequestMapping(value = "/book/1", method = RequestMethod.PUT) public String updateBook(Book book) { System.out.println("修改图书-->>" + book); return "redirect:/index.jsp"; } }
2024年09月15日
10 阅读
0 评论
0 点赞
2024-09-13
17-Spring-事务的相关...
目标: 了解事务的一些相关内容**1. noRollbackFor和noRollbackForClassName测试不回滚的异常/** * noRollbackFor=ArithmeticException.class 表示当接收到数学异常之后。不回滚<br/> * noRollbackFor=ArithmeticException.class<br/> * noRollbackForClassName="java.lang.ArithmeticException" 表示当接收到指定字符串表示的全类名的异常的时候,不回滚事务 * noRollbackFor 和 noRollbackForClassName * 可以指定某些异常不回滚 * * spring 默认只回滚运行时异常 不回滚检查时异常 */ @Transactional() public void updateTwoTable() { userDao.updateUser(); int i = 12 / 0; bookDao.updateBook(); } 2. 自定义设置回滚异常/** * spring默认回去的是运行时异常RuntimeException和RuntimeException的子异常<br/> * rollbackFor=FileNotFoundException.class 表示FileNotFoundException也会回滚 * rollbackForClassName="java.io.FileNotFoundException" 表示当出现配置字符串所向定的全类名的异常的时候。也会回滚事务 * @throws FileNotFoundException * */ @Transactional() public void updateTwoTable() throws FileNotFoundException { userDao.updateUser(); int i = 0; if (i == 0) {//java.io.FileNotFoundException throw new FileNotFoundException("sadf"); } bookDao.updateBook(); } 3. 事务的只读属性/** * readOnly 如果值为true。表示只支持查询操作。不支持写操作 * <br/>如果设置为false,支持全部 */ @Transactional(readOnly=true) public void updateTwoTable() throws FileNotFoundException { userDao.updateUser(); bookDao.updateBook(); } 4. 事务超时属性timeout(秒为单位)/** * timeout=3表示操作不能超过3秒 */ @Transactional(timeout=3) public void updateTwoTable() throws FileNotFoundException { userDao.updateUser(); try { Thread.sleep(4000); } catch (InterruptedException e) { e.printStackTrace(); } bookDao.updateBook(); } 5. 事务的传播特性propagation关键: Required 用于组合事务 requires_new 用于拆分事务,掌握: 理解他们的区别什么是事务的传播行为: 当事务方法被另一个事务方法调用时,必须指定事务应该如何传播。例如:方法可能继续在现有事务中运行,也可能开启一个新事务,并在自己的事务中运行。 事务的传播行为可以由传播属性指定。Spring定义了7种类传播行为。6. xml配置式事务声明注: 去掉所有@Transaction<!-- 配置DataSourceTransactionManager事务管理器===事务的切面类 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> <!-- 事物特性 --> <tx:advice id="tx_advice" transaction-manager="transactionManager"> <!-- 配置事务特性 --> <tx:attributes> <tx:method name="multiUpdate" propagation="REQUIRED"/> <tx:method name="updateBook" propagation="REQUIRES_NEW" /> <tx:method name="updateUser" propagation="REQUIRED"/> <tx:method name="*" read-only="true"/> </tx:attributes> </tx:advice> <!-- 配置aop代理 --> <aop:config> <aop:advisor advice-ref="tx_advice" pointcut="execution(* com.zhuama.service.*Service.*(..))" /> </aop:config> 7. 8. 9. 总结/** * noRollbackFor 和 noRollbackForClassName * 可以指定某些异常不回滚 * * spring 默认只回滚运行时异常 不回滚检查时异常 * rollbackFor 和 rollbackForClassName * * readOnly 属性 添加后该方法只允许使用查询功能 不允许增删改操作 * * timeout 属性 事务的超时属性 * timeout = 秒数 可以使一个事务如果超过一定时间 提示超时 自动回滚 * * * propagation 属性 事务的传播特性 * 常用的两种 : REQUIRED 标记为当前值的事务 如果执行过程中发现已经有事务了 则使用当前存在的事务 如果没有 则新开启事务 * REQUIRES_NEW 标记为当前值的事务 如果执行过程中发现已有事务了 则暂停(挂起)当前事务 开启一个独立的新事物 * * Required 用于组合事务 requires_new 用于拆分事务 * * */
2024年09月13日
20 阅读
0 评论
0 点赞
2024-09-13
16-Spring-声明式事务
**遇到问题: jar包未构建,数据库驱动与版本不同,数据库默认引擎不是InooDB导致没有事务收获: 编码要规范, 可以配合商家,骑手,客户三个之间的关系理解事物需要了解Mybatis中DAO接口的工作原理概念事务分为声明式和编程式两种:声明式事务:声明式事务是指通过注解的形式对事务的各种特性进行控制和管理。编码式(编程式)事务:指的是通过编码的方式实现事务的声明。1. 声明式事务环境搭建1.1 准备测试数据库##创建tx数据库 drop database if exists `tx`; CREATE database `tx`; ##切换tx数据库 USE `tx`; ##删除用户表 DROP TABLE IF EXISTS `user`; ##创建用户表 CREATE TABLE `user` ( `id` int primary key auto_increment, `username` varchar(50) NOT NULL, `money` int(11) DEFAULT NULL ); ##插入数据 insert into `user`(`username`,`money`) values ('张三',1000),('李四',1000); ##删除图书表 drop table if exists `book`; ##创建图书表 create table `book`( `id` int primary key auto_increment, `name` varchar(500) not null, `stock` int ); ##插入数据 insert into book(`name`,`stock`) values('java编程思想',100),('C++编程思想',100); ##查看数据 select * from book; select * from user;1.2 创建一个java工程,导入jar包// 先导入AOP包,因为Spring的底层事务使用到了aop功能 com.springsource.org.aopalliance-1.0.0.jar com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar spring-aop-4.0.0.RELEASE.jar spring-aspects-4.0.0.RELEASE.jar // 导入spring核心包,mybatis包,日志包等; com.springsource.net.sf.cglib-2.2.0.jar commons-logging-1.1.3.jar druid-1.1.10.jar log4j-1.2.17.jar mybatis-3.4.1.jar mybatis-spring-1.3.0.jar mysql-connector-java-8.0.28.jar spring-beans-4.0.0.RELEASE.jar spring-context-4.0.0.RELEASE.jar spring-core-4.0.0.RELEASE.jar spring-expression-4.0.0.RELEASE.jar spring-jdbc-4.0.0.RELEASE.jar spring-orm-4.0.0.RELEASE.jar spring-test-4.0.0.RELEASE.jar spring-tx-4.0.0.RELEASE.jar1.3 Book,User,Servicetop.starrylsi.pojo注意: 需要符合javaBean规范public class Book { private Integer id; private String name; private int stock; public class User { private Integer id; private String username; private int money; DAO(数据访问对象层)关键: 只关注于下sql语句@Repository public class BookDao { @Autowired private JdbcTemplate jdbcTemplate; public int updateBook() { String sql = "update book set name = '**我被修改了!**' where id = 1"; return jdbcTemplate.update(sql); } } @Repository public class UserDao { @Autowired private JdbcTemplate jdbcTemplate; public int updateUser() { String sql = "update user set username = '**我被修改了**' where id = 1"; return jdbcTemplate.update(sql); } }Service(业务逻辑层)关键: 引入DAO层,对数据进一步处理@Service public class TransactionService { @Autowired private UserDao userDao; @Autowired private BookDao bookDao; public void updateTwoTable() { userDao.updateUser(); bookDao.updateBook(); } }1.4 创建并配置四个配置文件config/ db.properties mybatis-config.xml spring.xml log4j.propertiesdb.propertisdb.driverClassName=com.mysql.cj.jdbc.Driver db.url=jdbc:mysql://localhost:3306/tx?rewriteBatchedStatements=true db.username=root db.password=123456 initialSize=10 minIdle=5 maxActive=20 maxWait=5000mybatis-config<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <settings> <!-- 按照驼峰命名匹配 --> <setting name="mapUnderscoreToCamelCase" value="true"/> <!-- 配置延迟加载 --> <setting name="lazyLoadingEnabled" value="true"/> <!-- 将积极加载配置成消极加载 --> <setting name="aggressiveLazyLoading" value="false"/> </settings> <typeAliases> <package name="top.starrylsi.pojo"/> </typeAliases> </configuration>log4j.propertis# Global logging configuration log4j.rootLogger=DEBUG, stdout # Console output... log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%nspring.xml<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring-1.2.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd"> <!-- 扫描注解 排除spring-mvc的注解 --> <context:component-scan base-package="top.starrylsi"> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" /> </context:component-scan> <!-- 加载jdbc配置文件 --> <context:property-placeholder location="classpath:jdbc.properties" /> <!-- 创建数据库连接池 --> <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"> <property name="driverClassName" value="${db.driverClassName}" /> <property name="url" value="${db.url}" /> <property name="username" value="${db.username}" /> <property name="password" value="${db.password}" /> </bean> <!-- 配置事务管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> <!-- 配置mybatis --> <bean id="factory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="configLocation" value="classpath:mybatis-config.xml" /> <property name="mapperLocations" value="classpath:top/starrylsi/dao/*.xml" /> </bean> <!-- 配置mybatis中使用的dao接口 --> <mybatis-spring:scan base-package="top.starrylsi.dao" /> <!-- 配置spring事务 --> <tx:annotation-driven transaction-manager="transactionManager"/> </beans>
2024年09月13日
14 阅读
0 评论
0 点赞
2024-09-13
01-SpringMVC-第一个Hello示例程序
1. 创建一个动态的web工程2. 导入SpringMVC的包commons-logging-1.1.3.jar log4j-1.2.17.jar spring-aop-4.0.0.RELEASE.jar spring-beans-4.0.0.RELEASE.jar spring-context-4.0.0.RELEASE.jar spring-core-4.0.0.RELEASE.jar spring-expression-4.0.0.RELEASE.jar spring-web-4.0.0.RELEASE.jar spring-webmvc-4.0.0.RELEASE.jar3、创建工程需要的配置文件(1) log4j.properties# Global logging configuration log4j.rootLogger=INFO, stdout # Console output... log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n(2) 创建SpringMVC的配置文件<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd"> <!--扫描包--> <context:component-scan base-package="com.zhuama"></context:component-scan> </beans>4、创建jsp页面WebContent/index.jsp <body> <h1>This is my first application</h1> </body>5、编写一个类HelloController/** * @Controller 表示当前类是一个控制器 */ @Controller public class HelloController { /** * @RequestMapping("/hello") <br/> * 表示在SpringMVC中注册一个控制器,请求地址是http://ip:port/工程名/hello * @return */ @RequestMapping("/hello") public String hello() { System.out.println("这是SpringMVC的hello程序"); return "index.jsp"; } }
2024年09月13日
22 阅读
0 评论
0 点赞
2024-09-12
01-servlet
Servlet概念servlet教程servlet就是一个接口,定义了浏览器被访问到(tomcat识别)的规则将来我们自定义一个类,实现Servlet接口,复写方法快速入门创建一个JavaEE项目定义一个接口,实现Servlet接口实现接口中的抽象方法配置servlet(url映射到java类需要在web.xml中配置后才能映射)执行原理1.当服务器接收到客户端浏览器的请求后,会解析浏览器请求url路径,获取访问的Servlet的资源路径2.查找web.xml文件,是否有对应的标签内容3.如果有,则找到对应的全类名4.tomcat会将字节码文件加载进内存,并创建其对象5.调用其方法生命周期1.被创建: 执行init方法,只执行一次2.提供服务: 执行service方法,执行多次3.被销毁: 执行destory方法,只执行一次
2024年09月12日
12 阅读
0 评论
0 点赞
1
2
3
4
...
11