- 浏览: 267185 次
- 性别:
- 来自: 青岛
-
文章分类
最新评论
-
Gaitlynn:
您好,我想问一下,怎么建立数据库表?新手上路,诸多不明,谢谢… ...
使用MyEclipse开发Web项目并进行发布,运行,测试和调试 -
满手都是炸:
这么改的原因什么啥呢 请楼主讲讲 谢谢
SSIB配置中遇到No result defined for action action.deptAction and result success -
sg552:
newsmth....yjrg.....
设置IP地址 -
liwenjie:
当然推荐采用解耦的方式,一般情况下不要采用第二种方式,现在连上 ...
Struts2操作Request、Session和Application对象 -
zhxing:
huangfoxAgain 写道ActionContext 和 ...
Struts2操作Request、Session和Application对象
使用MyEclipse开发Web项目并进行发布,运行,测试和调试
- 博客分类:
- jquery
本文将介绍如何使用 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 对话框
关于输入框的详细意义请参考下表:
选项 | 描述 |
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 目录下。 |
表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 框架进行开发打好基础。
相关推荐
内容概要:本文详细介绍了基于SpringBoot和Vue开发的养老院管理系统的具体实现细节。该系统采用前后端不分离的架构,旨在快速迭代并满足中小项目的开发需求。文中涵盖了多个关键技术点,如数据库设计(组合唯一约束、触发器)、定时任务(@Scheduled、@Async)、前端数据绑定(Vue的条件渲染和动态class绑定)、权限控制(RBAC模型、自定义注解)以及报表导出(SXSSFWorkbook流式导出)。此外,还讨论了开发过程中遇到的一些常见问题及其解决方案,如CSRF防护、静态资源配置、表单提交冲突等。 适合人群:具备一定Java和前端开发经验的研发人员,尤其是对SpringBoot和Vue有一定了解的开发者。 使用场景及目标:适用于需要快速开发中小型管理系统的团队,帮助他们理解如何利用SpringBoot和Vue进行全栈开发,掌握前后端不分离架构的优势和注意事项。 其他说明:文章不仅提供了详细的代码示例和技术要点,还分享了许多实用的小技巧和避坑指南,有助于提高开发效率和系统稳定性。
家族企业如何应对人才流失问题?
员工关怀制度.doc
内容概要:本文详细探讨了对传统蚁群算法进行改进的方法,特别是在路径规划领域的应用。主要改进措施包括:采用排序搜索机制,即在每轮迭代后对所有路径按长度排序并只强化前20%的优质路径;调整信息素更新规则,如引入动态蒸发系数和分级强化策略;优化路径选择策略,增加排序权重因子;以及实现动态地图调整,使算法能够快速适应环境变化。实验结果显示,改进后的算法在收敛速度上有显著提升,在复杂地形中的表现更加稳健。 适合人群:从事路径规划研究的技术人员、算法工程师、科研工作者。 使用场景及目标:适用于需要高效路径规划的应用场景,如物流配送、机器人导航、自动驾驶等领域。目标是提高路径规划的效率和准确性,减少不必要的迂回路径,确保在动态环境中快速响应变化。 其他说明:改进后的蚁群算法不仅提高了收敛速度,还增强了对复杂环境的适应能力。建议在实际应用中结合可视化工具进行调参,以便更好地观察和优化蚂蚁的探索轨迹。此外,还需注意避免过度依赖排序机制而导致的过拟合问题。
内容概要:本文详细介绍了利用粒子群优化(PSO)算法解决配电网中分布式光伏系统的选址与定容问题的方法。首先阐述了问题背景,即在复杂的配电网环境中选择合适的光伏安装位置和确定合理的装机容量,以降低网损、减小电压偏差并提高光伏消纳效率。接着展示了具体的PSO算法实现流程,包括粒子初始化、适应度函数构建、粒子位置更新规则以及越界处理机制等关键技术细节。文中还讨论了目标函数的设计思路,将多个相互制约的目标如网损、电压偏差和光伏消纳通过加权方式整合为单一评价标准。此外,作者分享了一些实践经验,例如采用前推回代法进行快速潮流计算,针对特定应用场景调整权重系数,以及引入随机波动模型模拟光伏出力特性。最终实验结果显示,经过优化后的方案能够显著提升系统的整体性能。 适用人群:从事电力系统规划与设计的专业人士,尤其是那些需要处理分布式能源集成问题的研究人员和技术人员。 使用场景及目标:适用于希望深入了解如何运用智能优化算法解决实际工程难题的人士;旨在帮助读者掌握PSO算法的具体应用方法,从而更好地应对配电网中分布式光伏系统的选址定容挑战。 其他说明:文中提供了完整的Matlab源代码片段,便于读者理解和复现研究结果;同时也提到了一些潜在改进方向,鼓励进一步探索和创新。
内容概要:本文详细介绍了丰田Prius2004永磁同步电机的设计流程,涵盖从初始参数计算到最终温升仿真的各个环节。首先利用Excel进行基本参数计算,如铁芯叠厚、定子外径等,确保设计符合预期性能。接着使用Maxwell进行参数化仿真,通过Python脚本自动化调整磁钢尺寸和其他关键参数,优化电机性能并减少齿槽转矩。随后借助橡树岭实验室提供的实测数据验证仿真结果,确保模型准确性。最后采用MotorCAD进行温升仿真,优化冷却系统设计,确保电机运行安全可靠。文中还分享了许多实用技巧,如如何正确设置材料参数、避免常见的仿真错误等。 适合人群:从事电机设计的专业工程师和技术人员,尤其是对永磁同步电机设计感兴趣的读者。 使用场景及目标:适用于希望深入了解永磁同步电机设计全过程的技术人员,帮助他们在实际工作中提高设计效率和精度,解决常见问题,优化设计方案。 其他说明:文章提供了丰富的实战经验和具体的操作步骤,强调了理论与实践相结合的重要性。同时提醒读者注意一些容易忽视的细节,如材料参数的选择和仿真模型的准确性。
内容概要:本文详细介绍了基于DSP28335的单相逆变器的设计与实现,涵盖了多个关键技术模块。首先,ADC采样模块用于获取输入电压和电流的数据,确保后续控制的准确性。接着,PWM控制模块负责生成精确的脉宽调制信号,控制逆变器的工作状态。液晶显示模块则用于实时展示电压、电流等重要参数。单相锁相环电路实现了电网电压的频率和相位同步,确保逆变器输出的稳定性。最后,电路保护程序提供了过流保护等功能,保障系统的安全性。每个模块都有详细的代码示例和技术要点解析。 适合人群:具备一定嵌入式系统和电力电子基础知识的研发人员,尤其是对DSP28335感兴趣的工程师。 使用场景及目标:适用于单相逆变器项目的开发,帮助开发者理解和掌握各个模块的具体实现方法,提高系统的可靠性和性能。 其他说明:文中不仅提供了具体的代码实现,还分享了许多调试经验和常见问题的解决方案,有助于读者更好地理解和应用相关技术。
SecureCRT安装包
内容概要:本文详细介绍了如何利用C#、WPF和MVVM模式构建一个大屏看板3D可视化系统。主要内容涵盖WPF编程设计、自定义工业控件、数据库设计、MVVM架构应用以及典型的三层架构设计。文中不仅提供了具体的代码实例,还讨论了数据库连接配置、3D模型绑定、依赖属性注册等关键技术细节。此外,文章强调了项目开发过程中需要注意的问题,如3D坐标系换算、MVVM中命令传递、数据库连接字符串加密等。 适合人群:具备一定C#编程基础,对WPF和MVVM模式有一定了解的研发人员。 使用场景及目标:适用于希望深入了解WPF和MVVM模式在实际项目中应用的开发者,特别是那些从事工业控制系统、数据可视化平台开发的专业人士。通过学习本文,读者可以掌握如何构建高效、稳定的大屏看板3D可视化系统。 其他说明:本文提供的设计方案和技术实现方式,可以帮助开发者更好地理解和应用WPF和MVVM模式,同时也能为相关领域的项目开发提供有价值的参考。
基于ssm的系统设计,包含sql文件(Spring+SpringMVC+MyBatis)
内容概要:本文详细介绍了利用COMSOL进行非厄米超表面双参数传感器的设计与实现。首先,通过构建超表面单元并引入虚部折射率,实现了PT对称系统的增益-损耗交替分布。接着,通过频域扫描和参数化扫描,捕捉到了复频率空间中的能级劈裂现象,并找到了奇异点(Exceptional Point),从而显著提高了传感器对微小扰动的敏感度。此外,文章探讨了双参数检测的独特优势,如解耦温度和折射率变化的能力,并展示了其在病毒检测、工业流程监控等领域的潜在应用。 适合人群:从事光学传感器研究的专业人士,尤其是对非厄米系统和COMSOL仿真感兴趣的科研人员。 使用场景及目标:适用于需要高精度、多参数检测的应用场合,如生物医学检测、环境监测等。目标是提高传感器的灵敏度和分辨率,解决传统传感器中存在的参数交叉敏感问题。 其他说明:文中提供了详细的建模步骤和代码片段,帮助读者理解和重现实验结果。同时,强调了在建模过程中需要注意的关键技术和常见问题,如网格划分、参数设置等。
怎样健全员工福利体系.docx
离职证明范本.doc
6538b79724855900a9c930904a302920.part6
员工离职单.doc
内容概要:本文详细介绍了在COMSOL中进行超材料异常折射仿真的关键技术。首先解释了异常折射现象及其产生的原因,接着通过具体代码展示了如何利用相位梯度和结构色散精确计算折射角。文中还讨论了边界条件的设置、网格划分的优化以及参数化扫描的应用。此外,提供了多个实用脚本和技巧,帮助提高仿真的精度和效率。最后强调了验证结果的重要性和一些常见的注意事项。 适合人群:从事电磁仿真研究的专业人士,尤其是对超材料和异常折射感兴趣的科研人员和技术开发者。 使用场景及目标:适用于需要深入理解和解决超材料中异常折射问题的研究项目。主要目标是掌握COMSOL中异常折射仿真的完整流程,确保仿真结果的准确性并优化计算性能。 其他说明:文章不仅提供了详细的代码示例和技术细节,还分享了许多实践经验,有助于读者更好地应对实际仿真过程中可能出现的问题。
招聘工作数据分析表.xls
platform-tools-latest-windows.zip
个人资料临时存储QT资源
内容概要:本文详细介绍了微电网中三相交流下垂控制的工作原理和技术细节。首先,通过Matlab/Simulink搭建模型,展示了传统阻感型线路下垂特性的实现方法,特别是有功-频率和无功-电压下垂曲线的解析。文中强调了关键参数Kp和Kq的选择及其对系统稳定性的影响,并通过具体的仿真案例展示了不同参数设置下的动态响应。此外,文章讨论了波形分析中的注意事项,如谐波成分、滤波器设计以及虚拟阻抗的应用。最后,通过Python和C语言实现了下垂控制器的代码示例,进一步解释了实际工程中的实现细节。 适合人群:从事微电网研究和开发的技术人员,尤其是对下垂控制感兴趣的电气工程师和研究人员。 使用场景及目标:适用于希望深入了解微电网下垂控制原理及其实际应用的研究人员和技术人员。目标是帮助读者掌握下垂控制的核心概念和技术实现,提高在实际工程项目中的调试和优化能力。 其他说明:文章不仅提供了理论分析,还包括了大量的仿真代码和波形图,使读者能够更好地理解和验证所学内容。同时,文中提到的实际调试经验和常见错误也为初学者提供了宝贵的指导。