其实早就开始定好目标要学习JavaWeb了,只是因为懒,少实践,所以,一直没有好好总结一下自己前一段时间学了啥。既然确定准备校招了。那就该好好总结了,好吧,从坚持写博客开始。(ps:我是20届的孩子。基础较差,但是笨鸟先飞嘛。早点开始也好,反正我是那种没有啥事的人,以后估计啥节日都会待在学校里吧。确实挺无趣的哈。)
首先,Java基础咱就不说了。这个不管啥时候,都是常用的,重要的无非那么几点,真的练多了就不会那么陌生了。每天保证一定数量的代码练习,遇到不会的就去查api,前期可能不太习惯着去查api,可以百度或者google嘛。程序员不会就要去查嘛。
我个人认为一些比较重要的基础有这些:(同实验室入职腾讯的师姐给我的一张公司发的表)
Java基础:1、java基本的程序设计结构。2、对象与类 3、继承 4、接口与内部类 5、集合
我近来,JavaWeb学习的过程。
首先前端的html/css/JavaScript是需要了解以下的。这一块要记得东西挺多的,我当时不是很懂,硬生生的看了好久的书,然后实现了一些书上的代码。然而感觉现在忘干净了。不过我觉得只要脑子中有一定概念就行,遇到自己想要实现的结构或者框架,可以去网上查一下,如何实现,代码copy一下就好了,推荐的网站是菜鸟教程。比较常用且方便的有BootStrap框架。
接下来就是比较重要的数据库了。这一部分相当重要,对于后端开发人员来讲,这一块真的是很基础了。比较基础的比如单表中的增删改查(crud)多表之间有一对多(在多表一方添加外键),多对多(引入一张中间表,将多对多拆成两个一对多),一对一的关系。比较重要的是多表查询(面试笔试常考)关键点有内连接,外连接,子查询等知识点。日常练习的话推荐leetcode和牛客。当然学习数据库方面的知识主要还是为web服务的嘛。Java中的JDBC就需要大家烂熟于心了,尤其是注册驱动这一部分。
我们使用JDBC访问数据库时,第一步需要注册驱动以mysql数据库为例,平常我们都是Class.forName("com.mysql.jdbc.Driver");
有没有人觉得为什么我只做了一个Class.forName的操作,DriverManager就知道这个驱动在哪里
这里都没有引用给DriverManager
其实注册驱动有三种方式
第一种
Class.forName中的参数其实就是驱动类的包名.类名,这个类可以new的
Driver d=new com.mysql.jdbc.Driver();
DriverManager中提供了registDriver方法注册驱动
DriverManager.registerDriver(d);
第二种
就是我们平常用的方式,
那为什么他能注册驱动呢?
原因是Class.forName这个方法会导致一个类被加载
类加载了会自动的执行这个类里的静态代码块
静态代码块中其实写的就是第一种里面的代码
Class.forName("com.mysql.jdbc.Driver");
第三种
程序中不做注册驱动的事情,在执行java命令运行时,加-D参数让虚拟机加载驱动类,并注册驱动
java -Djdbc.drivers=com.mysql,jdbc.Driver
相应的优化策略有连接池常用的是C3p0和DButils。其中DButils更简便一些。它的三个核心分别是QueryRuner(用于操纵sql语句)DbUtils:进行事务和资源管理。ResultSetHandler:起到对从数据库中取出的对象进行封装的作用。常用的有BeanListHandler(对list进行封装)BeanHandler(单个数据)MapListHandler(对以key:value形式的数据库对象进行封装)
接下来是非常重要的Web基础Servlet/JSP
Servlet是运行与web服务器端的程序,主要功能就是提供请求/响应的Web服务模式。说白了就是响应请求并做出相应的处理。Servlet处理客户端请求有如下几个步骤(1)用户通过单击一个链接来向Servlet发出请求。(2)Web服务器接收到请求后,会把该请求交给相应的容器来处理,当容器发现是对servlet发起的请求后,会创建两个对象:HttpServletResponse和HttpServletRequest。(3)容器根据消息中的URL信息,找到对应的Servlet,然后针对该请求创建一个单独的线程,同时把request对象和response对象传递到新创建的线程中。(4)容器调用Servlet的service()方法来完成对客户请求的响应,service()方法会调用doPost()或doGet()方法来完成具体的响应任务,同时把生成的动态页面返回给容器。(5)容器把响应消息组装成HTTP格式返回给客户端,客户端通过浏览器看到相应的内容。此时,这个线程运行结束,同事删除request和Response对象。
接着有必要说一说Servlet的生命周期了。每个Servlet运行都遵循以下生命周期(1)创建Servlet实例(2)Web容器调用Servlet的()方法,对Servlet进行初始化(3)Servlet初始化后,将一直存在于容器中,用于响应客户端请求,如果客户端发送GET请求,则调用doGet方法,处理并响应请求,doPost请求也类似。或者统一使用Service方法处理来响应用户请求。(4)Web容器决定销毁Servlet时,先调用Servlet的destory方法,通常在关闭Web应用之时,销毁Servlet。
JSP则可以看做可以嵌套java代码的特殊的html。它的引入在一定程度上解决了Servlet存在的缺点(Servlet响应请求是,需要用很长的html格式的字符串写入println()方法中。编写大量的html字符串是很容易出错。且代码的可读性非常差。)JSP可以看做是一个特殊的Servlet,它是Servlet的一种扩展。JSP页面最终是要被转化成Servlet来运行的。因此处理请求实际上是编译后的Servlet。
需要特别关注的几个点有以下几个
1.Servlet中,servletContext是全局管理者,其主要功能是获取全局的初始化操作,获取资源文件,获取mimetype等。在编辑服务器页面上传下载文件逻辑时,具有很好的效果。
2.rr,分别是request和response,这二者很容易搞混。
request:请求,获取从浏览器发来的数据,如获取参数 request.getParametre(" "),获取项目目录 request.getContextPath(),
requset作为域对象时,跳转request.getRequestDispatcher("相对路径").forward(request,response)
response:响应,往浏览器写东西。写入浏览器getWriter().print(),设置编码方式response.setContextType("text/html;charset=utf-8"),重定向 response.sendRedirect("绝对路径")
会话技术:cookie和session
jsp内置对象(9个):request,response,session,out,expection,application,page,pageContext,config
el 形式: ${el表达式}
jstl 常用 c:if c:forEach
接下来,我要学习框架了,Spring,SpringMVC,Mybatis。加油啦