JavaWeb项目开发 | jstl标签
发表于
分类于
Java
,
JavaWeb项目开发
,
jstl标签
jstl标签
- jstl标签(替换jsp页面中的if、forjava代码)
- jstl标签测试
<%@page import="java.util.HashMap"%>
<%@page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
request.setAttribute("a", 1);
request.setAttribute("b", 4);
//在request域中设置复杂数据(ArrayList)
ArrayList<String> arr = new ArrayList<String>();
arr.add("zhangsan");
arr.add("lisi");
arr.add("wangwu");
request.setAttribute("list", arr);
//在request域中设置复杂数据(HashMap)
HashMap<String, String> map = new HashMap<String, String>();
map.put("a", "A");
map.put("b", "B");
map.put("c", "C");
request.setAttribute("map", map);
%>
<c:if test="${a>b}">
<font color="red">a大于b</font><br>
</c:if>
<c:if test="${a<b}">
<font color="green">a大于b</font><br>
</c:if>
<c:forEach begin="1" end="10" step="1" var="n">
${n}
</c:forEach><br>
<c:forEach items="${list}" var="s">
${s}
</c:forEach><br>
<c:forEach items="${map}" var="en">
${en.key}
${en.value}<br>
</c:forEach>
</body>
</html>s
- 效果
JavaWeb项目开发 | el表达式
发表于
分类于
Java
,
JavaWeb项目开发
,
el表达式
el表达式
- el表达式
- 测试el表达式
<%@page import="com.oracle.bean.Product"%>
<%@page import="java.util.HashMap"%>
<%@page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
//在request域中设置简单数据
request.setAttribute("a", 1);
request.setAttribute("b", 1);
//在request域中设置复杂数据(ArrayList)
ArrayList<String> arr = new ArrayList<String>();
arr.add("zhangsan");
arr.add("lisi");
arr.add("wangwu");
request.setAttribute("list", arr);
//在request域中设置复杂数据(HashMap)
HashMap<String, String> map = new HashMap<String, String>();
map.put("a", "A");
map.put("b", "B");
map.put("c", "C");
request.setAttribute("map", map);
//在request域中设置复杂数据(JavaBean)
Product p = new Product();
p.setId(1);
p.setPname("黄瓜");
p.setPrice(15.2);
p.setPdesc("黄瓜好吃,香");
request.setAttribute("p", p);
%>
<%=request.getAttribute("a") %>
${a+b}<br>
${list[0]}<br>
${map.a}<br>
${p.pname}<br>
</body>
</html>
- 效果
JavaWeb项目开发 | 使用jsp查询所有商品案例实现
发表于
分类于
Java
,
JavaWeb项目开发
,
jsp
,
使用jsp查询所有商品案例实现
JavaWeb项目开发 | jsp
发表于
分类于
Java
,
JavaWeb项目开发
,
jsp
jsp
- 什么是jsp?
java server pages(java服务器页面),本质上就是一个servlet,运行在服务器端. - 作用
可以在jsp嵌入java代码,动态展示数据 - jsp的特定内容
- 1 jsp的脚本
<%…%>:写java程序片段
<%=…%>:输出表达式(输出表达式不能以分号结尾) - 2 jsp的指令
(1)包含在.jsp文件的头部,声明当前页面的一些属性和行为
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
(2)taglib:导入标签库
s
<%@taglib prefix=”c” uri=”http://java.sun.com/jsp/jstl/core" %>
导入标签库后就可以使用jstl标签替换jsp中的if、for表达式。更多见jstl标签
3.3 jsp中的域对象
request:当前请求
session:当前会话
3.4 jsp的动作标签
语法:<jsp:动作标签 属性=”值”>
例如: 将其他页面包含到当前页面
<jsp:include page="/.."></jsp:inclue>
JavaWeb项目开发 | 使用filter解决项目编码问题
发表于
分类于
Java
,
JavaWeb项目开发
,
filter
,
filter解决项目编码问题
使用filter解决项目编码问题
在开发JavaWeb项目时,前端的编码使用的时utf-8编码方式,服务器端使用的是ISO-8859-1编码方式,故在开发中会出现乱码。
解决方案(使用filter)
实现EncodingFilter来解决项目乱码问题
乱码情形举例:
- 写一个b.html文件
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="/filtertest/demox?username=张三">向服务器发送请求</a>
</body>
</html>
- 再写一个servlet处理请求
package com.oracle.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class DemoxServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username = request.getParameter("username");
System.out.println(username);
response.getWriter().println("王五");
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
- servlet写到浏览器的内容和servlet从浏览器接收到的请求数据会出现乱码
EncodingFilter:
package com.oracle.filter;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Map;
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;
import javax.servlet.http.HttpServletRequestWrapper;
import javax.servlet.http.HttpServletResponse;
/**
* 统一编码
* @author Administrator
*
*/
public class EncodingFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException {
//1.强转
HttpServletRequest request=(HttpServletRequest) req;
HttpServletResponse response=(HttpServletResponse) resp;
response.setContentType("text/html;charset=utf-8");
//2.放行
chain.doFilter(new MyRequest(request), response);
}
@Override
public void destroy() {
// TODO Auto-generated method stub
}
}
class MyRequest extends HttpServletRequestWrapper{
private HttpServletRequest request;
private boolean flag=true;
public MyRequest(HttpServletRequest request) {
super(request);
this.request=request;
}
@Override
public String getParameter(String name) {
if(name==null || name.trim().length()==0){
return null;
}
String[] values = getParameterValues(name);
if(values==null || values.length==0){
return null;
}
return values[0];
}
@Override
/**
* hobby=[eat,drink]
*/
public String[] getParameterValues(String name) {
if(name==null || name.trim().length()==0){
return null;
}
Map<String, String[]> map = getParameterMap();
if(map==null || map.size()==0){
return null;
}
return map.get(name);
}
@Override
/**
* map{ username=[tom],password=[123],hobby=[eat,drink]}
*/
public Map<String,String[]> getParameterMap() {
/**
* 首先判断请求方式
* 若为post request.setchar...(utf-8)
* 若为get 将map中的值遍历编码就可以了
*/
String method = request.getMethod();
if("post".equalsIgnoreCase(method)){
try {
request.setCharacterEncoding("utf-8");
return request.getParameterMap();
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}else if("get".equalsIgnoreCase(method)){
Map<String,String[]> map = request.getParameterMap();
if(flag){
for (String key:map.keySet()) {
String[] arr = map.get(key);
//继续遍历数组
for(int i=0;i<arr.length;i++){
//编码
try {
arr[i]=new String(arr[i].getBytes("iso8859-1"),"utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
}
flag=false;
}
//需要遍历map 修改value的每一个数据的编码
return map;
}
return super.getParameterMap();
}
}
配置web.xml文件:
<!-- 配置项目编码 -->
<filter>
<filter-name>EncodingFilter</filter-name>
<filter-class>com.oracle.filter.EncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
JavaWeb项目开发 | filter
发表于
分类于
Java
,
JavaWeb项目开发
,
filter
filter
filter
- filter是什么?
servlet2.3后增加的新功能,运行在服务器端的程序,先于与之相关的servlet或者jsp页面之前运行 - 作用
过滤请求和相应 - 应用场景
(1)自动登录
(2)统一编码
(3)过滤特殊符号或敏感词filter程序编写
- 编写一个类
- 1 实现一个Filter接口
- 2 重写接口所有的方法
- 编写配置文件
- 1 注册filter
- 2 绑定路径
- 2.1 完全匹配 例如:/demo1
- 2.2 目录匹配 例如: /* 过滤所有请求
案例
- 项目目录
- 代码
Demo1Filter
package com.oracle.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;
public class Demo1Filter implements Filter{
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
// TODO Auto-generated method stub
System.out.println("Demo1Filter过滤到请求.../demo1");
//放行
chain.doFilter(request, response);
}
@Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
}
web.xml
Demo1Servlet
package com.oracle.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class Demo1Servlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("Demo1Servlet接收到请求.../demo1");
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
效果
JavaWeb项目开发 | session
发表于
分类于
Java
,
JavaWeb项目开发
,
session
session
session
- 什么是session?
服务器端会话技术 - api
(1)session的获取
HttpSession session=request.getSession()
(2)session属性操作
session.setAttribute("attr_name", attr_value);//设置属性
session.getAttribute(attr_name);//获取属性
a.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="/sessiontest/demo1">访问demo1</a>
<a href="/sessiontest/demo2">访问demo2</a>
<a href="/sessiontest/demo3">访问demo3</a>
</body>
</html>
Demo1Servlet
package com.oracle;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class Demo1Servlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//request.setAttribute("username", "zhangsan");
//请求转发
//request.getRequestDispatcher("/demo2").forward(request, response);
//创建session
HttpSession session = request.getSession();
System.out.println("Demo1Servlet增加username属性,值为lisi");
session.setAttribute("username", "lisi");
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
Demo2Servlet
package com.oracle;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class Demo2Servlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//String username = (String)request.getAttribute("username");
//System.out.println(username);//null 一次会话当中的第二次请求不能得到第一次请求的数据
HttpSession session = request.getSession();
String username = (String)session.getAttribute("username");
System.out.println("Demo2Servlet:" + username);
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
Demo3Servlet
package com.oracle;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class Demo3Servlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();
String username = (String)session.getAttribute("username");
System.out.println("Demo2Servlet:" + username);
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
效果
JavaWeb项目开发 | 注册功能实现
发表于
分类于
Java
,
JavaWeb项目开发
,
注册功能实现
JavaWeb项目开发 | request域对象
request域对象
场景:有时候我们发送一个请求然后由一个对应的servlet处理请求,接着我们需要将当前的request对象的一些信息传递到另一个servlet或者jsp页面。
方法:
- 请求转发
假设当前处理请求的是Demo2Servlet(/demo2),需要传递信息到Demo3Servlet(/demo3)中。
request.getRequestDispatcher("/demo3").forward(request, response);
然后我们就可以在Demo3Servlet中获取request中的信息。
package com.oracle;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Demo3Servlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username = request.getParameter("username");
System.out.println(username);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
- 使用request域对象(使用request的setAttribute()方法设置其他信息并传递到Demo3Servlet中)
package com.oracle;
import java.io.IOException;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Demo2Servlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setAttribute("flag", 1);
request.getRequestDispatcher("/demo3").forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
- 在Demo3Servlet中获取请求中的信息或者在Demo2Servlet中设置的新信息)
package com.oracle;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Demo3Servlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username = request.getParameter("username");
System.out.println(username);
//request.removeAttribute("flag");//如果在获取设置的属性前将其删除,后面将获取不到该属性
Integer a = (Integer)request.getAttribute("flag");
System.out.println(a);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}