IDEA的Tomcat配置Web的项目创建以及Servlet简单运行

登录测试

用到jdbc的知识

在Customer的DAO层实现类中实现检查用户登录方法

package impl;

import bean.Customer;
import dao.BaseDAO;
import dao.CustomerDAO; public class CustomerImpl extends BaseDAO implements CustomerDAO {
@Override
public Boolean checklogin(String username, String password) {
Customer customer=queryForCustomer("select password from customer where username=?",username);
if(customer!=null) {
if (customer.getPassword().equals(password)) {
return true;
} else {
System.out.println("密码错误...");
return false;
}
}else{
System.out.println("用户名不存在...");
return false;
}
}
}

index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>后台管理系统</title>
</head>
<body>
<%
Object errorInfo= request.getAttribute("errorInfo");
if(errorInfo!=null){
response.getWriter().write(errorInfo.toString());
} %>
<form action="Login" method="post">
<label>用户名:<input value="" name="username" type="text"/> </label><br/>
<label>密码:<input value="" name="password" type="text"/></label><br/>
<label><input name="提交" type="submit"></label>
</form>
</body>
</html>

login.java

import impl.CustomerImpl;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException; public class Login extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=utf-8");
String username=req.getParameter("username");
//浏览器以iso8859-1格式编码传递数据给服务器,服务器端以utf-8解码,解决中文乱码问题
String username2=new String(username.getBytes("iso8859-1"),"utf-8");
String password=req.getParameter("password");
System.out.println(username);
CustomerImpl customerImpl=new CustomerImpl();
if(customerImpl.checklogin(username2,password))
{
resp.getWriter().write("欢迎进入登录界面。。。");
}else{
//resp.getWriter().write("登录失败,请检查用户名密码输入是否正确。。。");
//请求转发,传值
req.setAttribute("errorInfo","用户名或密码不正确,请重新登录");
req.getRequestDispatcher("index.jsp").forward(req,resp);
} }
}

用户名密码正确显示“欢迎进入登录界面。。。”

用户名密码有一个错误显示转到登录界面

JSP基础

jsp简介
全名是java server pages,中文叫java服务器页面,是servlet的一个简化设计
注释方法:<%-- --%>
1.page指令:配置jsp转译相关的参数
<%@page 属性名="属性值" 属性名="属性值"...%>
language:声明jsp要被转译的语言
import:声明转译的java文件需导入的包,不同的包用逗号隔开
pageEncoding:当前jsp保存的编码格式,如utf-8
contentType:设置jsp数据响应给浏览器的编码格式,如"text/html; utf-8"
session:设置转译的servlet中是否开启session支持,默认开启
errorPage:设置jsp运行错误跳转页面
extends:设置jsp转译的java文件要继承的父类(报名+类名)
2.jsp的局部代码块
<%
%>
3.jsp全局代码块
<%!
%>
注意:全局代码声明的变量在局部代码中调用
4.jsp脚本段语句
<%=变量名%>
作用:快速获取变量或者方法的返回值作为数据响应给浏览器
5.静态引入
<%@include file=""%>
6.动态引入
<jsp:include page=""></jsp:include>
7.jsp的转发标签
<jsp:forward page="">
<jsp:param value="" name="str"/>
</jsp:forward>
<%=request.getParameter("str")%>
8.jsp的九大内置对象
jsp文件在转译成其对应的servlet文件的时候自动生成的并声明的对象,我们在jsp页面中直接使用即可。不能再全局代码块中使用
request/response/pageContext/application/session/out/page/exception/config
9.jsp路径:相对路径,绝对路径

后台管理系统

进度。。。

2.14完成登录界面,获取数据库表信息

备忘:

1.sql语句  select * from customer limit start,rows; 用于mysql分页查询start=(当前页-1)*,每页显示行数;rows=每页显示行数。。如->select * from customer limit 10,10;

2.使用easyui进行布局很方便。

3.使用jsonlib将ArrayList<Object>快速转换为json,用到的包下载

4.后台读取到的数据库数据,封装成json,以如下形式响应给前端

//响应easyui的请求
JSONObject result=new JSONObject();
//获得数据库记录总数,在DAO层实现
int total=new CustomerImpl().getMumberOfRecords();
result.put("rows",jsonArray);
result.put("total",total); resp.setContentType("text/html;charset=utf-8");
resp.getWriter().println(result.toString());
resp.getWriter().flush();
resp.getWriter().close();

5.sql模糊查询常用方法

like:如->select id,username from customer where username like '%i%';

instr:如->select username from customer where instr(password,'456')>0;

......

模糊查询家长分页,如->select * from customer where username like '%i%' limit 0,2;

2.15

1.添加搜索

在datagrid中添加toolbar="#tb"

<div id="tb">
用户名:<input type="text" name="s_username" id="s_username"/><a href="javascript:search()" class="easyui-linkbutton" iconCls="icon-search" plain="true">搜索</a>
</div>
传值
<script type="text/javascript">
function search() {
$("#dg").datagrid("load",{
s_username:$("#s_username").val()
}
)
}
</script>

2.删除

sql语句

->delete from customer where id=15;

->delete from customer where password=111 limit 1;

->delete from customer where id between 10 and 12;

->delete from customer where id in(23,25,26);

前端代码

function del() {
let selcetColumn=$("#dg").datagrid("getSelections")
if(selcetColumn==0){
$.messager.alert("系统提示","轻选择要删除的数据")
}else{
let ids=[]
for(let i=0;i<selcetColumn.length;i++){
ids.push(selcetColumn[i].id)
}
let delIds=ids.join(",")
$.messager.confirm("系统提示","确定要删除这"+selcetColumn.length+"条数据吗?",function (x) {
if(x){
$.post("AdminListDelete",{delIds:delIds},function (result) {
if(result.success){
$.messager.alert("系统提示","数据删除成功")
$("#dg").datagrid("reload");
}else {
$.messager.alert("系统提示","数据删除失败")
}
},"json")
}
})
//alert(delIds)
}
}

3.添加

使用easyui的form表单提交数据

有个要注意的点就是后台传过来的json数据要在前端转换成js对象 var data=eval('('+data+')')

4.修改~~~

不想做了。。JDBC会了,就都是些easyui和数据库的知识了

备忘:jsp已经过时了,但是需要学的还是多学点吧。。明天开始研究一下jsp实现新闻发布系统

2.16.KinEditor的使用

官方文档

把jsp,lib文件夹下的jar包添加到web/lib下。。

1.引入样式和js

<link rel="stylesheet" type="text/css" href="kindeditor-4.1.11-zh-CN/kindeditor/themes/default/default.css" />
<script type="text/javascript" src="kindeditor-4.1.11-zh-CN/kindeditor/kindeditor-all.js"></script>
<script type="text/javascript" src="kindeditor-4.1.11-zh-CN/kindeditor/kindeditor-all-min.js"></script>
<script type="text/javascript" src="kindeditor-4.1.11-zh-CN/kindeditor/lang/zh-CN.js"></script>

2.textarea

<textarea id="editor" name="editor" style="height:300px;width:600px"></textarea>

3.js创建

    $(function(){
KindEditor.create('textarea[id="editor"]',{
items:['source','undo','|']
})
})

4.items的可选项

source HTML代码
preview 预览
undo 后退
redo 前进
cut 剪切
copy 复制
paste 粘贴
plainpaste 粘贴为无格式文本
wordpaste 从Word粘贴
selectall 全选
justifyleft 左对齐
justifycenter 居中
justifyright 右对齐
justifyfull 两端对齐
insertorderedlist 编号
insertunorderedlist 项目符号
indent 增加缩进
outdent 减少缩进
subscript 下标
superscript 上标
formatblock 段落
fontname 字体
fontsize 文字大小
forecolor 文字颜色
hilitecolor 文字背景
bold 粗体
italic 斜体
underline 下划线
strikethrough 删除线
removeformat 删除格式
image 图片
flash Flash
media 视音频
table 表格
hr 插入横线
emoticons 插入表情
link 超级链接
unlink 取消超级链接
fullscreen 全屏显示
about 关于
print 打印
code 插入程序代码
map Google地图
baidumap 百度地图
lineheight 行距
clearhtml 清理HTML代码
pagebreak 插入分页符
quickformat 一键排版
insertfile 插入文件
template 插入模板
anchor 插入锚点

5.新闻管理

->添加新闻管理tree

->数据库建表,添加一些测试数据

create table news(id INT PRIMARY KEY AUTO_INCREMENT,newsTitle varchar(100),newsContent MEDIUMTEXT,pubDate DATETIME,newsAuthor varchar(30));

datetime 对应java中的java.sql.Timestamp类型,mediumtext对应java.lang.String

java数据类型与mysql数据类型对应表

->新闻管理页面设置

uncaught referenceError:KindEditor is not defined...

如果路径和引用js文件的顺序没有问题,还提示这个错误,那就是没有把jsp文件夹下的jar导入到项目工程中(web目录下的lib中)

2.17获取kindeditor的内容

关于sync()同步官方的解释是:

KindEditor的可视化操作在新创建的iframe上执行,代码模式下的textarea框也是新创建的,所以最后提交前需要将HTML数据同步到原来的textarea,KE.sync函数会完成这个动作。
KindEditor在默认情况下自动寻找textarea所属的form元素,找到form后onsubmit事件里添加KE.sync函数,所以用form方式提交数据,不需要手动执行KE.sync函数。

KindEditor图片上传的几个错误

upload_json.jsp的路径不正确,指定jsp/upload_json.jsp的正确路径

upload_json.jsp文件中savePath路径设置有问题,可以改成

这个可以自己输出看一下,另外新建attached文件夹应该建在工程目录下的\out\artifacts...目录下

上传图片不显示在(插入)编辑框(点击html源码可以查看到),谷歌浏览器提示Not allowed to load local resource

=。=我严重怀疑kindeditor真的好用吗?错误一大堆啊。。。。。

找了几个小时的资料。。stackoverflow上的讨论是这样

“Not allowed to load local resource: file:///C:…jpg” Java EE Tomcat

说是大多浏览器不支持从本地硬盘引入图片,然后有两种解决办法,其中一种是把直接使用路径转换为使用hash值

然后这篇博文提供了具体的思路

img标签可显示base64转码的图片。将本地图片先进行base64转码,之后再img标签中显示

但是我暂时用的是Kindeditor自带的upload_json.jsp处理上传图片的请求。。。

所以先在upload_json.jsp定义一个将url转换成base64编码的字符串

关于import sun.misc.BASE64Decoder无法找到

<%@ page import="java.util.Base64.Decoder" %>
<%@ page import="java.util.Base64.Encoder" %>
//将图片转化成base64编码
<%!
public String getBaseImg(String imgPath){
InputStream in = null;
byte[] data = null;
try {
in = new FileInputStream(imgPath);
data = new byte[in.available()];
in.read(data);
in.close();
} catch (IOException e) {
e.printStackTrace();
}
//进行Base64编码
Encoder encoder = Base64.getEncoder();
String encode=encoder.encodeToString(data);
return encode;
}
%>

然后。也不知道kindeditor在哪里实现往编辑框插入图片的。。那就反正saveUrl有个传值,所以在传值之前把它转换成base64

        JSONObject obj = new JSONObject();
obj.put("error", 0);
String absUrl=saveUrl + newFileName;
String base64Url="data:image/jpeg;base64,"+getBaseImg(absUrl);
obj.put("url",base64Url);
//obj.put("url", saveUrl + newFileName);
out.println(obj.toJSONString());

可算是显示出来了。。。

(之前试过把图片编程二进制流数据存储到数据库中,貌似也是一种思路)

java.lang.IllegalArgumentException: Request header is too large

把get请求改成post请求,然后就出现乱码了

临时解决办法是在tomcat的config目录下server.xml文件中修改

<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
maxPostSize="4194304"
maxHttpHeaderSize ="102400"
redirectPort="8443" />

2.19

maxHttpHeaderSize 设置太大的话,浏览器会卡,尤其是在上传图片的时候。。

json数据中不能有html格式字符串,里面的一些符号json不支持,放在请求头里也不对。那一种思路就是把字段转化成urlencode。。要用的时候再解码

感觉就先这样吧,什么时候特别闲了再完善一下 或者重写一遍

Servlet基础(java,idea)的更多相关文章

  1. Java Web 学习与总结(一)Servlet基础

    配置环境:https://www.cnblogs.com/qq965921539/p/9821374.html 简介: Servlet是Sun公司提供的一种实现动态网页的解决方案,在制定J2EE时引入 ...

  2. Java 之 Servlet 基础入门

    Servlet 一.什么是 Servlet 1.概念 Servlet:server applet,是指运行在服务器端的小程序 2.Servlet   servlet 就是一个接口,定义了 Java 类 ...

  3. JAVA遇见HTML——Servlet篇:Servlet基础

    代码实现: HelloServlet package servlet; import java.io.IOException; import java.io.PrintWriter; import j ...

  4. JSP数据交互(二)和Servlet基础

    01.Application原理与应用 01.application对象的作用域范围是整个应用服务,而它在应用中所承担的责任就类似于一个全局变量.只要服务启动,则application对象就会存在. ...

  5. Servlet基础(三) Servlet的多线程同步问题

    Servlet基础(三) Servlet的多线程同步问题 Servlet/JSP技术和ASP.PHP等相比,由于其多线程运行而具有很高的执行效率. 由于Servlet/JSP默认是以多线程模式执行的, ...

  6. Servlet基础(二) Servlet的生命周期

    Servlet基础(二) Servlet的生命周期 Servlet的生命周期可以分为三个阶段: 1.初始化阶段 2.响应客户请求阶段 3.终止阶段 Servlet的初始化阶段 在下列时刻Servlet ...

  7. Servlet基础(一) Servlet简介 关键API介绍及结合源码讲解

    Servlet基础(一) Servlet基础和关键的API介绍 Servlet简介 Java Servlet是和平台无关的服务器端组件,它运行在Servlet容器中. Servlet容器负责Servl ...

  8. 2 Servlet基础

    作者:禅楼望月(http://www.cnblogs.com/yaoyinglong) 1. 从浏览器访问Servlet的流程 刚才发现,这里的图片不能正常显示,所以我给个链接,大家可以下载下来看从浏 ...

  9. JSP/Servlet基础语法

    相关学习资料 http://my.oschina.net/chape/blog/170247 http://docs.oracle.com/cd/E13222_01/wls/docs81/webapp ...

  10. Servlet基础简单总结(上)

    Servlet基础一些简单总结(上): 1.Java Servlet是运行在Web服务器上的Java程序2.Java平台给Servlet开发者提供了强大的API/面向对象编程平台无关/强类型/垃圾回收 ...

随机推荐

  1. visio 2019 激活方法

    今日因工作需要使用visio,无奈下载2019版本需要激活,很多功能无法使用,最近在网上发现一个非常简单就是一个本地可执行脚本,本人已亲测完全激活成功,随分享给大家 复制下面代码: @echo off ...

  2. node - DeprecationWarning: Mongoose: `findOneAndUpdate()` and `findOneAndDelete()` without the `use

           1,  原因是因为:findOneAndUpdate()内部会使用findAndModify驱动,驱动即将被废弃,所以弹出警告!附上官方解释:Mongoose v5.5.8: Depre ...

  3. Day6-T1

    原题目 Describe:模拟大水题 code: #include<bits/stdc++.h> #define INF 214748364 #define eps 1e-9 #defin ...

  4. 007、Java中定义int型变量

    01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public ...

  5. 学会C#

    一.字符串插值 (String Interpolation) C# 6之前我们拼接字符串时需要这样 var Name = "Jack"; var results = "H ...

  6. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 字体图标(Glyphicons):glyphicon glyphicon-minus

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...

  7. Java多线程之以7种方式让主线程等待子线程结束

    记一次主线程等待子线程结束的多种方法的学习 在学习多线程时,最开始遇到的问题其实是"计算子线程运行时间",写到最后发现本文和标题更为符合,但是仍然基于问题:"在主线程中获 ...

  8. UVA - 1608 Non-boring sequences (分治)

    题意:如果一个序列的任意连续子序列中至少有一个只出现一次的元素,则称这个序列式为non-boring.输入一个n(n≤200000)个元素的序列A(各个元素均为109以内的非负整数),判断它是否无聊. ...

  9. 五十八、SAP中常用预定义数据类型

    一.SAP中常用预定义数据类型 注意事项如下: 1.默认的定义数据类型是CHAR. 2.取值的时候C型默认从左取,N型从右取,超过定义长度则截断. 3.C类型,可以赋值数值,也可以赋值字符,还可以混合 ...

  10. AS经济Essay写作想拿高分其实并不难!

    在ALEVEL经济学这门课中,最难的部分应该属于essay question部分,因为很多题目的问题方式是很多变的,考官对于考生的期望值要求也是非常高的. 很多学生觉得自己清楚题目中的知识点,但是最终 ...