这星期的实验,最终调好了。

一句话,麻雀虽小,五脏俱全。相信刚学struts2的同学能够通过该实验能够更好地理解struts的结构和mvc

登录的之前写过,这里直接进入用户管理

用struts2都要在src目录下建个struts.xml文件。文件名称不能写错。这里直接贴上整个project定义到的action,了解下语法就能够了,以后详细用到再依据项目去改

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<!-- struts为配置文件根元素 -->
<struts>
<!-- Action必须放在指定的包名空间中 -->
<package name="user" extends="struts-default">
<action name="queryAll" class="UserAction" method="queryAll">
<result name="success">/index.jsp</result>
</action>
<action name="delete" class="UserAction" method="delete">
<result name="success" type="chain">queryAll</result>
</action>
<action name="insert" class="UserAction" method="insert">
<result name="success" type="chain">queryAll</result>
</action>
<action name="edit" class="UserAction" method="edit">
<result name="success" type="chain">queryAll</result>
</action>
<action name="queryUserById" class="UserAction" method="queryUserById">
<result name="success">edit.jsp</result>
</action>
</package>
</struts>

WebRoot/WEB-INF下有个web.xml,得定义struts过滤器,直接看代码清楚些。这部分固定不变的。以后用到能够直接copy过去

<?

xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
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_3_0.xsd">
<display-name></display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>

用户模型User.java,模型都是一些属性和getter、setter方法,不想每次手动写全部的getter、setter方法能够右击选中Generate Getter and Setters...设置生成对应的方法

public class User {

	public int id;
public String username;
public String password;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
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;
} }

接下来一个DataBaseConn.java,用于获取数据库连接

import java.sql.*;

public class DataBaseConn {

	static Connection conn;
public static Connection getConnection(){
try {
Class.forName("com.mysql.jdbc.Driver");
conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "686175");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}
public void close(){
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}

QueryUpdate.java,业务逻辑层

import java.util.ArrayList;
import java.sql.*; public class QueryUpdate { Connection conn;
Statement stmt;
ResultSet rs;
String sql=null; public QueryUpdate(){
conn=DataBaseConn.getConnection();
try {
stmt=conn.createStatement();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public ArrayList<User> queryAll(){
ArrayList<User> users=new ArrayList<User>();
try {
sql="select * from user";
rs=stmt.executeQuery(sql);
while(rs.next()){
User user=new User();
user.setId(rs.getInt(1));
user.setUsername(rs.getString(2));
user.setPassword(rs.getString(3));
users.add(user);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return users;
} public User queryUserById(int id){
User user=new User();
sql="select * from user where id='"+id+"'";
try {
rs=stmt.executeQuery(sql);
if(rs.next()){
user.setId(rs.getInt(1));
user.setUsername(rs.getString(2));
user.setPassword(rs.getString(3));
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return user;
}
public void delete(int id){
sql="delete from user where id='"+id+"'";
try {
stmt.executeUpdate(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void insert(String username,String password){
try {
int count=1;
sql="select * from user";
rs=stmt.executeQuery(sql);
if(rs.next()){
rs.last();
count=rs.getInt(1)+1;
}
sql="insert into user values('"+count+"','"+username+"','"+password+"')";
stmt.executeUpdate(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void edit(int id,String username,String password){
try {
sql="update user set username='"+username+"', password='"+password+"' where id='"+id+"'";
stmt.executeUpdate(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

以下是一个Action类UserAction.java。struts都是用action处理的

import java.util.ArrayList;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport; public class UserAction extends ActionSupport{ int id;
String username;
String password;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
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;
}
public String queryAll(){
QueryUpdate qu=new QueryUpdate();
ArrayList<User> users=new ArrayList<User>();
users=qu.queryAll();
HttpServletRequest request=ServletActionContext.getRequest();
request.setAttribute("all", users);
return "success";
}
public String queryUserById(){
QueryUpdate qu=new QueryUpdate();
User user=new User();
user=qu.queryUserById(this.getId());
HttpServletRequest request=ServletActionContext.getRequest();
request.setAttribute("user", user);
return "success";
}
public String delete(){
QueryUpdate qu=new QueryUpdate();
qu.delete(this.getId());
return "success";
}
public String insert(){
QueryUpdate qu=new QueryUpdate();
qu.insert(this.getUsername(), this.getPassword());
return "success";
}
public String edit(){
QueryUpdate qu=new QueryUpdate();
qu.edit(this.getId(),this.getUsername(),this.getPassword());
return "success";
}
}

表现层

index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>My JSP 'index.jsp' starting page</title>
</head> <body>
<table border="1">
<tr>
<td>编号</td>
<td>账号</td>
<td>密码</td>
<td>编辑</td>
<td>删除</td>
</tr>
<s:iterator value="#request.all" id="user">
<tr>
<td><s:property value="#user.id"/></td>
<td><s:property value="#user.username"/></td>
<td><s:property value="#user.password"/></td>
<td><a href="queryUserById.action?id=<s:property value='#user.id'/>">改动</a></td>
<td><a href="delete.action?id=<s:property value='#user.id'/>">删除</a></td>
</tr>
</s:iterator>
</table>
<a href="insert.jsp">加入新用户</a>
</body>
</html>

编辑更新信息edit.jsp。

神了,用struts标签写的不知道为什么编译只是去,后来听同学的改用普通的jsp就能够了

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ page isELIgnored="false"%>
<html>
<head>
<title>My JSP 'edit.jsp' starting page</title>
<body>
<form action="edit.action" method="post">
编号<input type="text" name="id" value="${user.id}" readonly="readonly"/><br>
用户名<input type="text" name="username" value="${user.username}"/><br>
密码 <input type="password" name="password" value="${user.password}"/><br>
<input type="submit" value="更新 "/>
<input type="reset" value="取消"/>
</form>
</body>
</html>

编号设为仅仅读也能够用disabled="true",区别就是用disabled界面是灰色的看不太清id值。用readonly尽管看起来和username、password差点儿相同。假设想删除id,程序会跳回index.jsp,da

加入新用户insert.java

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>My JSP 'insert.jsp' starting page</title>
</head> <body>
<s:form action="insert" method="post">
<s:textfield key="username" label="用户名"/>
<s:password key="password" label="密码"/>
<td><s:submit value="登录"/>
<s:reset value="取消"/><td>
</s:form>
</body>
</html>

在浏览器输入地址http://localhost:8080/struts2_mvc/queryAll.action便进入主页面

用标准Struts2+mvc写的用户管理的更多相关文章

  1. EasyUI+MVC+EF简单用户管理Demo(问题及解决)

    写在前面 iframe-src EntityFramework版本 connectionStrings View.Action.页面跳转 EasyUI中DataGrid绑定 新增.修改和删除数据 效果 ...

  2. 分享一个14年写的用户管理类-swift版

    AccountManager类 14年设计,从swift 0.9开始,迭代到现在swift4.0版本,总体几乎没什么改动,简单稳定. 其实现的思路主要还是借助之前net反射的经验,实现了自动保存用户信 ...

  3. [转]Spring3 MVC + jQuery easyUI 做的ajax版本用户管理

    原文地址:http://www.iteye.com/topic/1081739 上周写了篇基于spring3.0.5 mvc 简单用户管理实例 ( http://www.iteye.com/topic ...

  4. “MVC+Nhibernate+Jquery-EasyUI” 信息发布系统 第四篇(用户管理功能的实现)

    “MVC+Nhibernate+Jquery-EasyUI” 信息发布系统 第四篇(用户管理功能的实现) 一.前三篇的内容是否对您有帮助呢?如果有的话,请您继续关注这篇吧,这篇主要是实现”用户管理“的 ...

  5. 学习MVC之租房网站(五)-权限、角色、用户管理

    在上一篇<学习MVC之租房网站(四)-实现Service层并进行单元测试>中,记录了实现Service层并进行单元测试的过程,接下来该到"正题"-MVC了,也就是UI层 ...

  6. Spring MVC 学习笔记10 —— 实现简单的用户管理(4.3)用户登录显示全局异常信息

    </pre>Spring MVC 学习笔记10 -- 实现简单的用户管理(4.3)用户登录--显示全局异常信息<p></p><p></p>& ...

  7. Spring MVC 学习笔记9 —— 实现简单的用户管理(4)用户登录显示局部异常信息

    Spring MVC 学习笔记9 -- 实现简单的用户管理(4.2)用户登录--显示局部异常信息 第二部分:显示局部异常信息,而不是500错误页 1. 写一个方法,把UserException传进来. ...

  8. Spring MVC 学习笔记8 —— 实现简单的用户管理(4)用户登录

    Spring MVC 学习笔记8 -- 实现简单的用户管理(4)用户登录 增删改查,login 1. login.jsp,写在外面,及跟WEB-INF同一级目录,如:ls Webcontent; &g ...

  9. “MVC+Nhibernate+Jquery-EasyUI” 信息发布系统 第五篇(用户管理之“用户权限分配”)

    一.在做权限分配之前,首先先了解“ZTree”这个插件,我的这个系统没有用Jquery-EasyUI的Tree.用的是”ZTree“朋友们可以试试,也很强大.点击下载ZTree插件.       1. ...

随机推荐

  1. 14.2.1 MySQL and the ACID Model

    14.2 InnoDB Concepts and Architecture InnoDB 概念和结构体系: 14.2.1 MySQL and the ACID Model 14.2.2 InnoDB ...

  2. 在 SSIS package 中使用FTP

    在ssis 包中使用FTP 实际上很简单, 直接拿一个FTP控制流(FTP 任务) ,配置一下FTP 服务器就可以了, 但是当我想在SQL Server Job 中使用这个功能时却报了个错(如下), ...

  3. 3-04. 一元多项式的乘法与加法运算(20)(ZJU_PAT 结构体)

    题目链接:http://pat.zju.edu.cn/contests/ds/3-04 设计函数分别求两个一元多项式的乘积与和. 输入格式说明: 输入分2行.每行分别先给出多项式非零项的个数.再以指数 ...

  4. win2003的IIS無法使用,又一次安裝提示找不到iisadmin.mfl文件

    我的系統是win2003 繁體版 sp2,現在iis無法使用,我同事的也是,也不知道是不是跟在網域中有關係,因為我用虛擬機的繁體系統win2003 R2版iis能够正常使用,不過曾经那台電腦也是在網域 ...

  5. C++中字母大写和小写转换实现的优化

    C++中字母大写和小写转换实现的优化 write by 九天雁翎(JTianLing) -- blog.csdn.net/vagrxie 讨论新闻组及文件 在本文中所有以转换为小写为例. 从推荐复用代 ...

  6. 分享一些免费的,开源的邮件server软件

    因为企业的须要,我们非常可能须要架设一个邮件server,微软的Exchange太复杂?GOOGLE出来的又收费!头大了吧,OK,贾芸斐在这里给大家分享推荐几个免费的开源的邮件server软件.希望你 ...

  7. Android手机便携式wifi的使用及无线数据传输(主要针对XP系统)

    适用条件: 1.可以上网的安卓系统2.2以上的智能手机,或有便携式wifi功能的安卓智能手机 2.有无线网卡的笔记本电脑或台式机(特别是XP系统) 测试手机:中兴U930 电脑:华硕K50系列笔记本 ...

  8. 其他主机连接本地主机Tomcat会出现的防火墙问题

    当我在A机上开启Tomcat后,B机上打开浏览器不能访问到Tomcat的服务器,这是由于Windows防火墙的原因 可以由以下两种做法: 关闭Windows防火墙: 如果不想关闭Windows防火墙, ...

  9. iOS - NSLog的使用方法

    NSLog的定义 NSLog定义在NSObjCRuntime.h中,如下所示: void NSLog(NSString *format, …); 基本上,NSLog很像printf,同样会在conso ...

  10. 使用GDI+绘制的360风格按钮控件(使用CN_DRAWITEM消息重绘,并使用TGPGraphics,TGPPen,TGPImage,TGPBitmap等)good

    将下面的代码拷贝到一个单元中,创建一个包,加入这个单元后安装.使用的时候设置好背景颜色,边框颜色,图标(png格式)相对路径的文件名称.这个控件可以利用PNG图像的颜色透明特性,背景色默认透明度为50 ...