https://github.com/tekintian/java10_servlet_demo
java10 servlet demo with maven and junit
https://github.com/tekintian/java10_servlet_demo
Last synced: 2 days ago
JSON representation
java10 servlet demo with maven and junit
- Host: GitHub
- URL: https://github.com/tekintian/java10_servlet_demo
- Owner: tekintian
- Created: 2018-04-27T16:20:02.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2018-07-10T02:40:15.000Z (about 7 years ago)
- Last Synced: 2025-04-09T11:48:46.265Z (6 months ago)
- Language: Java
- Homepage:
- Size: 2.45 MB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# java10 Servlet 学习项目 Maven Junit
java10 servlet demo JAVA Servlet 学习项目, 没有技术含量,纯粹的新手学习的项目
Maven 依赖管理,Junit 单元测试## java foreach, for 循环
### foreach
foreach语句是java5的新特征之一,在遍历数组、集合方面,foreach为开发人员提供了极大的方便。
foreach语句是for语句的特殊简化版本,但是foreach语句并不能完全取代for语句,然而,任何的foreach语句都可以改写为for语句版本。
foreach并不是一个关键字,习惯上将这种特殊的for语句格式称之为“foreach”语句。从英文字面意思理解foreach也就是“for 每一个”的意思。实际上也就是这个意思。 foreach的语句格式:for(元素类型t 元素变量x : 遍历对象obj){ 引用了x的java语句;} 下面通过几个例子简单例子看看foreach是如何简化编程的。1.首先增强for循环和iterator遍历的效果是一样的,也就说增强for循环的内部也就是调用iteratoer实现的,
但是增强for循环有些缺点,例如不能在增强循环里动态的删除集合内容。不能获取下标等。
2.ArrayList由于使用数组实现,因此下标明确,最好使用普通循环。
3.而对于LinkedList 由于获取一个元素,要从头开始向后找,因此建议使用增强for循环,也就是iterator。for(type var : arr) {
//循环体
}- 示例
```java
List list = new ArrayList();
for(String item : list){
System.out.println("循环元素:" + item);
}int arr[] = {1,2,3};
//forecah写法
for (int i : arr) {
System.out.println(i);
}
//普通for循环写法
for(int x=0;x list = new ArrayList();
list.add("1");
list.add("2");
list.add("3");for (String a : list) {
System.out.println("a="+a);
}//foreach循环输出object
Object s[] = list.toArray();
for (Object x : s) {
if(x == "3"){
break;
}
System.out.println(x);
}//foreach输出二维数组
public void testArray2() {
int arr2[][] = {{4, 3}, {1, 2}};
System.out.println("----3----foreach输出二维数组测试");
for (int x[] : arr2) {
for (int e : x) {
System.out.println(e); //逐个输出数组元素的值
}
}
}
```
## Servlet json中文乱码问题
response.setCharacterEncoding("UTF-8");
request.setCharacterEncoding("UTF-8");
response.setContentType("application/json;charset=utf-8");
PrintWriter out = resp.getWriter();一定要注意顺序, 编码设置一定要在 PrintWriter 对象创建 之前,否则无效!
## Servlet返回JSON格式数据
Servlet返回JSON格式的数据
代码:
```java
response.setCharacterEncoding("UTF-8");
response.setContentType("application/json; charset=utf-8");
String jsonStr = "{\"status\":\"success\",\"site_url\":\"http://localhost\",\"site_name\":\"云南网\"}";
PrintWriter out = null;
try {
out = response.getWriter();
out.write(jsonStr);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (out != null) {
out.close();
}
}
```## JAVA Servlet 乱码问题解决方法
---
### 数据库入库乱码问题
- Servlet mysql 乱码示例代码```java
//PS: 数据库连接不加 characterEncoding=utf8 则,入库的数据全部是问号 加了 characterEncoding=utf8 则是乱码
String DB_URL = "jdbc:mysql://localhost:3306/java_demo?characterEncoding=utf8&useSSL=false";response.setContentType("text/html;charset=utf-8");
response.setCharacterEncoding("utf-8");
request.setCharacterEncoding("utf-8");PrintWriter out = response.getWriter();
.....
```
上面代码在控制台打印出来的入库时候的数据是正常的,当是入库后且是乱码或者问号
- Servlet mysql入库乱码解决方法
```java
String DB_URL = "jdbc:mysql://localhost:3306/java_demo?characterEncoding=utf8&useSSL=false";
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("UTF-8");PrintWriter out = response.getWriter();
.....
```
删除 response 的UTF-8编码设置后入库的数据正常。
- MySQL 5.5.45+,requirements SSL connection must be established 。。。解决方法
在jdbc连接参数上面添加 useSSL=false
```java
String DB_URL = "jdbc:mysql://localhost:3306/java_demo?characterEncoding=utf8&useSSL=false";```
### 其他乱码问题
1. 老版本的 tomcat:默认是ISO8859-1,不支持中文的,在获取request 的中文输入的时候需要使用 getBytes("UTF-8") 方法转换;
```java
String name = new String(request.getParameter("name").getBytes("ISO8859-1"),"utf-8");
```
2. 查看tomcat的默认字符集编码方法: java.nio.charset.Charset.defaultCharset() , 如果非UTF-8则需要使用上面的方法将默认的ISO8859-1转换为utf-83. 浏览器调用jsp,html等页面中文显示乱码
```text
此情况需满足两个要求:
(1)文件本身是以utf-8编辑保存的(myEclipse中在properties中鼠标右键选择utf-8)
(2)浏览器用utf-8解析:
(手动)==> 在浏览器中右键选择编码格式为utf-8
(智能)==> 在文件中写入如:
通过标签模拟response头,起到告诉浏览器用utf-8的编码解析
(智能)==> response.setContentType("text/html;charset=UTF-8");
起到告诉浏览器用utf-8的编码解析
常用:
或
<%@ pageEncoding="utf-8"%>
```4. 通过浏览器调用servlet,页面显示乱码。
Servlet乱码分为request乱码和response乱码;5. response乱码问题 解决方法:
```text
在网上很有效的解决方法是添加:
response.setContentType("text/html;charset=utf-8");
response.setCharacterEncoding("UTF-8");
或者 response.setHeader("content-type","text/html;charset=UTF-8");
告诉浏览器用utf-8解析。(setHeader是HttpServletResponse的方法。如果想在拦截器Filter中设置字符编码,则无此方法,因为Filter的doFilter方法的参数类型是ServletResponse)
response.setContentType("text/html;charset=UTF-8"); 目的是为了告诉浏览器输出的内容和输出使用的编码,即控制浏览器用UTF-8进行解码;
response.setCharacterEncoding("UTF-8");目的是用于response.getWriter()输出的字符流的乱码问题。如果是response.getOutputStream()是不需要此种解决方案的,因为这句话的意思是为了将response对象中的数据以UTF-8解码后的字节流发向浏览器;
```
6. request乱码问题使用:request.setCharacterEncoding("utf-8")
如果无法解决,则需要查看tomcat的版本以及默认编码//查看tomcat编码方法
java.nio.charset.Charset.defaultCharset()
//解决方法
String usernameString = new String(username.getBytes("ISO-8859-1"),"UTF-8");7. properties文件乱码
问题描述:在使用一些类库或者框架时,为了实现页面内容国际化,需要编写对应的properties文件。而properties文件中的中文内容在显示的时候也会出现乱码。
解决方法:这个乱码问题可以通过jdk中的native2ascii工具解决。使用如下命令:
native2ascii -encoding utf-8 display.properties display_zh_CN.properties
出现乱码问题的原因是因为java编译器只能处理Latin-1或unicode编码的字符文件。