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

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

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


MyEclipse的安装

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

新建项目

打开MyEclipse后如图所示:

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

新建

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

填写完毕后点击 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;
    }
}

转载请注明出处谢谢。

发布了11 篇原创文章 · 获赞 13 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/similing/article/details/82532076