该来的都在路上

该来的都在路上

首先非常感激51cto给予我表达自己内心真实想法的这次机会。51cot这么大一个教育平台,汇聚了各行各业的人才,我一个刚出炉的大学生在各位IT届的精英们面前分享学习经历,学习心得,说真的内心既窃喜,又惶恐。如果非用一个成语来形容的话,受宠若惊我觉得很合适。以下是我在51cto的学习经历,很荣幸和各位分享。
不知不觉,51cto陪我走过了1年多的时间。这1年多时间,说长也不长,说短也不短,是我大学生涯的四分之一多。记得我第一次在51cto上学习的课程是微职位的信息安全培训。当时自己在大二,一天也就是正常的上下课,对自己未来职业也没有明确的规划。对网上学习网站说真的不是很了解。当时的价格是1680,还是优惠后的价格。对于一个普通家庭的大学生而言,这也算一笔大的花销。但一想到我想要的那个证书,我果断买了。之后就是正常的进入学习班级群,而这也是我学习生涯的十字路口。
进入班级群之后,我有幸认识了薛大龙博士,朱小平老师和施游老师。在和这些优秀的人交流过程中,我发现了自己眼界的局限性,了解了目前IT行业的基本状态,了解了自己所学的和企业之间的差距。而更为重要的,是他们对于我学习习惯上影响和学习效率的提升。我以前的学习就是通过看书,自己琢磨。而接受新的知识,总是需要一个过程。这个过程可能很漫长。而通过看老师讲解的视频,我就轻松了许多。我知道了那些知识是重点,那些是非重点。一下子,少走了许多弯路,节约了很多时间。
到了大三,我的导师建议我学习一下python。我一下子想到了51cto。然后又认识了李宁老师。当时记得51有个激发python学习的小活动,是生成一一个随机数,随机抽取幸运观众。奖品时一本关于python和一只无忧熊。很幸运我成为了唯一获得一等奖的幸运观众。
直到今年,我在校看着身边许许多多的同学开始培训,实习,我也开始慌了。他们开始交卷了,我啥都没写。我开始考虑我的未来该怎么定义。然后51给了我答案---Java开发工程师。在了解了课程内容和行业前景后,我决定报名学习。那时候正赶上双十一,下来大概是6880。可此时我面临的第一个问题就是资金。我没有毕业,自己没有收入来源,唯一的途径只能找父母了。当时家里那几天也正好忙着买苹果(家里的主要收入来源)。等过了几天,当我决定要报这个课程时,发现双十一活动已经过去了,课程价格一下子又回到8000多。然后我就联系了一下之前的客服老师,问他能不能把双十一的活动折扣活动续上,送的礼品兑换成现金。老师说他试试申请一下。之后在老师的帮助下,我最终已6880的价格买了下来。
购买后我就快速进入视频学习。这个课程是由白鹤翔老师和肖明鑫老师讲的。我最受影响的是他们对我编码习惯的改变。我记得白老师第一句话就是要求我们做一个有洁癖的程序员。这句话对我的影响很大。在老师的示范下,我的编码习惯得到了很好的修正。我现在也越来越体会到编码习惯对开发的影响有多大。我也很喜欢肖老师一丝不苟的做事风格,以及对于程序思维上的深刻影响。也很喜欢群里活跃的学习气氛,以及老师、小班的积极解答。从11月15日到现在,我几乎每天都在学习这门课程。我觉得我已经在进步了,从以前的只能写helloword到现在能独立完成小型网站的开发,从打印“*”构成的三角形到数据库开发,从数字的求和到框架。51陪我一起见证了我的成长。
成功路上没有捷径,但有起跑线。起点真的很重要。我是站在51cto这个巨人的肩膀上学习。很感谢51cto给予我学习上的帮助,让我看到了许多我没有看到的风景。也很荣幸能和各位分享我的学习经历。对即将毕业,踏上工作生涯的我来说,少了一丝担忧,多了一份从容。该来的都在路上,你现在经历的,还有许多人也会经历,又何必慌张。
最后再次感谢51cto,给予我和各位分享学习经历的机会。新春之际,也祝愿51cto学习和工作的师生同仁身体健康,工作顺心!
以下是我在Java开发工程师课程中web服务端学习知识的总结和自己的一些拙见,在这里和各位分享。

一、 Servlet
1.1、servlet简介
Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。其实Servlet就是Java语言实现的一个接口,Servlet运行于支持Java的应用服务器中。从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。
1.2实现过程
1.客户端发送请求至服务器端;
2.服务器将请求信息发送至 Servlet;
3.Servlet 生成响应内容并将其传给服务器。响应内容动态生成,通常取决于客户端的请求;
4.服务器将响应返回给客户端。

1.3servlet九大内置对象

  1. request对象
    该对象封装了用户提交的信息,通过调用该对象相应的方法可以获取封装的信息, 即使用该对象可以获取用户提交信息。 客户端的请求参数都被封装到这个对象里面
    2.response对象
    对客户的请求做出动态的响应,向客户端发送数据。
    3.session对象
    1.什么是session:session对象是一个JSP内置对象,它在第一个JSP页面被装载时自动创建(web容器创建的,使用者直接使用即可),完成会话期管理。
    从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这个服务器结束,被称为一个会话。当一个客户访问一个服务器时,可能会在这个服务器的几个页面之间反复连接,反复刷新一个页面,服务器应当通过某种办法知道这是同一个客户,这就需要session对象。
  2. aplication对象
    1.什么是application:
    服务器启动后就产生了这个application对象,当客户在所访问的网站的各个页面之间浏览时,这个application对象都是同一个,直到服务器关闭。但是与session不同的是,所有客户的application对象都是同一个,即所有客户共享这个内置的application对象。
    2.application对象常用方法:
    (1)public void setAttribute(String key,Object obj): 将参数Object指定的对象obj添加到application对象中,并为添加的对象指定一个索引关键字。(这个在web开发中很创建,可以通过与对象进行转发,达到数据共享)
    (2)public Object getAttribute(String key): 获取application对象中含有关键字的对象。
  3. out对象
    out 对象是一个输出流,用来向客户端输出数据。out对象用于各种数据的输出。可以直接输出到前端页面中。
  4. page java.lang.Object
    对应this关键字。JSP网页本身
    page对象是当前页面转换后的Servlet类的实例。从转换后的Servlet类的代码中,可以看到这种关系:
    Object page = this;
    在JSP页面中,很少使用page对象。
    7.config
    javax.servlet. ServletConfig 的实例,该实例代表该JSP 的配置信息。常用的方法有getInitPararneter(String paramNarne) 及getInitPararneternarnes() 等方法。事实上, JSP 页面通常无须配置,也就不存在配置信息。因此,该对象更多地在Servlet 中有效。

  5. exception java.lang.Throwable 的实例
    该实例代表其他页面中的异常和错误。只有当页面是错误处理页面,即编译指令page 的isErrorPage 属性为true 时,该对象才可以使用。常用的方法有getMessageO和printStackTraceO等。

  6. pageContext
    javax.servlet.jsp.PageContext 的实例,对象直译时可以称作“页面上下文”对象,代表的是当前页面运行的一些属性,通过此对象可以拿到其他8大对象,使用该对象可以访问页面中的共享数据。常用的方法有getServletContextO和getServletConfigO等。

//使用pageContext 设置属性,该属性默认在page 范围内
pageContext. setAttribute ("page" , "hello") ;

//使用request 设置属性,该属性默认在request 范围内
request. setAttribute ("request" , "hello");

//使用pageContext将属性设置在request 范围中
pageContext.setAttribute("request2" , "hello" , pageContext.REQUEST_SCOPE);

// 使用session将属性设置在session 范围中
session.setAttribute("session" , "hellosession"; )

//使用pageContext将属性设置在session范围中
pageContext.setAttribute("session2" , "hello" , pageContext.SESSION_SCOPE);

//使用application将属性设置在application范围中
application. setAttribute ("app" , "hello") ;

//使用pageContext 将属性设置在application 范围中
pageContext.setAttribute("app2" , "hello" , pageContext.APPL 工CATION_SCOPE) ;

1.4 四个作用域
1.application:全局作用范围,整个应用程序共享,就是在部署文件中的同一个webApp共享,生命周期为:应用程序启动到停止。
2.session:会话作用域,当用户首次访问时,产生一个新的会话,以后服务器就可以记住这个会话状态。生命周期:会话超时,或者服务器端强制使会话失效。(一个简单的应用就是可以动态的获取登录后的用户名称)
3.request:请求作用域,就是客户端的一次请求。
4.page:一个JSP页面。
1.5 servlet简单案例—用户登录,动态获取用户名,显示欢迎信息
1.下载的html页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>下载案例</title>
</head>
<body>
<a href="/response/ServletDownload?filename=曾惜-讲真的.mp3">曾惜-讲真的.mp3</a>
</body>
</html>
2.servlet后台逻辑
package com.lyg.servlet.download;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLEncoder;

@WebServlet("/ServletDownload")
public class ServletDownload extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取文件名
String filename = request.getParameter("filename");
//获取servletcontext对象
ServletContext servletContext = getServletContext();
//设置响应头
String mineType = servletContext.getMimeType(filename);
response.setHeader("content-type",mineType);
//告诉浏览器是打开还是保存,并设置下载后的文件名
response.setHeader("content-disposition","attachment;filename="+filename);
String userAgent = request.getHeader("user-agent");
filename = URLEncoder.encode(filename, "utf-8");

    //创建输入流,读入目标文件
    InputStream inputStream = servletContext.getResourceAsStream("/WEB-INF/elements/"+filename);
    byte []chars=new byte[1024*8];
    //创建一个ServletOutputSteam 对象
    ServletOutputStream outputStream = response.getOutputStream();
    int len;
    while ((len=inputStream.read(chars))!=-1){
        outputStream.write(chars,0,len);
    }
    inputStream.close();
}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    this.doPost(request,response);
}

}

二、jsp
2.1 jsp简介
JSP全名为Java Server Pages,中文名叫java服务器页面,其根本是一个简化的Servlet设计,它 [1] 是由SUN公司倡导、许多公司参与一起建立的一种动态网页技术标准。JSP技术有点类似ASP技术,它是在传统的网页HTML文件(.htm,.html)中插入Java程序段Scriptlet)和JSP标记(tag),从而形成JSP文件,后缀名为(*.jsp)。 用JSP开发的Web应用是跨平台的,既能在Linux下运行,也能在其他操作系统上运行。
它实现了Html语法中的java扩展(以 <%, %>形式)。JSP与Servlet一样,是在服务器端执行的。通常返回给客户端的就是一个HTML文本,因此客户端只要有浏览器就能浏览。
JSP技术使用Java编程语言编写类XML的tags和scriptlets,来封装产生动态网页的处理逻辑。网页还能通过tags和scriptlets访问存在于服务端的资源的应用逻辑。JSP将网页逻辑与网页设计的显示分离,支持可重用的基于组件的设计,使基于Web的应用程序的开发变得迅速和容易。 JSP(JavaServer Pages)是一种动态页面技术,它的主要目的是将表示逻辑从Servlet中分离出来。他的本质上还是一个Servlet。
2.2 page指令
1.包含选项
import 使一个JAVA导入声明被插入到最终页面文件。
contentType 规定了生成内容的类型。当生成非HTML内容或者当前字符集character set并非默认字符集时使用。
errorPage 处理HTTP请求时,如果出现异常则显示该错误提示信息页面。
isErrorPage 如果设置为TRUE,则表示当前文件是一个错误提示页面。
isThreadSafe 表示最终生成的servlet是否安全线程(threadsafe)。
2.语法
1.<%@ include file="somefile.jsp" %>:将一个页面内容包含在一个页面中

  1. <%@ taglib prefix="myprefix" uri="taglib/mytag.tld" %>:引入标签库

3.jsp和servlet综合应用---登录案例

  1. 登录后台的逻辑

package com.lyg.servlet.login;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

@WebServlet("/LoginDemo02")
public class LoginDemo02 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置编码
request.setCharacterEncoding("utf-8");
//获取参数
String username = request.getParameter("username");
String password = request.getParameter("password");final String URL = "jdbc:mysql://localhost:3306/db1";
final String USER = "root";
final String PASSWORD = "12345678";
String SQL = "select * from userinfo where name = ? and password = ?";
HttpSession session = request.getSession();//获取session对象
//连接数据库,查询
try {
Class.forName("com.mysql.jdbc.Driver");
Connection connection = DriverManager.getConnection(URL,USER,PASSWORD);
PreparedStatement preparedStatement = connection.prepareStatement(SQL);
preparedStatement.setString(1,username);
preparedStatement.setString(2,password);
ResultSet resultSet = preparedStatement.executeQuery();
String db_username=null;
String db_password =null;
if (resultSet.next()){
db_username=resultSet.getString(2);
db_password=resultSet.getString(3);
}
//判断用户名和密码是否正确
if (username.equals(db_username) && password.equals(db_password)){
//信息都正确
//页面跳转到success.jsp;
session.setAttribute("username",username);//存储用户名
response.sendRedirect(request.getContextPath()+"/success.jsp");
}else {
//用户名获取密码不正确
//存储错误信息
request.setAttribute("code_error","用户名或者密码错误");
//同一次请求,请求转发
request.getRequestDispatcher("/userinfo/index.jsp").forward(request,response);//转发错误信息
}
} catch (Exception e) {
e.printStackTrace();
}

}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    this.doPost(request,response);
}

}

  1. 前台页面就是个很简单的form表单,这里就不演示了。
    最后谢谢各位同仁的观看,我们共同学习,共同进步~~~~
    该来的都在路上

猜你喜欢

转载自blog.51cto.com/13660798/2344692