初学者Java学习笔记

笔记(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)操作。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值