发布日期: 2021-06-27
文章字数: {{articleLength}}
阅读时长: {{parseInt(articleLength / 800)}} 分
阅读次数: {{read_count}}
# 如何使用MyEclipse开发一个JavaWeb网站
本文所述的内容仅用于参考或学习,主要针对毕业设计等网站设计,请勿实际用于生产开发用途,否则后果自负:
-------------------
## MyEclipse的安装
> 这里我使用的是MyEclipse10.7.1,下载地址 <a href="https://pan.baidu.com/s/1U7htWF9M1TKs-TapiBPj-A" target="_blank"> [ 度盘 ]</a>,密码:6aw3。破解方法:<a href="https://blog.csdn.net/love781147948/article/details/42144127">博客</a>,补丁下载地址:<a href="https://www.jb51.net/softs/150887.html">脚本之家</a>
## 新建项目
打开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


Text file Encoding栏选择Other,下拉选择UTF-8即可。
## 导入Struts2、Hibernate并配置MySQL
**struts2**

选择2.1并选择/*

**MySQL**
安装MySQL:<a href="https://download.csdn.net/download/similing/9873893">MySQL下载</a>
> 安装过程请按照<a href="https://www.jb51.net/article/96898.htm">这里</a>的教程进行安装,注意编码一定要填写**UTF-8**
**Hibernate**
Hibernate必须在MySQL安装之后进行(如果要求用sqlserver就安装sqlserver后进行)
点击Window->Open Perspective->MyEclipse Hibernate


右键点击DB Browser,选new


这里按照如图所示的内容进行填写:

这里的mysql-connector-java-3.1.6-bin.jar在<a href="https://pan.baidu.com/s/1Ysbh2MwMzgzOe8f9753dTQ">这里</a>下载
这里的数据库名就在你的数据库管理软件里进行创建吧。个人用的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](https://github.com/similing4/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、路由(对应浏览网址)的对应关系。
```mermaid
sequenceDiagram
用户->>服务器: ①网址
服务器->>struts.xml处理程序: ②解析后的网址
struts.xml处理程序->>Action: ③请求实例方法
Action->>struts.xml处理程序: ④实例方法返回值
struts.xml处理程序->>对应jsp页面: ⑤Action传递的数据
对应jsp页面->>服务器: ⑥最终页面
服务器->>用户: ⑦最终页面
```
用户访问网址后服务器根据struts进行解析,新建指定Action的实例并调用指定方法,并根据方法返回值显示指定页面。
我们在com.lihua.action中新建一个类,名字叫UserAction继承自BaseAction并重写check方法:
```java
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方法即可:
```java
String username = p("username");
String password = p("password");
```
查询数据库使用M方法的各种操作即可。详情请看<a href="https://github.com/similing4/JAVA_SSH_Easyer/blob/master/README.md">Readme.md</a>
```java
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。
所以登录功能的完整代码:
```java
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:
```java
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
<?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
<?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):
```xml
<action name="login" class="com.lihua.action.UserAction" method="login">
<result name="success">/User/login.jsp</result>
</action>
```
checkLogin:
```xml
<action name="checkLogin" class="com.lihua.action.UserAction" method="checkLogin"></action>
```
index:
```xml
<action name="index" class="com.lihua.action.HomeAction" method="index">
<result name="success">/Home/index.jsp</result>
</action>
```
最终生成的struts.xml:
```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页面写:
```html
<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:
```html
<script>location.href="<%=Tool.u("User/login")%>";</script>
```
下面我们就可以运行测试了,右键点击我们的项目,点击Run As->MyEclipse Server Application运行。然后就能看到我们的登录页面了。随便输个错误密码点登录,然后输正确密码点登录测试一下看看效果吧~

这个是我从tp模板上套来的,觉得不美观可以替换修改成自己喜欢的页面,位置在WebRoot/Public下。
##内容管理DEMO
说到管理,无非就是增删改查。那么我们怎么在javaweb下进行增删改查呢?
下面我们来写一个用户管理的例子
###查
我们在UserAction中进行编写userList方法,Action只负责权限的验证与数据的处理。
```java
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页面:
```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方法。
```java
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页面:
```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方法。
```java
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页面中这样调用:
```html
<a href="<%=Tool.u("User/delUser")%>?uid=<s:property value="#u.id" />">删除</a>
```
###改
我们在UserAction中进行编写editUser方法。
```java
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:
```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为如下内容:
```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
<?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
```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;
}
}
```
#转载请注明出处谢谢。