java 培训日记

本文介绍了Java Web开发的基础知识,包括myEclipse的安装与使用、JSP基础语法、Tomcat中重要Servlet的作用及两个实战案例:模拟DefaultServlet输出静态文件内容和实现通用计数器。
进行了一周紧张后的学习,今天终于闲下把日记与大家分享,在这周里张老师给我们讲了好多未来我们在工作中出现的一些问题,我记得不是很好!希望大家多提建议!让我更好的掌握JAVA :D
一、myeclipse的安装和基本使用
1、安装路径最好不带有空格;
2、将Tomcat置于myeclipse的控制之下;
3、建立Web Project,以及发布到Tomcat服务器;
4、myeclipse常用的快捷键列表如下:
Alt + / 代码提示
Ctrl + shift + o 导入包
Ctrl + shift + f 代码格式化
Alt + shift + s 弹出使用右键source的菜单
Alt + shift + z 代码包含(如try/catch)
Alt + shift + / 将代码注释掉
Alt + shift + \ 取消对代码的注释

二、JSP的部分基础知识
1、指令元素:page指令,include指令,taglib指令。指令必须嵌套在<%@ %>中
2、脚本片段,在里面直接写java源代码 <% %>
3、脚本表达式 <%= %>
4、脚本声明 <%! %>
5、JSP注释 <%-- --%>

三、Tomcat中重要的几个Servlet(在\conf\web.xml中查看)
DefaultServlet(缺省Servlet) org.apache.catalina.servlets.DefaultServlet
作用:处理服务器中某个静态资源,例如加载静态的网页,图片。如果在conf目录下的web.xml中注释掉这个servlet,则我们发布的静态网页不会显示。(还要注释掉<servlet-mapping>)
InvokerServlet(Servlet激活器) org.apache.catalina.servlets.InvokerServlet
作用:激活和调用任何其他Servlet,需要在全局的Web.xml中配置,默认被注释掉,如果去掉注释,则我们不用自己在我们的web.xml中配置我们写的servlet,服务器也会自动帮我们加载。
JspServlet org.apache.jasper.servlet.JspServlet
作用:编译和执行jsp页面

四、两个案例
(一)模拟DefaultServlet输出静态文件的内容
1、Tomcat系统的DefaultServlet的作用就是读取静态资源然后输出到客户端浏览器,为了能验证程序的效果,我们需要把系统conf\web.xml中关于它的配置注释掉;
2、新建一个Servlet,假定我们只让这个servlet拦截对Html文件的访问,就把映射路径设置为*.html;
3、在servlet里面得到浏览器请求的文件名,得到输入流,再把输入流读到数组当中,再把数组内容写入到由response对象得到的输出流ServletOutputStream中即可。
主要代码如下:
public class DefaultServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
FileInputStream fis = new FileInputStream(request.getRealPath("/") + request.getServletPath().substring(1));
ServletOutputStream sos = response.getOutputStream();
byte[] buf = new byte[1024];
int len = -1;
while((len = fis.read(buf))!= -1){
sos.write(buf);
}
sos.flush();
sos.close();
fis.close();
}
}
小知识点:如何获取浏览器的请求名?
假如在浏览器的地址栏里面输入:http://localhost:880/Test/MyJSP.jsp
方法一:
String path1 = request.getRequestURI() 得到/Test/MyJsp.jsp
String path2 = request.getContextPath()得到/Test
path1.substring(path2.length())
方法二:
String path = request.getServletPath() 得到/MyJsp.jsp
path.substring(1)

(二)计数器
(1)用JSP实现记数
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<html>
<head>
<title>My JSP 'view.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
</head>
<%!int count = 0; %>
<body>
您是第<%=++count %>个访问者。<br>
</body>
</html>

如果这样定义count:<% int count = 0 %>就不能看到效果,通过查看服务器自动生成的servlet(在work/lib内),发现这种定义是在service方法中的,而向上面那种定义是在方法外面的,就成了成员变量,在下次调用时,count值仍然不变。这样就可以实现了。但是当服务器关闭了,那么count就归0了。

(2)用servlet编写通用计数器
对单个文件写个计数器比较简单,复杂的是写一个通用的计数器,可以统计很多页面。实施原理如下:
1、使用一个CountServlet来完成计数功能;主要代码如下:
public class CountServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
int count = -1;
try {
count = getCount(request);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
sendImage(response, count);
}
private void sendImage(HttpServletResponse response, int count){
try {
response.setContentType("image/jpeg");
ServletOutputStream sos = response.getOutputStream();
BufferedImage image = new BufferedImage(80, 20, BufferedImage.TYPE_INT_RGB);
Graphics g = image.getGraphics();
g.setColor(Color.BLACK);
g.fillRect(0, 0, 80, 20);
g.setColor(Color.WHITE);
g.setFont(new Font(null, Font.PLAIN|Font.BOLD, 18));
g.drawString(String.valueOf(count), 0, 18);
g.dispose();

ImageIO.write(image, "JPEG", sos);
sos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private void sendText(HttpServletResponse response, int count){
try {
response.setContentType("text/html;charset=GB18030");
PrintWriter out = response.getWriter();
out.println("document.write('本页面访问次数为" + count + "')");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private int getCount(HttpServletRequest request) throws Exception{
int count = 0;
String path = request.getRealPath("/count.txt");
FileInputStream fis = new FileInputStream(path);

Properties prop = new Properties();
prop.load(fis);

String fileName = request.getHeader("referer");
System.out.println(fileName);
String tmp = (String)prop.get(fileName);
if(tmp!=null){
count = Integer.parseInt(tmp);
}
count++;
FileOutputStream fos = new FileOutputStream(path);
prop.put(fileName, new Integer(count).toString());
prop.store(fos, "success");
fis.close();
fos.close();
return count;
}
}
2、在多个页面中写入相同的一段代码,通过这段代码来访问计数Servlet并得到各自的计数值,代码如下:
<script type="text/javascript" src="/CountServlet"></script>
这段代码中src就指出了哪个访问Servlet。这段代码无非是想访问src指出的路径,然后得到一段javascript代码,这段代码把得到的计数值显示出来,类似如下的代码:

document.write("访问次数为n");

我们可以在servlet中输出上面这段代码即可。

3、需要在CountServlet中得到请求来源页面,并把这个页面的信息作为属性文件的key
得到请求页面的方法是 request.getHeader("referer"),referer是一个特殊的请求头,当通过超链接从一个页面访问另一个页面时,浏览器会自动在请求信息里面加上这个头,告知服务器它来自哪里。
<script type="text/javascript">
document.write("访问次数为n");
</script>

五. 对日期格式化的例子
<%
DateFormat df = new SimpleDateFormat("yyyy年MM月dd日");
df.format(new Date());

DateFormat df2 = DateFormat.getDateInstance(DateFormat.LONG, request.getLocale());
df2.format(new Date());
%>
通过该例子而引出的知识点:
大知识点:抽象类的实例化方法,一是实例化其子类,二是通过getInstance方法得到
小知识点:Locale的作用(包含国家和地区的信息),通过更改浏览器语言选项来演示讲解。
### 回答1: 今天是我作为一名java开发工程师实习生的第一天。我来到了实习公司的办公室,见到了我的导师和团队成员们。大家都非常友好热情地欢迎我加入团队,并向我介绍了公司的工作环境和项目情况。 上午,我开始熟悉公司的开发环境和流程。我的导师为我提供了一台电脑,并教我如何安装和配置开发工具。他还帮我了解了公司的代码库和项目架构,为我提供了一份详尽的技术文档,让我可以更好地了解项目的需求和开发标准。 下午,我开始着手解决一个简单的bug。我通过阅读代码和运行调试,找到了问题所在,并进行了修复。虽然这只是个小问题,但我在这个过程中学到了如何有效地定位和修复bug,同时也对项目具体的功能和逻辑有了更深入的理解。 在实习过程中,我有机会参与团队的例会和讨论。团队成员们给我提供了许多有用的建议和指导,让我更加快速地适应了项目的开发环境和工作方式。我也从中学到了如何与团队成员共同合作,协调开发进度,并及时向导师汇报工作进展。 通过今天的实习经历,我深刻感受到了作为一名java开发工程师的实际工作要求和挑战。在接下来的实习日子里,我将继续学习和提高自己的技术能力,努力完成自己的任务,并与团队成员们共同进步。我相信,通过这段实习经历,我将成为一名优秀的java开发工程师。 ### 回答2: 今天是我作为一名Java开发工程师实习的第一天。 早上,我来到实习公司的办公室,和其他实习生一起参加了新员工培训培训内容包括公司的组织结构、业务范围以及团队的工作流程。在培训过程中,我了解到公司拥有一支优秀的技术团队,每个人在自己的领域具有深厚的技术实力。 上午结束后,我被分派到一个Java开发团队。团队由一名技术合伙人领导,其他成员都是经验丰富的开发工程师。我的一个主要任务是研究和开发一个新的功能模块,以提高公司产品的性能和稳定性。 在开发过程中,我使用了Eclipse等工具进行编码,并与团队成员进行了频繁的交流和讨论。他们给予了我很多指导和帮助,帮助我更好地理解和应用Java开发的最佳实践。 下午,在学习了一些基础知识后,我开始动手编写代码。在开发过程中,我遇到了一些问题,比如如何优化代码以提高效率,如何处理异常等。幸运的是,我得到了团队成员的帮助和指导,他们分享了一些他们在实际项目中遇到的类似问题的解决方案。 在一天的实习结束时,我与团队成员进行了一次小结会议。大家彼此分享了各自的工作情况和进展,还讨论了一些技术问题和解决方案。这个会议不仅让我更好地理解团队的工作流程,也让我对我目前的工作进展有了更清晰的认识。 今天的实习经历让我深刻地认识到作为一名Java开发工程师,不仅要有扎实的编程基础,还需要不断学习和掌握新的技术,不断提高自己的解决问题的能力。我相信在接下来的实习中,我将会不断成长并做出更大的贡献。 ### 回答3: 今天是我作为一名Java开发工程师实习的第一天,我充满了期待和激动。早上我按时到达办公室,见到了导师和同事们。他们很热情地欢迎我,并给我介绍了实习的相关事宜。 上午,我开始熟悉公司的开发环境和工具。导师详细地讲解了公司的项目架构和使用的技术栈,还给我分配了一部分代码任务,供我练手。虽然有些挑战,但我充满信心,准备好充分发挥我在大学学到的知识和技能。 下午,我开始跟随导师进行实际的开发工作。我们一起参与了一个大型项目的开发,这个项目正在开发一个电子商务平台。我负责实现其中一个功能模块,主要涉及数据库设计和后端业务逻辑的开发。我通过使用Java的Spring框架和Hibernate技术,成功地完成了该功能的开发任务。在这个过程中,我深刻地体会到了实际开发中的挑战和乐趣。 通过今天的实习,我认识到自己在Java开发领域还有很多需要提高和学习的地方。我决心在实习期间,通过与导师和同事的交流和学习,不断进步。我会多阅读相关的技术书籍和博客,积极参与工作和团队的讨论,努力提升自己的技术水平和解决问题的能力。 实习的第一天给了我很多启发和动力,也增强了我对Java开发的热爱。我相信通过这段实习经历,我将能更好地理解和掌握软件开发的工作流程和规范。我期待着未来的每一天,继续在这个团队中成长和学习。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值