MyEclipse安装、配置到部署、运行web项目
2014-11-27 11:34
671 查看
本文将介绍如何使用 MyEclipse 来开发Web 项目(包括HTML,JSP,Servlet,Filter和后台Java 类),并进行发布,运行,测试和调试。本章将通过开发一个使用JDBC 进行登录验证的简单例子来给大家展示相关的操作过程。
那么哪些应用算是 Web 应用呢?简单说通过网络浏览器,例如IE,Firefox 等等上网看到的绝大多数网页,都属于Web 应用的范围,所以它的应用是非常的广的。要想做好一个Web 应用,只掌握Java 是远远不够的,您还得深入了解HTML,CSS,JavaScript 甚至AJAX,Flash,ActiveX 等技术。俗话说的好:三分相貌七分妆。用户第一印象看到的只能是看到的网页的样子和友好度,他是完全不懂所谓的.NET,PHP,JSP,ASP 还有什么ROR的,所以提示初学者多花些时间在Web 层的技术上。
创建Web 项目
本节内容将介绍如何创建一个 JSPHelloWorld 的Web 项目。选择菜单File > New >Web Project,可以启动创建Web 项目的向导,如图8.3 所示。
在这个图的 Project Name 中输入JSPHelloWorld,然后选中J2EE Specification Level 下面的Java EE 5.0 单选钮,最后点击Finish 按钮就可以创建Web 项目了。
注意:选择哪个版本的J2EE Specification Level 取决于你使用的服务器,例Tomcat4,Weblogic 9 以下版本请选择J2EE 1.4,而Tomcat 5,JBoss 4,或者GlassFish 这样
的服务器可以选择 Java EE 5.0。Java EE 5.0 可以直接使用 EL 表达式和JSTL。
图 8.3 新建Web Project 对话框
关于输入框的详细意义请参考下表:
表8.1 新建Web 项目的选项说明
创建HTML 页面
注意:在实际的开发中,一般使用的都是像Frontpage 或者DreamWeaver 这样的工具来创建,可视化的(所见即所得,WYSWYG)的来修改静态网页(HTML)。因为MyEclipse的可视化网页编辑器功能是比较弱的。因此本节内容仅供参考。
启动创建 HTML 页面的对话框有多种方式,这里只介绍两种:1. 选择菜单 File > New> Html(Advanced Template);2. 选中Package Explorer 视图的WebRoot 目录,点击右键选择上下文菜单中的New > Html(Advanced Template)。这时候将会弹出创建HTML页面的对话框,如下图所示:
图 8.4 新建HTML 页面向导
在这个对话框中的 File Name(文件名)框中输入login.html,Template to use:(要使用的模版)右侧的下拉框选中Default HTML template(默认HTML 模版,另一个是带表单的模版)。最后点击Finish 按钮完成向导。稍后MyEclipse 会用HTML 编辑器来打开刚创建的文件,如图8.5 所示。在这里可以在页面设计器中可视化的修改网页内容,也可以点击格式工具栏上的按钮来可视化的修改网页的格式,还可以在源代码面板中直接修改HTML 源码。Properties 视图则显示了当前选中元素的属性,可以快速的对一些关键的属性进行修改。拖动设计器和源码标签之间的隔条可以对两个区域之间的大小进行调节,点击向上按钮可以最大化显示代码区,点击向下按钮则可以最大化显示设计区。点击Preview
标签可以同时在IE 和Mozilla 浏览器中查看页面的显示效果。
点击 Palette(工具箱,确切说应该是叫组件面板)可以选择对应的一些常用的代码片段插入到当前页面中,例如超链接,图片,表单和表单元素等等。HTML-Basic 里面列出常用的基本网页元素,而HTML-Form 下则列出了表单元素。
现在我们把它的内容修改成一个包含登录表单和客户端表单有效性验证的页面,然后点击工具栏上的保存按钮。代码内容请参考清单8.1。
图 8.5 HTML 编辑器
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>登录</title>
<meta http-equiv="content-type" content="text/html; charset=GBK">
</head>
<script type="text/javascript">
// 验证输入不为空的脚本代码
function checkForm(form) {
if(form.username.value == "") {
alert("用户名不能为空!");
form.username.focus();
return false;
}
if(form.password.value == "") {
alert("密码不能为空!");
form.password.focus();
return false;
}
return true;
}
</script>
<body>
请登录 <br>
<form action="login.aspx" method="post" onsubmit="return
checkForm(this);">
用户名:<input type="text" name="username"><br>
密码:<input type="password" name="password"><br>
<input type="submit" value="登录" name="submit1">
<input type="reset" value="重置" name="reset1">
</form>
</body>
</html>
复制代码
清单 8.2 登录页面
至此,创建静态页面的过程就简要介绍完毕了。在此先虚晃一枪,为什么表单的提交页面是login.aspx 呢?难道Java 也支持ASP.NET 嘛?答案请在创建Servlet中找。
创建JSP 页面
本节内容将会讲解创建JSP页面。实际上JSP编辑器许多地方都是和上文介绍的HTML编辑器非常相似的。因此本节内容将会简要介绍其过程。启动创建 HTML 页面的对话框有多种方式,这里只介绍两种:1. 选择菜单 File > New> JSP(Advanced Template);2. 选中Package Explorer 视图的WebRoot 目录,点击右键选择上下文菜单中的New > JSP(Advanced Template)。这时候将会弹出创建JSP 页面的对话框,和图8.4 非常相似。只需要在这个对话框中的File
Name(文件名)框中输入result.jsp,然后点击Finish 按钮即可创建这个JSP 页面。
注意:Template to use 右侧的模版下拉框中有很多JSP 模版可以使用,例如支持JSF,Struts 等等的模版,这样可以加快开发的速度。
稍后 MyEclipse 会用HTML 编辑器来打开刚创建的文件,界面已经操作方法和图8.5非常类似,不同的是Palette 里面多了很多JSP 特有的内容,而编辑器的代码视图呢,也支持自动查错(但是不支持自动修正错误)和代码编写提示功能,如下图所示:
图 8.6 JSP 编辑器的查错和编码提示
当你在变量后按下.之后,会弹出代码完成提示,另外还支持断点的设置等等。因此使用MyEclipse 的JSP 编辑器可以大大减少开发人员出错的机会(在出现能查错的JSP 编辑器之前这是个大问题)。
现在我们将把这个页面的代码改写成如下清单所示内容:
<%@ page language=”java” pageEncoding=”GBK”%>
<html>
<head>
<title>登录结果</title>
<meta http-equiv=”pragma” content=”no-cache”>
<meta http-equiv=”cache-control” content=”no-cache”>
<meta http-equiv=”expires” content=”0”>
</head>
<body>
您登录${message}了!
</body>
</html>
复制代码
清单 8.3 登录结果页面 result.jsp
在这个页面我们将使用JSP 2.0 里面的EL 表达式来显示登录结果信息,${message}就是一段EL 表达式,它将从request 或者session 里面查找名为message 的属性,其实就是调用getAttribute(“message”)然后把里面的内容显示出来。这个页面不包含其它复杂的代码,是因为JSP 页面一般来说是用作视图层的,专门用来显示数据用的,只能包含或者尽量少包含一些复杂的业务逻辑。
注意:EL 表达式不能在J2EE 1.4 的Web 项目中使用。如果您打算在J2EE 1.4 的Web 项目中编写这个页面,对应的代码是把
您登录${message}了!
复制代码
修改为:
<%
String message = (String)request.getAttribute("message");
if(message == null) message = "";
%>
您登录<%=message%>了!
复制代码
即可。
然而有读者发现 Tomcat 5.5 中启用了Java EE 5 也无法使用EL 表达式,那么这种情况下的一种简单解决办法是用Tomcat 6.0。不过,Tomcat 5.5 下也有解决办法,第一种是设置整个项目使用el 表达式,需要在web.xml 中加上(控制一个项目):
<jsp-config>
<jsp-property-group>
<el-ignored>false</el-ignored>
</jsp-property-group>
</jsp-config>
复制代码
第二种办法是设置某个jsp 页面使用el 表达式,需要在jsp 页面开头加上(控制单个页面):
<%@ page isELIgnored="false"%>
复制代码
在 page 指令中的isELIgnored 属性用来指定是否忽略EL 表达式。格式为:
<%@ page isELIgnored="true|false"%>
复制代码
如果设定为真,那么JSP 中的表达式被当成字符串处理。比如下面这个表达式${2000 % 20},在isELIgnored="true"时输出为${2000 % 20},而isELIgnored="false"时输出为100。Web 容器默认isELIgnored="false",但是为什么个别Tomcat 5.5 不支持呢?这我就不得而知了。
至于有没有全局的设置办法?我想应该也是有的,但是我还没找到。
创建Servlet
启动创建Servlet 的对话框有多种方式,这里只介绍两种:1. 选择菜单 File > New >Servlet;2. 选中Package Explorer 视图的项目,点击右键选择上下文菜单中的New >Servlet。这时候将会弹新建Servlet 类的对话框,如图8.7 所示。在这个对话框中的Package(包)框中输入servlets,Name(类名)输入LoginServlet,然后点击Next 按钮可以进一步设置映射文件。也可以点击Finish 按钮直接完成这个创建向导,不过此处将选择Next按钮来进入到下一步的设置页面。
图 8.7 新建Servlet 类对话框
在这一页中可以设置 Servlet 的父类(Superclass),以及修饰符(Modifiers),添加接口(Interfaces),选择模版(Template to use)以及一些选项(Options)。Options 中可以选择是否创建继承的方法(Inherited Methods),创建构造器(Constructors),初始化和销毁方法(init and destory)以及doGet,doPost,doPut,doDelete,getServletInfo等方法。详细意义请参考Servlet 开发的书籍。
当点击 Next 按钮后,将会进入修改,设置web.xml 的向导页面,如图8.8 所示。注意图中的红框,我们在这里在Servlet/JSP Mapping URL 右侧输入框中输入/login.aspx。这个路径可以帮你理解一个概念,那就是其实Servlet 的后缀可以是任何形式的字符串,例如.do,.php 等等。最后点击Finish 按钮来完成创建Servlet 的过程。
注意:Servlet 的映射路径一定要以/开始,或者以*.do 的方式出现,而且不能输入/*.do。
图 8.8 修改,设置web.xml 中的映射信息
对话框关闭后,稍等片刻 web.xml 和新创建的LoginServlet.java,可以看到web.xml的内容已经被自动加入了新的Servlet 定义,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
<description>This is the description of my J2EE
component</description>
<display-name>This is the display name of my J2EE
component</display-name>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>servlets.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/login.aspx</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
复制代码
清单 8.4 加入了Servlet 定义的web.xml
至此Servlet就创建出来了,你可以接着修改Servlet的源码来加入更多功能。这个Servlet的最终访问路径是:http://localhost:8080/JSPHelloWorld/login.aspx,是不是看起来非常像.NET应用呢?不过这是个假的而已。
创建Filter(过滤器)
实际开发中都需要开发一些很有用的过滤器,来解决中文表单提交问题啊,给请求和响应加入GZIP 压缩功能啊,用户权限控制啊,等等,然而遗憾的MyEclipse 不支持直接创建过滤器。在这里只好手工创建一个解决Tomcat 表单提交中文问题的过滤器。选择菜单 File > New > Class,来创建一个名为TomcatFormFilter 的类,包名为filters。然后把类的代码修改为如下所示:
package filters;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
public class TomcatFormFilter implements Filter {
/**
* Request.java
* 对 HttpServletRequestWrapper 进行扩充, 不影响原来的功能并能提供所
有的HttpServletRequest
* 接口中的功能. 它可以统一的对 Tomcat 默认设置下的中文问题进行解决而只
需要用新的Request 对象替换页面中的
* request 对象即可.
*/
class Request extends HttpServletRequestWrapper
{
public Request(HttpServletRequest request) {
super(request);
}
/**
* 转换由表单读取的数据的内码.
* 从 ISO 字符转到 GBK.
*/
public String toChi(String input) {
try {
byte[] bytes = input.getBytes("ISO8859-1");
return new String(bytes, "GBK");
}
catch (Exception ex) {
}
return null;
}
/**
* Return the HttpServletRequest holded by this object.
*/
private HttpServletRequest getHttpServletRequest()
{
return (HttpServletRequest)super.getRequest();
}
/**
* 读取参数 -- 修正了中文问题.
*/
public String getParameter(String name)
{
return
toChi(getHttpServletRequest().getParameter(name));
}
/**
* 读取参数列表- 修正了中文问题.
*/
public String[] getParameterValues(String name)
{
String values[] =
getHttpServletRequest().getParameterValues(name);
if (values != null) {
for (int i = 0; i < values.length; i++) {
values[i] = toChi(values[i]);
}
}
return values;
}
}
public void destroy() {
}
public void doFilter(ServletRequest request, ServletResponse
response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpreq = (HttpServletRequest)request;
if(httpreq.getMethod().equals("POST")) {
request.setCharacterEncoding("GBK");
} else {
request = new Request(httpreq);
}
chain.doFilter(request, response);
}
public void init(FilterConfig filterConfig) throws
ServletException {
}
}
复制代码
清单 8.5 过滤器代码
然后修改 web.xml 加入Servlet 定义,修改后的代码清单如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
<description>
This is the description of my J2EE component
</description>
<display-name>
This is the display name of my J2EE component
</display-name>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>servlets.LoginServlet</servlet-class>
</servlet>
<filter>
<filter-name>TomcatFormFilter</filter-name>
<filter-class>filters.TomcatFormFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>TomcatFormFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/login.aspx</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
复制代码
清单 8.6 加入了过滤器的web.xml 内容
创建数据库访问层(DAO)
做 Web 应用一般来说不访问数据库是不太可能的,因此本节就介绍给应用加入数据库访问功能。
首先第一步是创建数据库表
第二步是要加入JDBC驱动类库
这里打算使用MySQL数据库,对于Web项目来说加入类库文件非常容易,只要把mysql-connector-java-3.1.11-bin.jar这个文件复制到WebRoot/WEB-INF/lib下,MyEclipse会自动把文件加入到项目的类路径中。
第三步需要创建一个实体类,来代表数据库中的Student 对象,这个类用来保存和传递来自数据库库的数据信息。代码清单如下:
package entity;
/** 学生实体类*/
public class Student {
private int id;
private int age;
private String username;
private String password;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
复制代码
清单 8.7 Student 实体类
最后是创建一个数据库访问对象 ,其源码如下所示:
package dao;
import java.sql.SQLException;
import entity.Student;
/**
* 学生数据访问类
* @author BeanSoft@126.com
* @version 0.1 2007-12-21
*/
public class StudentDAO {
/**
* 根据用户名和密码找到用户对象。
* @param username 用户名
* @param password 密码
* @return 找到的用户对象,找不到返回null
*/
public Student findStudent(String username, String password) {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
java.sql.Connection conn = null;//数据库连接
java.sql.PreparedStatement pstmt = null;//数据库表达式
java.sql.ResultSet rs = null;//结果集
String sql = "select * from Student where username = ? and password
= ?";//SQL
try {
conn = java.sql.DriverManager.getConnection(
"jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncodi
ng=GBK", "root", null);
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, username);
pstmt.setString(2, password);
rs = pstmt.executeQuery();
if(rs !=null && rs.next()) {
// 读到数据,生成实体类
Student student = new Student();
student.setId(rs.getInt(1));
student.setUsername(rs.getString("username"));
student.setPassword(rs.getString("password"));
student.setAge(rs.getInt("age"));
return student;
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
// 6. 释放资源,建议放在finally语句中确保都被关闭掉了
try {
rs.close();
} catch (SQLException e) {}
try {
pstmt.close();
} catch (SQLException e) {}
try {
conn.close();
} catch (SQLException e) {}
}
return null;
}
}
复制代码
清单 8.8 StudentDAO 数据访问类
至此数据访问层的开发已经完成,为什么要多写这么多代码呢?这是因为分层的设计能够便于多人合作开发,也便于单独测试每一层的功能。当然,项目规模小的话把所有的代码都放到那个Servlet 里面就行了。
修改Servlet 调用后台类
现在我们可以修改 Servlet 来加入调用DAO 层代码然后判断登录的功能了,设置完登录状态后,会转向到/result.jsp。修改后的Servlet 代码如下所示:
package servlets;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import dao.StudentDAO;
import entity.Student;
public class LoginServlet extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse
response)
throws ServletException, IOException {
Student student = new StudentDAO().findStudent(
request.getParameter("username"),request.getParameter("password"));
if(student != null &&
student.getUsername().equals(request.getParameter("username")) &&
student.getPassword().equals(request.getParameter("password"))) {
request.setAttribute("message", "成功");
//保存登录用户到session中
request.getSession().setAttribute("student", student);
} else {
request.setAttribute("message", "失败");
}
//转向登录结果页面
request.getRequestDispatcher("/result.jsp").forward(request,
response);
}
}
复制代码
清单 8.9 Servlet 加入登录判断功能
至此,这个简单的登录小项目就开发完毕了。
发布,重新发布,运行和测试应用
最快的运行方式就是在Package Explorer视图中选中项目节点StrutsLoginDemo,然后选择菜单Run > Run As > 3 MyEclipse Server Application,之后MyEclipse可能会显示一个可用的服务器列表,选中其中的服务器之一例如MyEclipse Tomcat并点击OK按钮后,就会自动发布或者重新发布应用然后启动服务器。也可以通过点击主界面工具栏上的 按钮发布完毕后,然后启动服务器来进行测试了。在Servers视图中选中服务器,之后点击视图工具栏上的
按钮以运行模式启动服务器。
服务器启动完毕后,点击工具栏上的 按钮来打开浏览器视图,然后键入地址:http://localhost:8080/JSPHelloWorld/login.html 来打开登录页面,如下图所示:
图 8.9 在MyEclipse 中打开浏览器测试应用
在表单的用户名处输入数据库里存在的学生的名字,例如张三,再输入密码,然后点击提交,就可以显示登录的结果了。
如果只是修改了 JSP 页面,那么MyEclipse 会自动把JSP 更新到服务器上,但是如果是改了类文件或者一些配置文件,那么需要手工重新发布这个项目。如何重新发布这个项目呢?我们可以在Servers 视图上选中所发布的项目,然后点击视图工具栏上的
来重新发布,或者在项目上点击右键选择菜单Redeploy,如图8.10 所示。之后稍等片刻就可以完成重新发布的过程。
调试JSP 应用
MyEclipse可以对Web应用里面的类或者JSP页面,Servlet进行调试。例如可以双击JSP编辑器的行首的隔条,来设置断点,然后以调试模式启动服务器。例如下面是访问index.jsp时的调试透视图界面,我们可以修改变量值b为4(被修改过的值以本人允荆缓蟮慊鱀ebug视图的
Resume按钮来继续往下执行,就可以看到最终的执行结果是5。如下图所示:
图 8.11 修改变量跟踪调试JSP 页面
这里用的 index.jsp 页面的源码清单如下所示:
<%
int a = 1;
int b = 2;
out.println(a + b);
%>
复制代码
清单 8.10 用来调试的JSP 页面源码
使用调试器可以很方便的快速定位出现问题的地方,加快修改代码的速度。
向现有Web 项目添加Web 开发功能
如果拿到了一个其它开发工具例如 WTP,Netbeans,JBuilder 等所制作的Web 项目,而不是通过MyEclipse 所创建的Web 项目,那么MyEclipse 将会拒绝对它进行发布,调试等操作。这种情况下可以从 MyEclipse 菜单栏选择MyEclipse > Project Capabilities >Add Web Project Capabilities ... 来启动MyEclipse Web Capabilities 向导,如下图示:
图 8.12 MyEclipse Web 项目向导
在这个对话框中选中 Web 项目的根目录,点击Web Root Directory 最右侧的Browse...按钮来选中,之后设置上下文访问路径(Web Context Root),并选择合适的Java EE 版本(J2EE Specification Level)后,点击Finish 按钮后就给当前项目加入了Web 开发功能了,之后就可以方便的对它进行发布等操作。
高级设置
本节内容仅供了解,大部分情况下都不需要对这些内容进行修改。
修改Web 项目的默认设置
选择菜单 Window > Preferences,打开Preferences 对话框,在选项树上选择MyEclipse > Java Enterprise Project > Web Project,来进一步设置Web 项目的默认设置,如下图所示:
图 8.13 修改Web 项目的默认设置
在 Template 标签页可以设置Web 项目的模版,包括默认的源代码目录名以及Web 应用根目录的名称。而在Build Path 标签页,则可以设置是否自动将WEB-INF/lib 下面的jar 或者zip 文件发布到服务器上。Deployment 标签则设置了当项目存在依赖的时候如何进行发布。Tag Libraries 标签则可以修改一些自定义的标签库的快速代码段。
除此之外,还可以对单个项目的Web功能进行设置。点击菜单Project > Properties可以打开项目的属性对话框,这时候可以点击MyEclipse > Web节点进行一些必要的设置,如图8.14 所示。如果修改了值Web Context-root,例如它的值修改为ABC,那么这个项目再次发布时,将会发布到Tomcat安装目录/webapps/ABC下面,对应应用的访问地址也会改为http://localhost:8080/ABC/。如果复制Web Project来进行开发,往往会出现多个项目发布到Tomcat的webapps下面同一个目录下的问题,这时就可以修改这个属性的值来解决问题。
给Web 项目加入高级功能
在实际开发中不可避免的要在 Web 项目中使用Hibernate,Struts,Spring 等技术,那么这些都可以通过点击菜单MyEclipse > Project Capabilities 然后选择需要使用的技术,就可以将对应的类库和配置文件加入到当前项目中。例如要开发Struts 和Hibernate 应用,分别点击两次子菜单Add Struts Capabilities 和Add Hibernate Capabilities 就可以了。如下图所示:
小结
在本文我们介绍了如何开发,发布,运行,测试,调试 Web 应用,这些概念适用于以后所介绍的其它基于Web 的项目例如Struts,JSF 等等。通过本章,你将对如何使用MyEclipse 如何开发Web 项目有一个大致的了解,并为使用后续复杂的Web 框架进行开发打好基础。
首先,讲一下Myeclipse与Eclipse的差别。虽然我本科学过java,但多少年了也没用过,除了读研的时候在java的项目组里实习过半年,这半年的时间里只弄懂了几个页面之间的关系和一点点java代码,使用的工具是Jbuilder。eclipse只在传说中听过,都说是很不错的开发工具,但可惜了,一直没接触过。
毕业了,真正到公司工作才开始接触这传说中的神器。起初是部门的同事把eclipse的文件直接发给我,我一看只有一个文件夹,是免安装的,心想着这eclipse果然很开源,各种文件直接暴露在外。搭环境废了一番功夫,主要是JDK安装,还有一些项目参数的设置,以后有时间把这部分内容整理一下,发布供大家共享,也为了自己记忆、存档方便。
今天突然同事让我做一部分新的工作,发来了一个java的web项目,以及myeclipse的安装文件。我一下就蒙了,开始不停的查找资料来处理安装过程中出现的问题。书到用时方恨少,面对大量的资料只能一点一点的尝试,一次又一次的小成功推动着我继续下去,直到最后打开页面。也许我的问题在很多高手看来不值一提,但的确是解决初学者、门外汉实际问题的灵药。
Myclipse与eclipse的差别
(1)MyEclipse 把所有的插件都配好了,直接可以用,比如写jsp,struts,spring之类的,当然包也相当大, 机子不好的话开发程序比较慢;Eclipse 什么都没有,要开发什么就自己配什么插件而已。????
(2)严格的说,MyEclipse 只是 Eclipse 体系中的一种插件,只是由于 MyEclipse 经常和 Eclipse 一起安装使用,所以通常也将安装了MyEclipse 插件后的Eclipse叫做MyEclipse,二者可以单独安装,即先装Eclipse之后,再以插件方式安装MyEclipse。另一种方法则是同时安装二者,即安装MyEclipse时已经同时安装了Eclipse(他们已经整合在一起)。
(3)装了MyEclispe就不用装Eclipse了,因为MyEclispe包括了Eclipse的功能的了。
(4)MyEclispe做WEB应用比Eclipse更专业
(5)MyEclispe是收费的,需要注册码,网上有很多破解方法;Eclipse是免费的。
MyEclipse安装及配置 http://developer.51cto.com/art/200906/130498.htm
一、安装JDK
1.一路默认安装。
2.配置环境如果安装目录是C:\JAVA\JDK,设定系统变量(我的电脑(右键) ->属性->高级->环境变量):
① (新建)JAVA_HOME: C:\JAVA\JDK
② (新建)CLASSPATH: .;C:\JAVA\JDK\lib\dt.jar;C:\JAVA\JDK\lib\tools.jar(注意:点号不能省略,表示当前目录) ③ 编辑PATH的变量值,在后面加上;%JAVA_HOME%\bin(注意:要有分号隔开) 3. JDK安装完毕,用命令简单测试一下:java –version
二、安装TOMCAT,一路默认。(MyEclipse 6.0 All In One默认自带了一个Tomcat 6, 不过安装独立版本对学习更有帮助。)
三、安装Myeclipse,一路默认。
四、配置Myeclipse
1.在MyEclipse中配置JDK
① 点击Window->Preferences->Java->installed JREs,点击Add按钮,设置JRE Name为JDK,设置JRE home directory为JDK的安装目录C:\J2EE\JDK,确认即可。(这里要特别注意,默认的是 JRE 的运行环境,这里要设定成 JDK 的,否则, MyEclipse 无法正常也无法正常运行 Tomcat 服务器。)
2. 在Eclipse中配置TOMCAT(安装目录为C:\J2EE\Tomcat)
① 点击Window->Preferences->MyEclipse->Servers->Tomcat下面有几个Tomcat版本,如果安装的是Tomcat 5.x,设置Tomcat server为Enable,路径分别为C:\J2EE\Tomcat,其他的都是自动带出的。
② 点击Window->Preferences->MyEclipse->Servers->Tomcat->Tomcat 5.x->JDK,在Tomcat JDK name下拉框中选择刚刚配置的JDK。(JDK同级的Launch 中确保选中了 Debug 模式。 而 Paths 中就是一些类路径设置,第一个是提前加载的类路径,有些包一启动服务器初始化 Web Application
时就要用到第二个是运行时才用到的;第三个是没有打包的类,这里我们就不管了。)
MyEclipse安装配置完毕。MyEclipse 自带了Eclipse,所以MyEclipse安装之后,无需再安装Eclipse了。
Web项目部署及运行
一、导入项目。
File→Import→选择“Existing Project into Workspace”→选中项目文件目录,完成。
二、选择服务器,部署项目。
我们在package explorer选中项目的根目录,右键菜单 MyEclipse->Add and Remove Projects Deployments… ,点击 Add 按钮,在弹出对话框的 Server 中选择 Tomcat 5.x ,下面的两个单选项,Exploaded Archive和Packaged Archive分别是目录方式部属和包方式部属,这个都是由
MyEclipse 来做的,我们使用目录部署方式,不用打成 war 包,其他的不管了,按确定钮回到上一个页面。
服务器指定了,下面来部署应用程序。选中对话框服务器列表中的 Tomcat 5.x 项,此时,灰显的按钮变为可用,其中 Remove 是移除部署和redeploy重新部署,我们点击 Redeploy 按钮,以后我们修改了工程也可以点此按钮重新部署。这里我们可以点击一下了。
OK ,程序已经部署完成了,下面要运行调试了。
三、运行调试程序
在 Eclipse 的图形菜单栏找到Run/Stop/Restart Eclipse servers按钮,单击启动
Tomcat。
等 Console 窗口中提示 Tomcat 启动成功,我们就可以运行我们的程序了。打开一个 IE 浏览器窗口,输入 http://localhost:8080/项目名/ 页面。
这里需要补充一点信息,(多页面web系统的主页面URL输入格式必须输入正确,否则查来查去也找不到错误):
使用MyEclipse发布Web项目时URL访问路径问题。
1.如果项目名称是英文(假设是MyProject),且没有修改过发布的相关属性,那么web项目发布后,在浏览器输入 http://localhost:8080/MyProject /pageyouwant 【注意】
a.红色部分是你要访问的页面的名称,需要注意页面相对于WebRoot(在project→MyEclipse→Web中设置)的根路径。 b.localhost也可以改为你MyEclipse所在的机器的IP
2.如果项目名称包含中文或是项目名称过程,那么可以通过配置MyEclipse的选项来改变发布名称。 具体步骤如下:
选择项目右键->点击属性->MyEclipse->Web
更改右边的Context Root选项卡页面的Web Context-root 项。 例如,如改为"/MyWebPrj" 点击Ok确定,重新发布Web项目即可。
此时Web项目的访问路径就变为: http://localhost:8080/MyWebPrj /pageyouwant
大功告成。
在MyEclipse中如何去掉JS或jsp语法错误提示!
关于在 MyEclipse 上 WEB 工程里面的 JS/JSP 经常会有语法错误提示,这是由于 MyEclipse 对其语法要求相当严格所造成的,而这些文件本身是可以运行并没有什么错误的,在你实际应用部署中并无影响。
那么哪些应用算是 Web 应用呢?简单说通过网络浏览器,例如IE,Firefox 等等上网看到的绝大多数网页,都属于Web 应用的范围,所以它的应用是非常的广的。要想做好一个Web 应用,只掌握Java 是远远不够的,您还得深入了解HTML,CSS,JavaScript 甚至AJAX,Flash,ActiveX 等技术。俗话说的好:三分相貌七分妆。用户第一印象看到的只能是看到的网页的样子和友好度,他是完全不懂所谓的.NET,PHP,JSP,ASP 还有什么ROR的,所以提示初学者多花些时间在Web 层的技术上。
创建Web 项目
本节内容将介绍如何创建一个 JSPHelloWorld 的Web 项目。选择菜单File > New >Web Project,可以启动创建Web 项目的向导,如图8.3 所示。
在这个图的 Project Name 中输入JSPHelloWorld,然后选中J2EE Specification Level 下面的Java EE 5.0 单选钮,最后点击Finish 按钮就可以创建Web 项目了。
注意:选择哪个版本的J2EE Specification Level 取决于你使用的服务器,例Tomcat4,Weblogic 9 以下版本请选择J2EE 1.4,而Tomcat 5,JBoss 4,或者GlassFish 这样
的服务器可以选择 Java EE 5.0。Java EE 5.0 可以直接使用 EL 表达式和JSTL。
图 8.3 新建Web Project 对话框
关于输入框的详细意义请参考下表:
选项 | 描述 |
Project name | 项目的名称。必须是有效的 Eclipse Java 项目名。 |
Location | 选中这个复选框来选择新项目的文件将存放到电脑上的其它位置 |
Directory | 项目的默认存放位置是放在 MyEclipse 启动时候工作区目录下的。当然可以选择位于工作区目录外的其它路径。 注意:不能选择位于工作区子目录下的另一子目录,因为Eclipse 禁止这种做法! |
Source folder | Java 源代码目录-将包含Java 包和.java 文件。这些内容会被加入到项目的Java 构造路径中。 |
Web root folder | 这个目录将包含 web 应用的内容,WEB-INF 目录以及对应的子目录。如果这个输入框内容为空,那么项目的根目录("/")将会成为web 根目录。 |
Context root URL | MyEclipse的发布工具会发布新Web项目时候所使用这个路径。默认使用的值是项目的名字。什么是上下文根目录?它是访问发布后的应用时所用的根路径,例如输入myapp后,将用地址http://localhost:8080/myapp 来访问这个项目. 你可以把这个输入框中的内容修改成全是小写字母的内容。 |
J2EE specification | 指定J2EE 规范的版本。需要检查服务器的文档来了解其所支持的版本。 |
Add JSTL 1.0 libraries | 启用此选项来添加 Java Standard Template Library (Java 标准模版库1.0或者1.1 版本)的 JAR 文件到新项目的<web-root>/WEB-INF/lib 目录下。 |
创建HTML 页面
注意:在实际的开发中,一般使用的都是像Frontpage 或者DreamWeaver 这样的工具来创建,可视化的(所见即所得,WYSWYG)的来修改静态网页(HTML)。因为MyEclipse的可视化网页编辑器功能是比较弱的。因此本节内容仅供参考。
启动创建 HTML 页面的对话框有多种方式,这里只介绍两种:1. 选择菜单 File > New> Html(Advanced Template);2. 选中Package Explorer 视图的WebRoot 目录,点击右键选择上下文菜单中的New > Html(Advanced Template)。这时候将会弹出创建HTML页面的对话框,如下图所示:
图 8.4 新建HTML 页面向导
在这个对话框中的 File Name(文件名)框中输入login.html,Template to use:(要使用的模版)右侧的下拉框选中Default HTML template(默认HTML 模版,另一个是带表单的模版)。最后点击Finish 按钮完成向导。稍后MyEclipse 会用HTML 编辑器来打开刚创建的文件,如图8.5 所示。在这里可以在页面设计器中可视化的修改网页内容,也可以点击格式工具栏上的按钮来可视化的修改网页的格式,还可以在源代码面板中直接修改HTML 源码。Properties 视图则显示了当前选中元素的属性,可以快速的对一些关键的属性进行修改。拖动设计器和源码标签之间的隔条可以对两个区域之间的大小进行调节,点击向上按钮可以最大化显示代码区,点击向下按钮则可以最大化显示设计区。点击Preview
标签可以同时在IE 和Mozilla 浏览器中查看页面的显示效果。
点击 Palette(工具箱,确切说应该是叫组件面板)可以选择对应的一些常用的代码片段插入到当前页面中,例如超链接,图片,表单和表单元素等等。HTML-Basic 里面列出常用的基本网页元素,而HTML-Form 下则列出了表单元素。
现在我们把它的内容修改成一个包含登录表单和客户端表单有效性验证的页面,然后点击工具栏上的保存按钮。代码内容请参考清单8.1。
图 8.5 HTML 编辑器
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>登录</title>
<meta http-equiv="content-type" content="text/html; charset=GBK">
</head>
<script type="text/javascript">
// 验证输入不为空的脚本代码
function checkForm(form) {
if(form.username.value == "") {
alert("用户名不能为空!");
form.username.focus();
return false;
}
if(form.password.value == "") {
alert("密码不能为空!");
form.password.focus();
return false;
}
return true;
}
</script>
<body>
请登录 <br>
<form action="login.aspx" method="post" onsubmit="return
checkForm(this);">
用户名:<input type="text" name="username"><br>
密码:<input type="password" name="password"><br>
<input type="submit" value="登录" name="submit1">
<input type="reset" value="重置" name="reset1">
</form>
</body>
</html>
复制代码
清单 8.2 登录页面
至此,创建静态页面的过程就简要介绍完毕了。在此先虚晃一枪,为什么表单的提交页面是login.aspx 呢?难道Java 也支持ASP.NET 嘛?答案请在创建Servlet中找。
创建JSP 页面
本节内容将会讲解创建JSP页面。实际上JSP编辑器许多地方都是和上文介绍的HTML编辑器非常相似的。因此本节内容将会简要介绍其过程。启动创建 HTML 页面的对话框有多种方式,这里只介绍两种:1. 选择菜单 File > New> JSP(Advanced Template);2. 选中Package Explorer 视图的WebRoot 目录,点击右键选择上下文菜单中的New > JSP(Advanced Template)。这时候将会弹出创建JSP 页面的对话框,和图8.4 非常相似。只需要在这个对话框中的File
Name(文件名)框中输入result.jsp,然后点击Finish 按钮即可创建这个JSP 页面。
注意:Template to use 右侧的模版下拉框中有很多JSP 模版可以使用,例如支持JSF,Struts 等等的模版,这样可以加快开发的速度。
稍后 MyEclipse 会用HTML 编辑器来打开刚创建的文件,界面已经操作方法和图8.5非常类似,不同的是Palette 里面多了很多JSP 特有的内容,而编辑器的代码视图呢,也支持自动查错(但是不支持自动修正错误)和代码编写提示功能,如下图所示:
图 8.6 JSP 编辑器的查错和编码提示
当你在变量后按下.之后,会弹出代码完成提示,另外还支持断点的设置等等。因此使用MyEclipse 的JSP 编辑器可以大大减少开发人员出错的机会(在出现能查错的JSP 编辑器之前这是个大问题)。
现在我们将把这个页面的代码改写成如下清单所示内容:
<%@ page language=”java” pageEncoding=”GBK”%>
<html>
<head>
<title>登录结果</title>
<meta http-equiv=”pragma” content=”no-cache”>
<meta http-equiv=”cache-control” content=”no-cache”>
<meta http-equiv=”expires” content=”0”>
</head>
<body>
您登录${message}了!
</body>
</html>
复制代码
清单 8.3 登录结果页面 result.jsp
在这个页面我们将使用JSP 2.0 里面的EL 表达式来显示登录结果信息,${message}就是一段EL 表达式,它将从request 或者session 里面查找名为message 的属性,其实就是调用getAttribute(“message”)然后把里面的内容显示出来。这个页面不包含其它复杂的代码,是因为JSP 页面一般来说是用作视图层的,专门用来显示数据用的,只能包含或者尽量少包含一些复杂的业务逻辑。
注意:EL 表达式不能在J2EE 1.4 的Web 项目中使用。如果您打算在J2EE 1.4 的Web 项目中编写这个页面,对应的代码是把
您登录${message}了!
复制代码
修改为:
<%
String message = (String)request.getAttribute("message");
if(message == null) message = "";
%>
您登录<%=message%>了!
复制代码
即可。
然而有读者发现 Tomcat 5.5 中启用了Java EE 5 也无法使用EL 表达式,那么这种情况下的一种简单解决办法是用Tomcat 6.0。不过,Tomcat 5.5 下也有解决办法,第一种是设置整个项目使用el 表达式,需要在web.xml 中加上(控制一个项目):
<jsp-config>
<jsp-property-group>
<el-ignored>false</el-ignored>
</jsp-property-group>
</jsp-config>
复制代码
第二种办法是设置某个jsp 页面使用el 表达式,需要在jsp 页面开头加上(控制单个页面):
<%@ page isELIgnored="false"%>
复制代码
在 page 指令中的isELIgnored 属性用来指定是否忽略EL 表达式。格式为:
<%@ page isELIgnored="true|false"%>
复制代码
如果设定为真,那么JSP 中的表达式被当成字符串处理。比如下面这个表达式${2000 % 20},在isELIgnored="true"时输出为${2000 % 20},而isELIgnored="false"时输出为100。Web 容器默认isELIgnored="false",但是为什么个别Tomcat 5.5 不支持呢?这我就不得而知了。
至于有没有全局的设置办法?我想应该也是有的,但是我还没找到。
创建Servlet
启动创建Servlet 的对话框有多种方式,这里只介绍两种:1. 选择菜单 File > New >Servlet;2. 选中Package Explorer 视图的项目,点击右键选择上下文菜单中的New >Servlet。这时候将会弹新建Servlet 类的对话框,如图8.7 所示。在这个对话框中的Package(包)框中输入servlets,Name(类名)输入LoginServlet,然后点击Next 按钮可以进一步设置映射文件。也可以点击Finish 按钮直接完成这个创建向导,不过此处将选择Next按钮来进入到下一步的设置页面。
图 8.7 新建Servlet 类对话框
在这一页中可以设置 Servlet 的父类(Superclass),以及修饰符(Modifiers),添加接口(Interfaces),选择模版(Template to use)以及一些选项(Options)。Options 中可以选择是否创建继承的方法(Inherited Methods),创建构造器(Constructors),初始化和销毁方法(init and destory)以及doGet,doPost,doPut,doDelete,getServletInfo等方法。详细意义请参考Servlet 开发的书籍。
当点击 Next 按钮后,将会进入修改,设置web.xml 的向导页面,如图8.8 所示。注意图中的红框,我们在这里在Servlet/JSP Mapping URL 右侧输入框中输入/login.aspx。这个路径可以帮你理解一个概念,那就是其实Servlet 的后缀可以是任何形式的字符串,例如.do,.php 等等。最后点击Finish 按钮来完成创建Servlet 的过程。
注意:Servlet 的映射路径一定要以/开始,或者以*.do 的方式出现,而且不能输入/*.do。
图 8.8 修改,设置web.xml 中的映射信息
对话框关闭后,稍等片刻 web.xml 和新创建的LoginServlet.java,可以看到web.xml的内容已经被自动加入了新的Servlet 定义,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
<description>This is the description of my J2EE
component</description>
<display-name>This is the display name of my J2EE
component</display-name>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>servlets.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/login.aspx</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
复制代码
清单 8.4 加入了Servlet 定义的web.xml
至此Servlet就创建出来了,你可以接着修改Servlet的源码来加入更多功能。这个Servlet的最终访问路径是:http://localhost:8080/JSPHelloWorld/login.aspx,是不是看起来非常像.NET应用呢?不过这是个假的而已。
创建Filter(过滤器)
实际开发中都需要开发一些很有用的过滤器,来解决中文表单提交问题啊,给请求和响应加入GZIP 压缩功能啊,用户权限控制啊,等等,然而遗憾的MyEclipse 不支持直接创建过滤器。在这里只好手工创建一个解决Tomcat 表单提交中文问题的过滤器。选择菜单 File > New > Class,来创建一个名为TomcatFormFilter 的类,包名为filters。然后把类的代码修改为如下所示:
package filters;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
public class TomcatFormFilter implements Filter {
/**
* Request.java
* 对 HttpServletRequestWrapper 进行扩充, 不影响原来的功能并能提供所
有的HttpServletRequest
* 接口中的功能. 它可以统一的对 Tomcat 默认设置下的中文问题进行解决而只
需要用新的Request 对象替换页面中的
* request 对象即可.
*/
class Request extends HttpServletRequestWrapper
{
public Request(HttpServletRequest request) {
super(request);
}
/**
* 转换由表单读取的数据的内码.
* 从 ISO 字符转到 GBK.
*/
public String toChi(String input) {
try {
byte[] bytes = input.getBytes("ISO8859-1");
return new String(bytes, "GBK");
}
catch (Exception ex) {
}
return null;
}
/**
* Return the HttpServletRequest holded by this object.
*/
private HttpServletRequest getHttpServletRequest()
{
return (HttpServletRequest)super.getRequest();
}
/**
* 读取参数 -- 修正了中文问题.
*/
public String getParameter(String name)
{
return
toChi(getHttpServletRequest().getParameter(name));
}
/**
* 读取参数列表- 修正了中文问题.
*/
public String[] getParameterValues(String name)
{
String values[] =
getHttpServletRequest().getParameterValues(name);
if (values != null) {
for (int i = 0; i < values.length; i++) {
values[i] = toChi(values[i]);
}
}
return values;
}
}
public void destroy() {
}
public void doFilter(ServletRequest request, ServletResponse
response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpreq = (HttpServletRequest)request;
if(httpreq.getMethod().equals("POST")) {
request.setCharacterEncoding("GBK");
} else {
request = new Request(httpreq);
}
chain.doFilter(request, response);
}
public void init(FilterConfig filterConfig) throws
ServletException {
}
}
复制代码
清单 8.5 过滤器代码
然后修改 web.xml 加入Servlet 定义,修改后的代码清单如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
<description>
This is the description of my J2EE component
</description>
<display-name>
This is the display name of my J2EE component
</display-name>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>servlets.LoginServlet</servlet-class>
</servlet>
<filter>
<filter-name>TomcatFormFilter</filter-name>
<filter-class>filters.TomcatFormFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>TomcatFormFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/login.aspx</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
复制代码
清单 8.6 加入了过滤器的web.xml 内容
创建数据库访问层(DAO)
做 Web 应用一般来说不访问数据库是不太可能的,因此本节就介绍给应用加入数据库访问功能。
首先第一步是创建数据库表
第二步是要加入JDBC驱动类库
这里打算使用MySQL数据库,对于Web项目来说加入类库文件非常容易,只要把mysql-connector-java-3.1.11-bin.jar这个文件复制到WebRoot/WEB-INF/lib下,MyEclipse会自动把文件加入到项目的类路径中。
第三步需要创建一个实体类,来代表数据库中的Student 对象,这个类用来保存和传递来自数据库库的数据信息。代码清单如下:
package entity;
/** 学生实体类*/
public class Student {
private int id;
private int age;
private String username;
private String password;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
复制代码
清单 8.7 Student 实体类
最后是创建一个数据库访问对象 ,其源码如下所示:
package dao;
import java.sql.SQLException;
import entity.Student;
/**
* 学生数据访问类
* @author BeanSoft@126.com
* @version 0.1 2007-12-21
*/
public class StudentDAO {
/**
* 根据用户名和密码找到用户对象。
* @param username 用户名
* @param password 密码
* @return 找到的用户对象,找不到返回null
*/
public Student findStudent(String username, String password) {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
java.sql.Connection conn = null;//数据库连接
java.sql.PreparedStatement pstmt = null;//数据库表达式
java.sql.ResultSet rs = null;//结果集
String sql = "select * from Student where username = ? and password
= ?";//SQL
try {
conn = java.sql.DriverManager.getConnection(
"jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncodi
ng=GBK", "root", null);
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, username);
pstmt.setString(2, password);
rs = pstmt.executeQuery();
if(rs !=null && rs.next()) {
// 读到数据,生成实体类
Student student = new Student();
student.setId(rs.getInt(1));
student.setUsername(rs.getString("username"));
student.setPassword(rs.getString("password"));
student.setAge(rs.getInt("age"));
return student;
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
// 6. 释放资源,建议放在finally语句中确保都被关闭掉了
try {
rs.close();
} catch (SQLException e) {}
try {
pstmt.close();
} catch (SQLException e) {}
try {
conn.close();
} catch (SQLException e) {}
}
return null;
}
}
复制代码
清单 8.8 StudentDAO 数据访问类
至此数据访问层的开发已经完成,为什么要多写这么多代码呢?这是因为分层的设计能够便于多人合作开发,也便于单独测试每一层的功能。当然,项目规模小的话把所有的代码都放到那个Servlet 里面就行了。
修改Servlet 调用后台类
现在我们可以修改 Servlet 来加入调用DAO 层代码然后判断登录的功能了,设置完登录状态后,会转向到/result.jsp。修改后的Servlet 代码如下所示:
package servlets;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import dao.StudentDAO;
import entity.Student;
public class LoginServlet extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse
response)
throws ServletException, IOException {
Student student = new StudentDAO().findStudent(
request.getParameter("username"),request.getParameter("password"));
if(student != null &&
student.getUsername().equals(request.getParameter("username")) &&
student.getPassword().equals(request.getParameter("password"))) {
request.setAttribute("message", "成功");
//保存登录用户到session中
request.getSession().setAttribute("student", student);
} else {
request.setAttribute("message", "失败");
}
//转向登录结果页面
request.getRequestDispatcher("/result.jsp").forward(request,
response);
}
}
复制代码
清单 8.9 Servlet 加入登录判断功能
至此,这个简单的登录小项目就开发完毕了。
发布,重新发布,运行和测试应用
最快的运行方式就是在Package Explorer视图中选中项目节点StrutsLoginDemo,然后选择菜单Run > Run As > 3 MyEclipse Server Application,之后MyEclipse可能会显示一个可用的服务器列表,选中其中的服务器之一例如MyEclipse Tomcat并点击OK按钮后,就会自动发布或者重新发布应用然后启动服务器。也可以通过点击主界面工具栏上的 按钮发布完毕后,然后启动服务器来进行测试了。在Servers视图中选中服务器,之后点击视图工具栏上的
按钮以运行模式启动服务器。
服务器启动完毕后,点击工具栏上的 按钮来打开浏览器视图,然后键入地址:http://localhost:8080/JSPHelloWorld/login.html 来打开登录页面,如下图所示:
图 8.9 在MyEclipse 中打开浏览器测试应用
在表单的用户名处输入数据库里存在的学生的名字,例如张三,再输入密码,然后点击提交,就可以显示登录的结果了。
如果只是修改了 JSP 页面,那么MyEclipse 会自动把JSP 更新到服务器上,但是如果是改了类文件或者一些配置文件,那么需要手工重新发布这个项目。如何重新发布这个项目呢?我们可以在Servers 视图上选中所发布的项目,然后点击视图工具栏上的
来重新发布,或者在项目上点击右键选择菜单Redeploy,如图8.10 所示。之后稍等片刻就可以完成重新发布的过程。
调试JSP 应用
MyEclipse可以对Web应用里面的类或者JSP页面,Servlet进行调试。例如可以双击JSP编辑器的行首的隔条,来设置断点,然后以调试模式启动服务器。例如下面是访问index.jsp时的调试透视图界面,我们可以修改变量值b为4(被修改过的值以本人允荆缓蟮慊鱀ebug视图的
Resume按钮来继续往下执行,就可以看到最终的执行结果是5。如下图所示:
图 8.11 修改变量跟踪调试JSP 页面
这里用的 index.jsp 页面的源码清单如下所示:
<%
int a = 1;
int b = 2;
out.println(a + b);
%>
复制代码
清单 8.10 用来调试的JSP 页面源码
使用调试器可以很方便的快速定位出现问题的地方,加快修改代码的速度。
向现有Web 项目添加Web 开发功能
如果拿到了一个其它开发工具例如 WTP,Netbeans,JBuilder 等所制作的Web 项目,而不是通过MyEclipse 所创建的Web 项目,那么MyEclipse 将会拒绝对它进行发布,调试等操作。这种情况下可以从 MyEclipse 菜单栏选择MyEclipse > Project Capabilities >Add Web Project Capabilities ... 来启动MyEclipse Web Capabilities 向导,如下图示:
图 8.12 MyEclipse Web 项目向导
在这个对话框中选中 Web 项目的根目录,点击Web Root Directory 最右侧的Browse...按钮来选中,之后设置上下文访问路径(Web Context Root),并选择合适的Java EE 版本(J2EE Specification Level)后,点击Finish 按钮后就给当前项目加入了Web 开发功能了,之后就可以方便的对它进行发布等操作。
高级设置
本节内容仅供了解,大部分情况下都不需要对这些内容进行修改。
修改Web 项目的默认设置
选择菜单 Window > Preferences,打开Preferences 对话框,在选项树上选择MyEclipse > Java Enterprise Project > Web Project,来进一步设置Web 项目的默认设置,如下图所示:
图 8.13 修改Web 项目的默认设置
在 Template 标签页可以设置Web 项目的模版,包括默认的源代码目录名以及Web 应用根目录的名称。而在Build Path 标签页,则可以设置是否自动将WEB-INF/lib 下面的jar 或者zip 文件发布到服务器上。Deployment 标签则设置了当项目存在依赖的时候如何进行发布。Tag Libraries 标签则可以修改一些自定义的标签库的快速代码段。
除此之外,还可以对单个项目的Web功能进行设置。点击菜单Project > Properties可以打开项目的属性对话框,这时候可以点击MyEclipse > Web节点进行一些必要的设置,如图8.14 所示。如果修改了值Web Context-root,例如它的值修改为ABC,那么这个项目再次发布时,将会发布到Tomcat安装目录/webapps/ABC下面,对应应用的访问地址也会改为http://localhost:8080/ABC/。如果复制Web Project来进行开发,往往会出现多个项目发布到Tomcat的webapps下面同一个目录下的问题,这时就可以修改这个属性的值来解决问题。
给Web 项目加入高级功能
在实际开发中不可避免的要在 Web 项目中使用Hibernate,Struts,Spring 等技术,那么这些都可以通过点击菜单MyEclipse > Project Capabilities 然后选择需要使用的技术,就可以将对应的类库和配置文件加入到当前项目中。例如要开发Struts 和Hibernate 应用,分别点击两次子菜单Add Struts Capabilities 和Add Hibernate Capabilities 就可以了。如下图所示:
小结
在本文我们介绍了如何开发,发布,运行,测试,调试 Web 应用,这些概念适用于以后所介绍的其它基于Web 的项目例如Struts,JSF 等等。通过本章,你将对如何使用MyEclipse 如何开发Web 项目有一个大致的了解,并为使用后续复杂的Web 框架进行开发打好基础。
首先,讲一下Myeclipse与Eclipse的差别。虽然我本科学过java,但多少年了也没用过,除了读研的时候在java的项目组里实习过半年,这半年的时间里只弄懂了几个页面之间的关系和一点点java代码,使用的工具是Jbuilder。eclipse只在传说中听过,都说是很不错的开发工具,但可惜了,一直没接触过。
毕业了,真正到公司工作才开始接触这传说中的神器。起初是部门的同事把eclipse的文件直接发给我,我一看只有一个文件夹,是免安装的,心想着这eclipse果然很开源,各种文件直接暴露在外。搭环境废了一番功夫,主要是JDK安装,还有一些项目参数的设置,以后有时间把这部分内容整理一下,发布供大家共享,也为了自己记忆、存档方便。
今天突然同事让我做一部分新的工作,发来了一个java的web项目,以及myeclipse的安装文件。我一下就蒙了,开始不停的查找资料来处理安装过程中出现的问题。书到用时方恨少,面对大量的资料只能一点一点的尝试,一次又一次的小成功推动着我继续下去,直到最后打开页面。也许我的问题在很多高手看来不值一提,但的确是解决初学者、门外汉实际问题的灵药。
Myclipse与eclipse的差别
(1)MyEclipse 把所有的插件都配好了,直接可以用,比如写jsp,struts,spring之类的,当然包也相当大, 机子不好的话开发程序比较慢;Eclipse 什么都没有,要开发什么就自己配什么插件而已。????
(2)严格的说,MyEclipse 只是 Eclipse 体系中的一种插件,只是由于 MyEclipse 经常和 Eclipse 一起安装使用,所以通常也将安装了MyEclipse 插件后的Eclipse叫做MyEclipse,二者可以单独安装,即先装Eclipse之后,再以插件方式安装MyEclipse。另一种方法则是同时安装二者,即安装MyEclipse时已经同时安装了Eclipse(他们已经整合在一起)。
(3)装了MyEclispe就不用装Eclipse了,因为MyEclispe包括了Eclipse的功能的了。
(4)MyEclispe做WEB应用比Eclipse更专业
(5)MyEclispe是收费的,需要注册码,网上有很多破解方法;Eclipse是免费的。
MyEclipse安装及配置 http://developer.51cto.com/art/200906/130498.htm
一、安装JDK
1.一路默认安装。
2.配置环境如果安装目录是C:\JAVA\JDK,设定系统变量(我的电脑(右键) ->属性->高级->环境变量):
① (新建)JAVA_HOME: C:\JAVA\JDK
② (新建)CLASSPATH: .;C:\JAVA\JDK\lib\dt.jar;C:\JAVA\JDK\lib\tools.jar(注意:点号不能省略,表示当前目录) ③ 编辑PATH的变量值,在后面加上;%JAVA_HOME%\bin(注意:要有分号隔开) 3. JDK安装完毕,用命令简单测试一下:java –version
二、安装TOMCAT,一路默认。(MyEclipse 6.0 All In One默认自带了一个Tomcat 6, 不过安装独立版本对学习更有帮助。)
三、安装Myeclipse,一路默认。
四、配置Myeclipse
1.在MyEclipse中配置JDK
① 点击Window->Preferences->Java->installed JREs,点击Add按钮,设置JRE Name为JDK,设置JRE home directory为JDK的安装目录C:\J2EE\JDK,确认即可。(这里要特别注意,默认的是 JRE 的运行环境,这里要设定成 JDK 的,否则, MyEclipse 无法正常也无法正常运行 Tomcat 服务器。)
2. 在Eclipse中配置TOMCAT(安装目录为C:\J2EE\Tomcat)
① 点击Window->Preferences->MyEclipse->Servers->Tomcat下面有几个Tomcat版本,如果安装的是Tomcat 5.x,设置Tomcat server为Enable,路径分别为C:\J2EE\Tomcat,其他的都是自动带出的。
② 点击Window->Preferences->MyEclipse->Servers->Tomcat->Tomcat 5.x->JDK,在Tomcat JDK name下拉框中选择刚刚配置的JDK。(JDK同级的Launch 中确保选中了 Debug 模式。 而 Paths 中就是一些类路径设置,第一个是提前加载的类路径,有些包一启动服务器初始化 Web Application
时就要用到第二个是运行时才用到的;第三个是没有打包的类,这里我们就不管了。)
MyEclipse安装配置完毕。MyEclipse 自带了Eclipse,所以MyEclipse安装之后,无需再安装Eclipse了。
Web项目部署及运行
一、导入项目。
File→Import→选择“Existing Project into Workspace”→选中项目文件目录,完成。
二、选择服务器,部署项目。
我们在package explorer选中项目的根目录,右键菜单 MyEclipse->Add and Remove Projects Deployments… ,点击 Add 按钮,在弹出对话框的 Server 中选择 Tomcat 5.x ,下面的两个单选项,Exploaded Archive和Packaged Archive分别是目录方式部属和包方式部属,这个都是由
MyEclipse 来做的,我们使用目录部署方式,不用打成 war 包,其他的不管了,按确定钮回到上一个页面。
服务器指定了,下面来部署应用程序。选中对话框服务器列表中的 Tomcat 5.x 项,此时,灰显的按钮变为可用,其中 Remove 是移除部署和redeploy重新部署,我们点击 Redeploy 按钮,以后我们修改了工程也可以点此按钮重新部署。这里我们可以点击一下了。
OK ,程序已经部署完成了,下面要运行调试了。
三、运行调试程序
在 Eclipse 的图形菜单栏找到Run/Stop/Restart Eclipse servers按钮,单击启动
Tomcat。
等 Console 窗口中提示 Tomcat 启动成功,我们就可以运行我们的程序了。打开一个 IE 浏览器窗口,输入 http://localhost:8080/项目名/ 页面。
这里需要补充一点信息,(多页面web系统的主页面URL输入格式必须输入正确,否则查来查去也找不到错误):
使用MyEclipse发布Web项目时URL访问路径问题。
1.如果项目名称是英文(假设是MyProject),且没有修改过发布的相关属性,那么web项目发布后,在浏览器输入 http://localhost:8080/MyProject /pageyouwant 【注意】
a.红色部分是你要访问的页面的名称,需要注意页面相对于WebRoot(在project→MyEclipse→Web中设置)的根路径。 b.localhost也可以改为你MyEclipse所在的机器的IP
2.如果项目名称包含中文或是项目名称过程,那么可以通过配置MyEclipse的选项来改变发布名称。 具体步骤如下:
选择项目右键->点击属性->MyEclipse->Web
更改右边的Context Root选项卡页面的Web Context-root 项。 例如,如改为"/MyWebPrj" 点击Ok确定,重新发布Web项目即可。
此时Web项目的访问路径就变为: http://localhost:8080/MyWebPrj /pageyouwant
大功告成。
在MyEclipse中如何去掉JS或jsp语法错误提示!
关于在 MyEclipse 上 WEB 工程里面的 JS/JSP 经常会有语法错误提示,这是由于 MyEclipse 对其语法要求相当严格所造成的,而这些文件本身是可以运行并没有什么错误的,在你实际应用部署中并无影响。
相关文章推荐
- MyEclipse 5.5 + Tomcat 开发视频,下载,安装,配置,开发并运行Web项目
- LINUX部署WEB项目(JDK安装和配置)
- LINUX部署WEB项目(TOMCAT安装和配置)
- 阿里云部署Java web项目初体验(转)/linux 上配置jdk和安装tomcat
- LINUX部署WEB项目(TOMCAT安装和配置)
- 问题记录:myeclipse配置好struts2后,web项目运行出现404
- LINUX部署WEB项目(JDK安装和配置)
- LINUX部署WEB项目(JDK安装和配置)
- Apache Awstats 安装配置系列 (2)之 apache部署WEB项目(配置多个地址)
- LINUX部署WEB项目(TOMCAT安装和配置)
- LINUX部署WEB项目(TOMCAT安装和配置)
- LINUX部署WEB项目(JDK安装和配置)
- LINUX部署WEB项目(TOMCAT安装和配置)
- LINUX部署WEB项目(TOMCAT安装和配置)
- MAVEN安装、并在Myeclipse下,装配本地仓库以及建web项目并在tomcat下运行完整过程笔记
- LINUX部署WEB项目(JDK安装和配置)
- LINUX部署WEB项目(JDK安装和配置)
- LINUX部署WEB项目(JDK安装和配置)
- ubuntu16.04安装及配置tomcat,IDEA集成tomcat及部署web项目,IDEA通过阿里云镜像加速maven项目创建
- 我在使用eclipse配置Tomcat服务器的时候发现,默认情况下Tocmat把我们部署的项目放在了workspaces下面,而不是像Myeclipse默认的那样放在tomcat的安装路径下。