最近跟着作了个黑马机构的javaweb旅游网站,在此记录下实现过程当中的笔记:
项目视频连接:www.bilibili.com/video/av680…css
总体技术选型:(mvc模式,但demo业务逻辑较简单,我的将业务层放在web层中了)html
web层:前端
- html+ajax:视图层
- Servlet+Filter:前端控制器/过滤器
- BeanUtils:实体数据封装
- jackSon:json序列化工具
- javaMail:邮件发送工具
- redis+jedis:nosql型数据库
DAO层:mysql5+druid链接池+JdbcTemplatejava
问题一:maven乱码问题
整个项目基于maven构建:控制台乱码、后台接收中文参数乱码。网上的资料比较多,解决方式我都有所尝试,最后这样解决:
mysql
问题二:post/get请求乱码问题web
对于post请求:ajax
对于get请求:redis
修改tomcat自身的配置文件:在conf/server.xml中将sql
<Connector connectionTimeout="50000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
复制代码
修改成 <Connector connectionTimeout="50000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8"/>
chrome
程序进行处理,例如:
String name = request.getParameter("name");
name = new String(name.getBytes("iso-8859-1"),"utf-8");
复制代码
统一解决方式:使用Javaweb中的过滤器Filter,采用装饰者模式进行编码统一解决post/get请求乱码问题。
/** * 采用装饰者模式对request进行加强,解决全站乱码问题,处理全部post/get请求 */
@WebFilter("/*")
public class CharacterFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest req, ServletResponse rep, FilterChain filterChain) throws IOException, ServletException {
//将父接口转为子接口
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) rep;
MyRequest myRequest = new MyRequest(request);
//处理响应乱码
response.setContentType("text/html;charset=utf-8");
filterChain.doFilter(myRequest, response);//此处传入加强后的request对象
}
@Override
public void destroy() {
}
/* 对request对象进行加强 重写getParameter与getParameterValues方法 */
class MyRequest extends HttpServletRequestWrapper {
HttpServletRequest request = null;
public MyRequest(HttpServletRequest request) {
super(request);
this.request = request;
}
//加强getParameter方法
@Override
public String getParameter(String name) {
String method = request.getMethod();
String value = null;
try {
request.setCharacterEncoding("utf-8");
value = request.getParameter(name);
if ("get".equalsIgnoreCase(method)) {
value = new String(value.getBytes("iso-8859-1"), "utf-8");
}
} catch (Exception e) {
e.printStackTrace();
}
return value;
}
//加强getParameterValues方法
@Override
public String[] getParameterValues(String name) {
String method = request.getMethod();
String[] values = null;
try {
request.setCharacterEncoding("utf-8");
values = request.getParameterValues(name);
if ("get".equalsIgnoreCase(method)) {
int i = 0;
for (String str : values) {
values[i++] = new String(str.getBytes("iso-8859-1"), "utf-8");
}
}
} catch (Exception e) {
e.printStackTrace();
}
return values;
}
}
}
复制代码
试着将注册页面的请求改成GET请求,执行完毕去数据库一看,纳尼,仍是乱码???一顿debug发现没问题呀,获取到的是中文,后来发现用的获取数据是request.getParameterMap与BeanUtils进行封装的,我没加强getParameterMap方法。
问题三:html之间参数传递及其乱码问题
关于js的三种编码解码方式:www.haorooms.com/post/js_esc…
//方式一:好比获取http://.....?rname=张三
var search = location.search;
var rname = search.split("=")[1]; // 切割字符串,拿到第二个值
//方式二:
var cid = getParameter("rname");
function getParameter(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
var r = location.search.substr(1).match(reg);
if (r != null) return (r[2]);
return null;
//解码
if (rname!=null) {
//url解码
rname = window.decodeURIComponent(rname);
}
}
复制代码
问题四:maven用tomcat7:run启动不起来:
<packing>pom</packing>
改为<packing>war</packing>
便可<groupId>zcc</groupId>
<artifactId>travel</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
复制代码
PS:打包类型有三种:jar、pom、war 若是是本身须要运行的项目则将其打包为war包便可。
问题五:浏览器缓存问题
时不时有遇到修改js界面的=没得反应,屡次刷新也无果,crtl+shift+delete清空浏览器缓存便可.
chrome取消浏览器缓存:在调试面板选择network选择Disable cache便可.
js相关:
小结: 因为跟老师作过一些开发,总体上来讲后台功能实现起来并不难,而且感受视频老师实现起来有那么些随意hhhhhh,前台界面平时写的太少,html+css+js学了忘,想本身调个啥样式必须得上网查。。。 视频老师开局就是干编码,直接导sql,导初始项目。本身整理了下需求提取出功能,在对他给的sql看了下,理解每一个字段的含义,看是如何表设计的。 整体来讲:学习了如何一我的从0到1开干作一个简单的小项目。