如何使用MyEclipse开发一个JavaWeb网站

本文所述的内容仅用于参考或学习,主要针对毕业设计等网站设计,请勿实际用于生产开发用途,否则后果自负:


MyEclipse的安装

这里我使用的是MyEclipse10.7.1,下载地址 [ 度盘 ],密码:6aw3。破解方法:博客,补丁下载地址:脚本之家

新建项目

打开MyEclipse后如图所示:

MyEclipse
这里的Java_SSH_Easyer是我已经建好的项目。我们点击菜单栏的File->New->Web Project
新建

新建

内容含义注释
Project Name项目名你项目叫什么,推荐用英文
Location存放位置项目放在哪,默认放在工作空间里
Source folderSrc目录java源代码放的位置,默认就src
web root folder网站jsp目录前端资源等文件存放位置(网站根目录)
J2EE Specification LevelJavaEE版本选最新的就好了

填写完毕后点击 Finish 就可以了

编码

推荐使用UTF-8编码进行编写网站。修改方法:Window->Preferences->General->Workspace
Window->Preferences
General->Workspace
Text file Encoding栏选择Other,下拉选择UTF-8即可。

导入Struts2、Hibernate并配置MySQL

struts2
这里写图片描述
选择2.1并选择/*
定义 B
MySQL
安装MySQL:MySQL下载

安装过程请按照这里的教程进行安装,注意编码一定要填写UTF-8

Hibernate
Hibernate必须在MySQL安装之后进行(如果要求用sqlserver就安装sqlserver后进行)
点击Window->Open Perspective->MyEclipse Hibernate
MyEclipse Hibernate
MyEclipse Hibernate
右键点击DB Browser,选new
New DB
New Driver
这里按照如图所示的内容进行填写:
New Driver
这里的mysql-connector-java-3.1.6-bin.jar在这里下载
这里的数据库名就在你的数据库管理软件里进行创建吧。个人用的phpMyAdmin,我想大多数人用的应该是Navicat For MySQL。
这里配置好之后点击Test Driver按钮,如果出现如图所示的窗口,那么配置正确点击Finish就可以了。如果发生错误检查一下数据库的用户名密码是否正确,数据库是否开启等问题。
这里写图片描述
点击右上角的MyEclipse图标形状的按钮回到原来的页面:
这里写图片描述
右键点击我们的项目,选择MyEclipse->Add Hibernate Capabilities…项
这里写图片描述
点击Next,继续Next到这个页面:
这里写图片描述
下拉DB Driver选择我们刚刚创建的MySQL,再点击Next后把Create SessionFactory的对勾点掉点击Finish即可。

导入个人编写的Java_SSH_Easyer

个人编写的代码并不适用于生产环境,如需应用请斟酌使用。

Github:JAVA_SSH_Easyer

下载ZIP后将/src/struts.xml内容复制到项目中src/struts.xml中保存。这个代码中的大部分内容是范例内容。需要进行修改。
自己建立三个包,包名可以自己定,但最后要为action、hibernate、tools例如你叫李华可以叫com.lihua.action,com.lihua.hibernate,com.lihua.tools:
这里写图片描述
这里写图片描述
将我的项目中src\com\pingjia中的三个文件夹中的java文件按包名拖到对应的包中:
这里写图片描述
逐个打开文件,将里面的所有com.pingjia改成你的包名如com.lihua。
这里写图片描述
将zip中的webroot文件夹下的Public与User文件夹拷贝到项目的WebRoot文件夹下:
这里写图片描述
将login.jsp上的包名改成你的包名。至此基本配置结束。

登录Demo

现在用刚刚搭建好的框架写一个登录功能吧!
首先要确定登录功能需要哪些内容:

  1. 登录页*1
  2. 登录后的主页*1
  3. 登录功能*1

需要的数据:

  1. 用户数据

第一步 建立数据表并逆向生成数据库表为实体类到项目

用户数据需要用户名、密码、用户id三项内容,所以我们在数据库中创建一个User表:
这里写图片描述
随便插一个用户,比如用户名是admin,密码是admin。
我们在mysql中建立了一个新表,所以要用Hibernate的逆向工程生成一个对应的实体类。我的范例中原有一个User实体类,将它删掉:com.lihua.hibernate.User
原本范例中也有一个UserAction用作范例作用也可以删掉重新建立:com.lihua.action.UserAction

新建逆向工程的方法:
这里写图片描述
到Hibernate界面双击MySQL,在Connected to Mysql>你数据库名>table下找到刚刚建立的user表:
这里写图片描述
右键点击它,然后点击Hibernate Reverse Engineering
这里写图片描述

打上JavaDataObject的对勾和Create POJO<>DB Table mapping information的对勾,去掉absolute对勾,java package选择你对应的Hibernate包后点下一步:
这里写图片描述
由于mysql支持auto increasement,id generator项选择identity后点击finish,提示will be overwritten选是就行了。
这里写图片描述
返回myeclipse界面后我们会看到com.lihua.hibernate包下出现了一个User.java类,说明逆向工程成功了。

第二步 创建Action并处理业务请求

这里使用Action用于处理业务内容,struts.xml用于处理Action具体方法与jsp、路由(对应浏览网址)的对应关系。

Created with Raphaël 2.1.2 用户 用户 服务器 服务器 struts.xml处理程序 struts.xml处理程序 Action Action 对应jsp页面 对应jsp页面 ①网址 ②解析后的网址 ③请求实例方法 ④实例方法返回值 ⑤Action传递的数据 ⑥最终页面 ⑦最终页面

用户访问网址后服务器根据struts进行解析,新建指定Action的实例并调用指定方法,并根据方法返回值显示指定页面。
我们在com.lihua.action中新建一个类,名字叫UserAction继承自BaseAction并重写check方法:

package com.lihua.action;
public class UserAction extends BaseAction{
    @Override
    public boolean check() {
        // TODO Auto-generated method stub
        return false;
    }
}

这个check方法就是Action的拦截器,默认返回true就可以了。如果有需要可以判断登录状态。这里要写登录功能,所以不能让check返回false。
我们新建的这个Action类相当于一类页面和功能的集合,这里UserAction处理用户相关的页面请求,一会要建立的HomeAction用于处理后台相关页面的请求。
这里我们有两个任务:1.登录页,2.登录功能
登录页暂时不需要向前端传送什么,所以直接返回SUCCESS;就可以了。登录功能需要判断登录所用用户名与密码是否正确,所以要调用数据库。首先建立两个方法:

public String login(){
    return SUCCESS;
}
public String checkLogin(){
    return SUCCESS;
}

所有页面请求的方法都需要返回String,后续需要在struts.xml中添加。
有关数据处理:
在checkLogin中我们需要获取前端传来的数据。我在BaseAction中对数据获取进行了封装,在方法中直接使用p方法即可:

String username = p("username");
String password = p("password");

查询数据库使用M方法的各种操作即可。详情请看Readme.md

DB_Where where = new DB_Where();
where.setWhere("username", username);
where.setWhere("password", password);
List<User> s = (List<User>) M("User").where(where).select();
if(s.isEmpty())
    return error("登录失败");

判断s是否为空即可判断用户名密码是否正确了。这里的error方法是BaseAction的封装,用于功能类方法的成功与失败提示与跳转,有三个重载,第一个参数是提示内容,必须要有。第二个参数是目标跳转的url,默认是上一个页面。第三个参数是等待时间,默认error5秒,success2秒。

登录成功后需要将数据写入到session中。这里BaseAction也进行了封装,使用session(“键名”,值);即可存储session,使用session(“键名”);即可读取session。
所以登录功能的完整代码:

package com.lihua.action;

import java.util.List;

import com.lihua.hibernate.User;
import com.lihua.tools.DB_Where;

public class UserAction extends BaseAction{
    private static final long serialVersionUID = -4987597667769252852L;
    @Override
    public boolean check() {
        // TODO Auto-generated method stub
        return true;
    }
    public String login(){
        return SUCCESS;
    }
    public String checkLogin(){
        String username = p("username");
        String password = p("password");
        DB_Where where = new DB_Where();
        where.setWhere("username", username);
        where.setWhere("password", password);
        List<User> s = (List<User>) M("User").where(where).select();
        if(s.isEmpty())
            return error("登录失败");
        session("User",s.get(0));
        return success("登录成功","Home/index");
    }
}

我们再建立一个HomeAction当做临时的后台Action:

package com.lihua.action;

public class HomeAction extends BaseAction{
    private static final long serialVersionUID = -4972832333971194628L;
    @Override
    public boolean check() {
        if(session("User")==null)
            return false;
        return true;
    }
    public String index(){
        return SUCCESS;
    }
}

第三步 编写struts.xml

打开src/struts.xml,内容如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
  <!--package和类名一致最好,namespace设置成/类名就可以了,主要用于u方法获取链接,方便管理,加强可读性-->
    <package name="User" namespace="/User" extends="struts-default">
    <!--下面两句创建package就要加上,因为success与error方法用了-->
    <global-results>
      <result name="input">/Public/success.jsp</result>
      <result name="error">/Public/error.jsp</result>  
    </global-results>
    <!--下面action名称就随便命了,不过推荐以类方法命名。后面class和method就是要调用的Action的方法了。-->
        <action name="login" class="com.pingjia.action.UserAction" method="login">
      <!--result就写一个就行了。有特殊需求就多写。如果action方法返回只有error()或success()那就不用写result。-->
            <result name="success">/User/login.jsp</result>
        </action>
        <action name="reg" class="com.pingjia.action.UserAction" method="reg">
            <result name="success">/User/reg.jsp</result>
        </action>
        <action name="checkLogin" class="com.pingjia.action.UserAction" method="checkLogin">
            <result name="success" type="redirectAction">login</result>
        </action>
        <action name="checkReg" class="com.pingjia.action.UserAction" method="checkReg">
            <result name="success" type="redirectAction">login</result>
        </action>
        <action name="logout" class="com.pingjia.action.UserAction" method="logout">
            <result name="success" type="redirectAction">login</result>
        </action>
    </package>
</struts>

根据我们页面的设计我们共有三个页面:Home/index、User/login、User/checkLogin,两个Action。所以要建立两个package(globa-results是Action中success与error方法要用到的,每个package都要添加):

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
    <package name="User" namespace="/User" extends="struts-default">
        <global-results>
          <result name="input">/Public/success.jsp</result>
          <result name="error">/Public/error.jsp</result>  
        </global-results>
    </package>
    <package name="Home" namespace="/Home" extends="struts-default">
        <global-results>
          <result name="input">/Public/success.jsp</result>
          <result name="error">/Public/error.jsp</result>  
        </global-results>
    </package>
</struts>

逐个添加方法:
login(需要显示前端,所以要写好success):

<action name="login" class="com.lihua.action.UserAction" method="login">
    <result name="success">/User/login.jsp</result>
</action>

checkLogin:

<action name="checkLogin" class="com.lihua.action.UserAction" method="checkLogin"></action>

index:

<action name="index" class="com.lihua.action.HomeAction" method="index">
    <result name="success">/Home/index.jsp</result>
</action>

最终生成的struts.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
    <package name="User" namespace="/User" extends="struts-default">
        <global-results>
          <result name="input">/Public/success.jsp</result>
          <result name="error">/Public/error.jsp</result>  
        </global-results>
        <!--下面action名称就随便命了,不过推荐以类方法命名。后面class和method就是要调用的Action的方法了。-->
        <action name="login" class="com.lihua.action.UserAction" method="login">
            <result name="success">/User/login.jsp</result>
        </action>
        <action name="checkLogin" class="com.lihua.action.UserAction" method="checkLogin"></action>
    </package>
    <package name="Home" namespace="/Home" extends="struts-default">
        <global-results>
          <result name="input">/Public/success.jsp</result>
          <result name="error">/Public/error.jsp</result>  
        </global-results>
        <action name="index" class="com.lihua.action.HomeAction" method="index">
            <result name="success">/Home/index.jsp</result>
        </action>
    </package>
</struts>

第四步 创建jsp页面

根据我们struts.xml的设置,我们需要建立两个文件:
/Home/index.jsp/User/login.jsp,这两个一个是后台首页,另一个是登录页。我们新建这两个文件,推荐从原有login.jsp复制并重命名。
登录页需要提交一个username,password的表单到/User/checkLogin
于是可以在login.jsp页面写:

<form action="<%=Tool.u("User/checkLogin")%>" method="POST">
    <p>用户名<input type="text" name="username"></p>
    <p>密码<input type="text" name="password"></p>
    <p><button type="submit">提交</button></p>
</form>

Home/index.jsp暂时不写。
网站默认访问的页面是根目录下的index.jsp,我们可以在index.jsp下写一个跳转js跳转到login功能。把WebRoot/User/login.jsp内容直接复制到WebRoot下的index.jsp里并保存,并写一段js:

<script>location.href="<%=Tool.u("User/login")%>";</script>

下面我们就可以运行测试了,右键点击我们的项目,点击Run As->MyEclipse Server Application运行。然后就能看到我们的登录页面了。随便输个错误密码点登录,然后输正确密码点登录测试一下看看效果吧~
这里写图片描述
这个是我从tp模板上套来的,觉得不美观可以替换修改成自己喜欢的页面,位置在WebRoot/Public下。

内容管理DEMO

说到管理,无非就是增删改查。那么我们怎么在javaweb下进行增删改查呢?
下面我们来写一个用户管理的例子

我们在UserAction中进行编写userList方法,Action只负责权限的验证与数据的处理。

public String userList(){
    if(session("User")==null)
        return error("请登录","User/login");
    User u = (User)session("User");
    if(u.getId()!=1)
        return error("请登录","User/login");//规定uid是1的才能管理用户列表
    this.assign("userlist", M("User").select());
    return SUCCESS;
}

struts.xml略
jsp页面:

<%@ page language="java" import="java.util.*,com.lihua.tools.Tool" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<table>
    <tr>
        <th>用户id</th>
        <th>用户名</th>
    </tr>
    <s:iterator value="userlist" id="u">
        <tr>
            <td><s:property value="#u.id" /></td>
            <td><s:property value="#u.username" /></td>
        </tr>
    </s:iterator>
</table>

这里的s标签用法尽情的百度搜索一大堆。

我们在UserAction中进行编写addUser方法。

public String addUser(){
    if(session("User")==null)
        return error("请登录","User/login");
    User u = (User)session("User");
    if(u.getId()!=1)
        return error("请登录","User/login");//规定uid是1的才能管理用户列表
    if(p("username")!=null){//添加用户
        User s = new User();
        s.setUsername(p("username"));
        s.setPassword(p("password"));
        M("User").add(s);
        return success("添加成功","User/userList");
    }
    return SUCCESS;
}

struts.xml略
jsp页面:

<%@ page language="java" import="java.util.*,com.lihua.tools.Tool" pageEncoding="UTF-8"%>
<form action="" method="POST">
    <p><input type="text" name="username"></p>
    <p><input type="text" name="password"></p>
    <p><button>添加</button></p>
</form>

我们在UserAction中进行编写delUser方法。

public String delUser(){
    if(session("User")==null)
        return error("请登录","User/login");
    User u = (User)session("User");
    if(u.getId()!=1)
        return error("请登录","User/login");//规定uid是1的才能管理用户列表
    if(p("uid")==null)
        return error("非法操作");
    int uid=0;
    try{
        uid=Integer.parseInt(p("uid"));//get传个uid过来就能删了这个用户了。
    }catch(Exception e){
        return error("非法操作");
    }
    M("User").delete(uid);
    return success("删除成功","User/userList");
}

struts.xml略
可以在userList页面中这样调用:

<a href="<%=Tool.u("User/delUser")%>?uid=<s:property value="#u.id" />">删除</a>

我们在UserAction中进行编写editUser方法。

public String editUser(){
        if(session("User")==null)
            return error("请登录","User/login");
        User u = (User)session("User");
        if(u.getId()!=1)
            return error("请登录","User/login");//规定uid是1的才能管理用户列表
        if(p("id")!=null){//提交了
            int id=0;
            try{
                id=Integer.parseInt(p("id"));//get传个uid过来就能删了这个用户了。
            }catch(Exception e){
                return error("非法操作");
            }
            User sv = (User) M("User").find(id);
            if(sv==null)
                return error("用户不存在");
            sv.setPassword(p("password"));
            sv.setUsername(p("username"));
            M("User").save(sv);
            return success("修改成功","User/userList");
        }
        if(p("uid")==null)
            return error("非法操作");
        int uid=0;
        try{
            uid=Integer.parseInt(p("uid"));//get传个uid过来就能删了这个用户了。
        }catch(Exception e){
            return error("非法操作");
        }
        User s = (User) M("User").find(uid);
        if(s==null)
            return error("用户不存在");
        this.assign("user",s);
        return SUCCESS;
    }

struts.xml略
jsp:

<%@ page language="java" import="java.util.*,com.lihua.tools.Tool" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<form action="" method="POST">
    <p><input type="text" name="username" value="<s:property value='#user.username' />"></p>
    <p><input type="text" name="password" value="<s:property value='#user.password' />"></p>
    <input type="hidden" name="id" value="<s:property value='#user.id' />">
    <p><button>保存</button></p>
</form>

综合

修改userList.jsp为如下内容:

<%@ page language="java" import="java.util.*,com.lihua.tools.Tool" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<a href="<%=Tool.u("User/addUser")%>">新增</a>
<table>
    <tr>
        <th>用户id</th>
        <th>用户名</th>
        <th>操作</th>
    </tr>
    <s:iterator value="userlist" id="u">
        <tr>
            <td><s:property value="#u.id" /></td>
            <td><s:property value="#u.username" /></td>
            <td>
                <a href="<%=Tool.u("User/delUser")%>?uid=<s:property value="#u.id" />">删除</a>
                <a href="<%=Tool.u("User/editUser")%>?uid=<s:property value="#u.id" />">修改</a>
            </td>
        </tr>
    </s:iterator>
</table>

效果如图:
这里写图片描述

总结

基本的管理页面骨架已经出来了。最后需要大家根据各种模板的样式等等对骨架进行加工。
登录后的Home/index可以存放一个iframe用于加载用户菜单页面。登录页面模板也很多。当然也很推荐大家自己用基本的框架写诸如bootstrap,layui之类的。如果在写代码的时候遇到什么问题请在下方回复,我会尽量帮忙解决。

附录

最终struts.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
    <package name="User" namespace="/User" extends="struts-default">
        <global-results>
          <result name="input">/Public/success.jsp</result>
          <result name="error">/Public/error.jsp</result>  
        </global-results>
        <!--下面action名称就随便命了,不过推荐以类方法命名。后面class和method就是要调用的Action的方法了。-->
        <action name="login" class="com.lihua.action.UserAction" method="login">
            <result name="success">/User/login.jsp</result>
        </action>
        <action name="userList" class="com.lihua.action.UserAction" method="userList">
            <result name="success">/User/userList.jsp</result>
        </action>
        <action name="addUser" class="com.lihua.action.UserAction" method="addUser">
            <result name="success">/User/addUser.jsp</result>
        </action>
        <action name="editUser" class="com.lihua.action.UserAction" method="editUser">
            <result name="success">/User/editUser.jsp</result>
        </action>
        <action name="delUser" class="com.lihua.action.UserAction" method="delUser"></action>
        <action name="checkLogin" class="com.lihua.action.UserAction" method="checkLogin"></action>
    </package>
    <package name="Home" namespace="/Home" extends="struts-default">
        <global-results>
          <result name="input">/Public/success.jsp</result>
          <result name="error">/Public/error.jsp</result>  
        </global-results>
        <action name="index" class="com.lihua.action.HomeAction" method="index">
            <result name="success">/Home/index.jsp</result>
        </action>
    </package>
</struts>

最终UserAction.java

package com.lihua.action;

import java.util.List;

import com.lihua.hibernate.User;
import com.lihua.tools.DB_Where;
import com.lihua.tools.Tool;

public class UserAction extends BaseAction{
    private static final long serialVersionUID = -4987597667769252852L;
    @Override
    public boolean check() {
        // TODO Auto-generated method stub
        return true;
    }
    public String login(){
        return SUCCESS;
    }
    public String checkLogin(){
        String username = p("username");
        String password = p("password");
        DB_Where where = new DB_Where();
        where.setWhere("username", username);
        where.setWhere("password", password);
        List<User> s = (List<User>) M("User").where(where).select();
        if(s.isEmpty())
            return error("登录失败");
        session("User",s.get(0));
        return success("登录成功","Home/index");
    }
    public String userList(){
        if(session("User")==null)
            return error("请登录","User/login");
        User u = (User)session("User");
        if(u.getId()!=1)
            return error("请登录","User/login");//规定uid是1的才能管理用户列表
        List<?> l = M("User").select();
        this.assign("userlist", l);
        return SUCCESS;
    }
    public String addUser(){
        if(session("User")==null)
            return error("请登录","User/login");
        User u = (User)session("User");
        if(u.getId()!=1)
            return error("请登录","User/login");//规定uid是1的才能管理用户列表
        if(p("username")!=null){//添加用户
            User s = new User();
            s.setUsername(p("username"));
            s.setPassword(p("password"));
            M("User").add(s);
            return success("添加成功","User/userList");
        }
        return SUCCESS;
    }
    public String delUser(){
        if(session("User")==null)
            return error("请登录","User/login");
        User u = (User)session("User");
        if(u.getId()!=1)
            return error("请登录","User/login");//规定uid是1的才能管理用户列表
        if(p("uid")==null)
            return error("非法操作");
        int uid=0;
        try{
            uid=Integer.parseInt(p("uid"));
        }catch(Exception e){
            return error("非法操作");
        }
        M("User").delete(uid);
        return success("删除成功","User/userList");
    }
    public String editUser(){
        if(session("User")==null)
            return error("请登录","User/login");
        User u = (User)session("User");
        if(u.getId()!=1)
            return error("请登录","User/login");//规定uid是1的才能管理用户列表
        if(p("id")!=null){//提交了
            int id=0;
            try{
                id=Integer.parseInt(p("id"));//get传个uid过来就能删了这个用户了。
            }catch(Exception e){
                return error("非法操作");
            }
            User sv = (User) M("User").find(id);
            if(sv==null)
                return error("用户不存在");
            sv.setPassword(p("password"));
            sv.setUsername(p("username"));
            M("User").save(sv);
            return success("修改成功","User/userList");
        }
        if(p("uid")==null)
            return error("非法操作");
        int uid=0;
        try{
            uid=Integer.parseInt(p("uid"));//get传个uid过来就能删了这个用户了。
        }catch(Exception e){
            return error("非法操作");
        }
        User s = (User) M("User").find(uid);
        if(s==null)
            return error("用户不存在");
        this.assign("user",s);
        return SUCCESS;
    }
}

转载请注明出处谢谢。

Logo

更多推荐