笔记(2022.2.21)
进程是资源分配最小的单位,线程是CPU调度的最小单位
进程里面的线程就是,各自按顺序运行的一段程序,他们可以是同一段程序也可以是不同的程序。
/*2022.2.22*/
cookie、session、token
通过在http传输中添加key来确认老用户身份,省去再次登录。
cookie在客户端实现,session在服务器端实现
/*2022.2.24*/
servlet(接口)--genericservlet(抽象类)---httpservlet(抽象类)
通过一次次重写,简化请求操作,http协议也封装进httpservlet
servlet相关配置:
1.一个servlet可以有多个访问路径:@WebServlet({"/s1","/ss1","/sss1"})
路径原则:1./xxx
2./xxx/xxx
3.xxx.do
localhost: 每次只会访问一个servlet,而且有优先级
2.request请求 response响应
*http请求消息格式
1.请求行
2.请求头
3.请求空行
4.请求体
servlet提供服务的方法: service
/*2022.2.25*/
HTML <form action='xxx'> xxx是表单数据提交的位置,此位置不一定是文件名,通过web.xml和
@WebServlet(value=“xxx”)可以让servlet有多个名字
request处理步骤:1.tomcat服务器会根据请求url中的资源路径,创建对应的ServletDemo1的对象。
2.tomcat服务器创建request和response对象,request对象中封装请求消息数据。
3.tomcat将request和response两个对象传递给service方法,并且调用service方法。
4.我们通过request对象获取请求消息数据,通过response对象设置响应消息数据。
request对象体系
ServletRequest ---接口
HTTPServletRequest ----接口
tomcat的一个文件 --类
request功能:1.获取请求数据(关键是获取虚拟目录和URI)
错误日志:编写servlet和html,用tomcat启动,但是输入localhost/demo1,找不到该路径。
后来发现正确路径应该是localhost:8080/Property_Management_System/demo1,少了端口号和项目名(空格部分用下划线)。而且设置HTTP端口名为80,可以省去端口号直接访问。
Servlet转发:一个servlet执行一部分,再把任务给另一个servlet去处理
具体语句:request.getRequestDispatcher("/xxx").forward(request,response)
/*2022.2.26*/
登录界面开发步骤:
1.创建项目,导入HTML页面,配置文件,jar包
2.创建数据库环境
3.创建model(domain) dao web等几种包,在model里面创建user类
4.建立userdao,写JDBCUtils供dao使用
java连接池(就是访问数据库的文件),主要用C3P0、DBCP、Druid(德鲁伊)
/*2022.2.27*/
Druid连接池配置
properties pro = new Properties();
InputStream is = JDBCUtiles.class.getClassLoader().getResourceAsStream("druid.properties")
DataSource ds = DruidDataSourceFactory.createDataSource(pro);
Connection conn = ds.getConnection();
System.out.println(conn);
query类的方法
把从数据库接收的数据封装成一个对象:User user=template.queryForObject(sql,
new BeanPropertyRowMapper<User>(User.calss),
loginUser.getUsername(),loginUser.getPassword());
/*2022.3.3*/
LoginServlet写法
1.设置编码 //req.setCharacterEncoding("utf-8");
2.获取参数 // String username = req.getParameter("usename");
3.封装对象 //User loginUser = new USer();
loginUser.setUsername(username);
4.调用UserDao的login方法
UserDao dao = new UserDao();
User user = dao.login(loginUser);
5.判断user
if(user == null){
//登录失败跳转
req.getRequestDispatcher("failServlet").forward(req,resp);}else{(跳转成功的servlet)}
req.setAttribute("user".user);//存储数据
另一种简单方法(用到commons-beanutils包)
2.Map方法(批量封装)
User user = new User() //先定义一个JavaBean对象
BeanUtils.populate( user , request.getParameteMap() ) //将request中的参数映射到User Bean中的set和get方法
/*2022.3.11*/
filter过滤器,拦截器
chain.dofilter()//放行
过滤器执行流程:
1.执行过滤器
2.执行放行后的资源
3.回来执行过滤器放行代码下边的代码
过滤器生命周期方法:
1.init:服务器启动时,调用一次,加载资源
2.doFilter:拦截时执行,执行多次
3.destroy:在服务器关闭后,Filter对象被销毁。正常关闭,调用一次,释放资源
拦截路径配置:
1.具体资源路径:/index.jsp 只有访问index.jsp资源时,过滤器才会被执行
2.拦截目录:/user/* 访问user下的所有资源
3.后缀名拦截:*.jsp 访问所有jsp资源时,过滤器都会执行
4.拦截所有资源:/* 访问所有资源
配置方法1.web.xml 2.注释
拦截方式配置:资源被访问的方式
*注解配置 例:@WebFilter(value="/*",dispatcherTypes=DispatcherTypes.REQUEST)
对多种访问拦截:@WebFilter(value="/*",dispatcherTypes={DispatcherTypes.REQUEST,DispatcherTypes.FORWARD})
*设置dispatcherTypes属性
1.REQUEST:默认值。浏览器直接请求资源
2.FORWARD:转发访问资源
3.INCLUDE:包含访问资源
4.ERROE:错误访问资源
5.ASYNC:异步访问
*web.xml配置<dispatcher></dispatcher>
/*2022.3.7*/
eclipse如何debug
构造方法:
1.构造方法的名称必须和所在的类名完全一样,连大小写也要一样
2.构造方法不要写返回值类型 public Student(){}
3.构造方法不能return一个具体值
4.不写构造方法,编译器自动写
5.一旦编写了一个构造方法,编译器就不会补
/*2022.3.10*/
Java map类,和python的字典一样
put方法:map.put(“str1”,”str2“),成功放入返回null,键重了返回被替换的键值。
动态规划算法
一种用空间换时间的方法
1.递归中是否有很多子问题被重复调用
2.满足最优子结构,也就是大问题取最优解时组成它的小问题也都是最优解。
/*2022.3.11*/
多线程编程
Java线程优先级抢占调度,所以程序执行很随机。
java.lang.Thread类
创建方法一 : public class MyThread extend Thread{
在子类中重写run方法,设置线程任务 public void run(){
创建子类的实例 MyThread mt = new MyThread();
调用start,执行线程 mt.start();
创建方法二: 实现java.lang.Runnable接口
1.创建一个Runnable的实现类 public class RunnableImpl implements Runnable
2.重写run
3.创建实现类对象 new RunnableImpl()
4.创建Thread类对象 new Thread(run);
5.Thread的类对象调用start()
该类的常用方法:getName() 、 currentThread() 、 setName() 、sleep()
获取当前线程名称 thread.currentThread().getName()
除了setName设置线程名字,还可以继承父类的带参构造方法 thread(String name){super(name);}
sleep()暂停毫秒数继续执行,注意有异常要抓取。
/*2022.3.26*/
一种简化JDBC技术的库:DbUtils(org.apache.commons.dbutils.DbUtils)
QreryRunner类(org.apache.commons.dbutils.QueryRunner) 是Dbutils的核心类之一,它显著的简化了SQL查询,并与ResultSetHandler协同工作将使编码量大为减少。它包含以下几个方法:
1. query(Connection conn, String sql, Object[] params, ResultSetHandler rsh):执行选择查询,在查询中,对象阵列的值被用来作为查询的置换参数。
2. query(String sql, Object[] params, ResultSetHandler rsh):方法本身不提供数据库连接,执行选择查询,在查询中,对象阵列的值被用来作为查询的置换参数。
3. query(Connection conn, String sql, ResultSetHandler rsh):执行无需参数的选择查询。
4. update(Connection conn, String sql, Object[] params):被用来执行插入、更新或删除(DML)操作。