目录
一、关于绝对路径
一般服务器内部跳转是相对路径,其他的都是绝对路径比较好,这样报错比较少。而关于绝对路径,一般就在相对路径前加上绝对地址。
过滤器 :
package com.dodoke.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
/**
* Servlet Filter implementation class EncodingFilter
*/
public class EncodingFilter implements Filter {
/**
* Default constructor.
*/
public EncodingFilter() {
// TODO Auto-generated constructor stub
}
/**
* @see Filter#destroy()
*/
public void destroy() {
// TODO Auto-generated method stub
}
/**
* @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
*/
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
// place your code here
//这部分是网上copy的,也不用记,记不住的
HttpServletRequest request = (HttpServletRequest) req;
String basePath = request.getScheme() + "://" + request.getServerName() + (request.getServerPort() == 80 ? "" : ":" + request.getServerPort()) + request.getContextPath();
request.setAttribute("basePath", basePath);
System.out.println(basePath);
// pass the request along the filter chain
chain.doFilter(req, res);
}
/**
* @see Filter#init(FilterConfig)
*/
public void init(FilterConfig fConfig) throws ServletException {
// TODO Auto-generated method stub
}
}
XML:
<filter>
<filter-name>EncodingFilter</filter-name>
<filter-class>com.dodoke.filter.EncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
问题
在html中,外部引用的CSS和JS文件的地址全都是基于html文件的位置而写的相对地址(像这样:…/css/style.css)。当我们把html原封不动搬到JSP上时,常会出现外部的各种引用地址不对的问题。
原因
其中很可能的一个原因,就是这个相对地址,相对的对象不再是前身是html的JSP文件了,而是根据JSP文件中basePath变量而定的。basePath变量是新建一个JSP时,模板中预先设置的一个String的变量。
我们可以看到,basePath是通过request设置的一个变量,代表了当前网站的根目录的地址(像这样的:=http://localhost:8080/test/)。
解决
所以我们需要重新设置相对地址,改为basePath为相对地址的参考位置(原点),按此路径引用外部文件。
二、关于JSTL
大多数用道的:
- 用循环
<c:forEach items="${list }" var="hero" varStatus="st">
</c:forEach>
- 判断
<c:if test="${i == 1}">
</c:if>
然后用el表达事来传值
三、关于转义字符
html中标签内传值,无法传字符串,因此要用转义字符,光用纯粹的“++”是没有用的,如:
<a href="javascript:upbtn(\''+hero.name +'\','+hero.hp +','+hero.damage+')">
四、JSP带参传值的坑
1.html标签中带有参数
错误写法:
<% int i=1; %>
<a href='index.jsp?id=i'>lemon</a>
正确写法:
<% int i=4; %>
<a href='index.jsp?id=<%=i %>'>lemon</a>
2.小脚本中写HTML并带参数:
<% int i=10;
out.println("<a href='index.jsp?id="+i+"'>lemon</a> ");
%>
五、eclipse设置字符编码后,控制台依旧乱码的解决方法
1.首先你要确定是否真的改变为文件的指定编码格式;
2.若没有,在代码区域右键 -> run as -> run configurations -> common(右侧) -> encoding 确认默认代码格式是否正确;
3.跑一遍试试;
4.若还不行,则将文件重新编译(因为文件可能你之前编译保存过,没反应过来),比如多敲个空格,再编译保存,就可以了。
六、获取主键报错
原因是:貌似从5.1.7版本之后的mysql-connector增加了返回GeneratedKeys的条件,如果需要返回GeneratedKeys,则PreparedStatement需要显示添加一个参数Statement.RETURN_GENERATED_KEYS。不过直接报错,不向下兼容也太不厚道了。
七、JSP传值问题的坑
1.jsp:param如下:
<jsp:forward page="login.jsp?">
<jsp:param value="LOGIN_ERROR_01" name="error"/>
</jsp:forward>
在jsp:param 中的value属性的值可以外部引用可以内部定义,但是要注意格式和引用!否则会报错!
2.jsp:forward如下:
<jsp:forward page="null.jsp"></jsp:forward>
在<jsp:forward page="?"></jsp:forward>代码块中间不能空行!!!!!空行会默认有传值代码没写!!!
八、判断两个String是否相等
String的Equals方法:
equals方法是用于判断String中的值是否与什么值相等,注意!当String为null时则会报错!String 使用equals方法最好先进行非空验证。
另外!String是对象!是引用类型!不可以用 == 来进行比较!