1、 使用JavaBean解决中文乱码
在JavaWeb应用中,若客户端和服务端的字符编码不能保持一致,就会出现中文乱码现象。解决中文乱码最好的方法是保持客户端和服务端的字符编码一致,若因各种原因前后端字符编码不能保持一致,就需要在前后端进行字符编码转换。
例如前端JSP页面使用的是ISO_8859_1编码,后端存储的是UTF-8编码,当客户端向服务端提交表单时,就需要将ISO_8859_1编码转换为UTF-8编码。
案例1:编写字符编码转换JavaBean,将客户端提交GBK编码的表单数据转换为UTF-8编码。
(1)在java目录bean包下创建名称为Book的类,封装图书名称、摘要、作者信息,主要代码如下:
package com.example.bean;
public class Book {
// 图书名称
String name;
// 图书摘要
String brief;
// 作者
String author;
public Book() {
}
public String getName() {
return name;
}
public String getBrief() {
return brief;
}
public String getAuthor() {
return author;
}
public void setName(String name) {
this.name = name;
}
public void setBrief(String brief) {
this.brief = brief;
}
public void setAuthor(String author) {
this.author = author;
}(2)创建对字符编码进行处理的JavaBean,在bean包下新建PressEncoding类,在该类编写toUTF8()方法对字符编码进行转换。主要代码如下:
public class PressEncoding {
// 构造方法
public PressEncoding(){
}
// 字符编码转换
public String toUTF8(String str) {
String text = "";
// 检测str是否为NULL或空
if( str != NULL && !"".equals(str) )
{
try{
text = new String(str.getBytes(StandardCharsets.ISO_8859_1),"UTF-8");
}catch (UnsupportedEncodingException e){
e.printStackTrace();;
}
}
return text;
}
}String对象的getBytes()方法将str编码到byte序列,String类的构造方法将byte序列按照指定的编码进行解码。
(3) 在beansample目录下创建book.jsp,放置图书信息,主要代码如下:
<form action="dobook.jsp" method="post"> <div>图书名称:<input type="text" name="name"></div> <div>图书摘要:<input type="text" name="brief"></div> <div>作者:<input type="text" name="author"></div> <div><input type="submit" value="提交"></div> </form>
(4)在beansample目录下创建dobook.jsp,对提交的图书信息进行处理。主要代码如下:
<head> <title>Title</title> <jsp:useBean id="encode" class="com.example.bean.PressEncoding"></jsp:useBean> <jsp:useBean id="book" class="com.example.bean.Book"></jsp:useBean> <jsp:setProperty name="book" property="*" /> </head> <body> <div> <div>图书名称:<%= encode.toUTF8(book.getName())%></div> <div>图书摘要:<%= encode.toUTF8(book.getBrief())%></div> <div>作者:<%= encode.toUTF8(book.getAuthor())%></div> </div> </body>
2、 对时间进行封装的JavaBean
JavaBean是可重用组件,它可以是一个实体对象,也可以是一个业务逻辑处理。下面编写一个对时间进行封装的JavaBean.。
案例2:编写一个封装时间的JavaBean,通过该对象可以获取当前时间,同时也可以获取今天是星期几。在JSP页面实例化该对象,显示当前时间和星期几。
(1)在项目java目录bean包下创建DateTool类,主要代码如下:
package com.example.bean;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class DateTool {
// 当前时间
String dataTime;
// 星期
String week;
// 实例化日历对象
Calendar calendar = Calendar.getInstance();
public String getDataTime() {
// 获取当前时间
Date date = calendar.getTime();
// 实例化时间格式化对象
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年mm月dd日 hh:mm:ss");
// date对象格式化为时间字符串
dataTime = dateFormat.format(date);
return dataTime;
}
public String getWeek() {
// 定义星期数组
String weeks[] = {"星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
int weekIndex = calendar.get(Calendar.DAY_OF_WEEK);
week = weeks[weekIndex];
return week;
}
}Calendar是日历对象,该对象的getTime()方法可以获取当前时间,get(Calendar.DAY_OF_WEEK)可以获取当前day是星期几。
SimpleDateFormat是时间格式化对象,可以将Date对象指定的时间格式化为我们需要的时间格式。
(2)在项目beansample目录下,建立datesample.jsp,显示当前时间和今天是星期几。主要代码如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> <jsp:useBean id="datetool" class="com.example.bean.DateTool"></jsp:useBean> </head> <body> <div> <div>当前时间:<jsp:getProperty name="datetool" property="dataTime"/></div> <div><jsp:getProperty name="datetool" property="week"/></div> </div> </body> </html>