关于Struts2 的CRUD(并涉及页面,数据库,服务器端的乱码解决)

数据库采用mysql, (Navicat MySQL作为mysql的UI[url]http://www.w2blog.net/view/142.html[/url])
服務器采用tomcat6.0,
IDE使用Europa ,
使用dbutil([url]http://commons.apache.org/dbutils/[/url])作为操作数据库辅助的jar。

1. 国际化问题
所有代码都使用utf-8(在europa中如下设置jsp、js 、 properties的编码格式)[img]http://www.iteye.com/upload/attachment/30529/5bf01a23-eada-3a65-818d-3b3716c3a248.jpg[/img]


[b] 所有jsp页面[/b]
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>(JSP编译器在将JSP文件编译成Servlet时使用的编码)

<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
(重新认定编码方式)

[b]tomcat的server.xml[/b]

<Connector port="8080"
URIEncoding="UTF-8"
protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
/>



([color=red]注意要重新建europa的javaee的tomcat server;否则europa会保留第一次设置的值[/color])

[b]数据库编码[/b]

确保mysql安装时选择的编码为utf8,可以通过如下方式确认。(
my.ini)


[client]

port=3306

[mysql]

default-character-set=utf8



连接代码
&useUnicode=true&characterEncoding=utf-8


2、struts2的配置文件

package.properties

User.name = 用户名
User.pwd = 用户密码
User.description = 用户详细信息
##############################
User.submit = 登录
User.create = 注册
User.update = 提交
User.reset = 重置
User.edit = 修改注册信息
User.logout = 退出登录
User.delete = 删除用户
User.selectAll = 查询全部


键值对就是为了实现国际化(package.properties可以有多种命名方法,看你的具体业务需要了,我只是写个例子)

在jsp中调用: <s:properties value="%getText('User.name')"/>
在java source中调用: String name = getText("User.name")

UserAction-user_create-validation.xml



<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">

<validators>
<field name="name">
<field-validator type="requiredstring">
<message><![CDATA[ 用户名不能为空 ]]></message>
</field-validator>
</field>
<field name="pwd">
<field-validator type="requiredstring">
<message key="requiredstring"/>
</field-validator>
</field>
</validators>



文件名格式为 [color=red]className-actionalias-validation.xml[/color]


[b]关于标签[/b]

<s:iterator value="userList">
........
</s:iterator>


[color=red][b]关于action的别名[/b][/color]

xml配置文件:


<action name="user_*" method="{1}" class="example.UserAction">
<result name="input">
/example/user_create.jsp
</result>
<result name="create_success">
/example/user_create_success.jsp
</result>
<result name="editInit">
/example/user_edit.jsp
</result>
<result name="selectAll">
/example/user_selectAll.jsp
</result>
<result name="delete_success">
/example/user_create_success.jsp
</result>
<result name="create">
/example/user_create.jsp
</result>
</action>


java代码中:


public String select() throws Exception {

// 查询SQL
String USER_SELECT = "SELECT u.NAME, u.PWD, u.DESCRIPTION FROM USER u";
ResultSetHandler rsh = new ResultSetHandler() {
public Object handle(ResultSet rs) throws SQLException {
List<User> userListTemp = new ArrayList<User>();
/*
* select
*/

。。。。。。。。。。。。。。。。。。。。

public String createInit() throws Exception {
return "create";
}


jsp代码中:


<td>
<s:url action="user_editInit" id="user_edit">
<s:param name="name" value="name"></s:param>
</s:url>
<s:a href="%{user_edit}"><s:text name="%{getText('User.edit')}"/></s:a>
<s:url action="user_delete" id="user_delete">
<s:param name="name" value="name"></s:param>
</s:url>
<s:a href="%{user_delete}"><s:text name="%{getText('User.delete')}"/></s:a>
<hr>
</td>



从action的命名及java source的方法名中, 相信大家已经看出规律来了。

附:
sql
[quote]
/*
MySQL Data Transfer
Source Host: localhost
Source Database: webapp
Target Host: localhost
Target Database: webapp
Date: 2008-7-9 下午 11:31:33
*/

SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for user
-- ----------------------------
CREATE TABLE `user` (
`id` int(8) NOT NULL auto_increment,
`name` varchar(45) NOT NULL,
`pwd` varchar(45) NOT NULL,
`description` varchar(245) default NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records
-- ----------------------------
INSERT INTO `user` VALUES ('42', '1', '1', '1');
INSERT INTO `user` VALUES ('43', '11', '11', '11');

[/quote][color=blue]
其他地方感觉也没什么可说的啦, (其实上面每一点要深入下去, 都能写成一篇, 我只是草草说下,抛砖引玉了)我把源码贴上, 如果需要jar文件, 可以congpeixue@126.com[/color]

后面有时间我会对这个例子再完善一下。。。。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值