2019/1/22敲JAVA时小伙伴们遇到的坑

一、关于绝对路径

一般服务器内部跳转是相对路径,其他的都是绝对路径比较好,这样报错比较少。而关于绝对路径,一般就在相对路径前加上绝对地址。
过滤器 :

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

大多数用道的:

  1. 用循环
<c:forEach items="${list }" var="hero" varStatus="st">
</c:forEach>
  1. 判断
<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是对象!是引用类型!不可以用 == 来进行比较!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值