Java中的Servlet与Jsp

在java中需要实现页面与Servlet的数据传递:

1、创建web包,存放Servlet
2、为了安全,创建公共服务层接口BaseService
3、创建service包,存放服务层接口,当然肯定有实现类包
4、创建servlet,配置web.xml
5、创建文件夹jsp,并新建jsp页面
6、编写servlet里doget、dopost方法
一、创建web包后,想到安全,所以去创建公共的服务层接口

和BaseDao公共数据操作方法的接口差不多,在服务层做一些优化,例如返回修改成功。
创建一个序列化的接口:T表示实体类,K表示实体类里的主键类型(表内的标识符)

public interface BaseService<T,K extends Serializable> {
		List<T> selectAll();	//查询表内的所有数据,并返回到实体类集合list中
		T findById(int id);	//根据id查询出数据,返回到实体类T中
		String update(T t);	//得到一个实体类对其进行修改操作
		String insert(T t);	//得到一个实体类对其进行新增操作
		String deleteById(int id);	//根据一个id查询出数据,对其进行删除操作
}
二、创建service包后:

service包内的接口就是因dao包内的接口而存在,所以创建IUserService,里面和IUserDao接口一样,除非要进行返回值的优化等;

public interface IUserService extends BaseService<User, Integer> {
		User findByUsernameAndPassword(String username, String password);
}

有了接口,肯定需要对应的实现类,存放在service.impl包内,创建UserServiceImpl实现类,实现接口IUserService。
实现类里:根据IUserDao接口new出实现类UserDaoImpl();

private IUserDao userDao=new UserDaoImpl();

方法更是简单,例如:

public List<User> selectAll() {
	return userDao.selectAll();
}

对于增删改操作,例如新增:

	public String update(User t) {//返回字符串
		if (userDao.update(t)>0) {//返回值为新增改变的行数,大于0都是新增成功
			return "修改成功!";
		}
		else {
			return "修改失败!";
		}
	}

其余都是如此。

三、在web包内创建UserServlet类,继承HttpServle,实现doget,dopost方法;

之后找到WebRoot目录下的WEB-INF目录下的web.xml进行配置。

<display-name></display-name>下配置<servlet></servlet>标签

在标签内需要配置两个参数:
和自己创建的Servlet名称一样

<servlet-name>UserServlet</servlet-name>

文件所在路径

  	<servlet-class>com.test.web.UserServlet</servlet-class>

最后配置mapping:

 	<servlet-mapping>

和自己创建的Servlet名称一样

  		<servlet-name>UserServlet</servlet-name>

网页访问的路径,可以随意写,但建议有规则的写

  		<url-pattern>/servlet/UserServlet</url-pattern>
 	</servlet-mapping>
四、配置完后,创建jsp文件夹,在内创建demo.jsp页面:

可以使用JSP 标准标签库:

 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

Java Server Pages 标准标签库 (JSTL) 包含的各种标签可用于 JSP 页面中。
JSTL 的优点:
提供一组标准标签
可用于编写各种动态 JSP 页面
用于访问数据库、有条件地执行代码和支持国际化
还有可以使用 EL表达式:
EL 为表达式语言(Expression Language),可以简化对变量的对象的访问
语法 : E L E x p r e s s i o n 所 有 的 表 达 式 以 ” {EL Expression}所有的表达式以” ELExpression{”开始,以”}”结束。
使用c标签获取路径:

<c:set value="${pageContext.request.contextPath}" scope="page" var="ctx"></c:set>
五、编写servlet里doget、dopost方法

1、doget方法可直接使用doPost(req, resp);传到dopost执行请求
2、在dopost内查询出所有数据,并传到页面:
//实例化服务层实现类

UserServiceImpl impl=new UserServiceImpl();

//实例化一个User实体类集合
List<User> users= new ArrayList<User>();
		users = impl.selectAll();//调用服务层查询user表所有数据的方法
User user = new User();//实例化一个实体类
		if (req.getParameter("username")!=null) {//判断姓名不为空,添加数据进实体类
			user.setUsername(req.getParameter("username"));
//不止名字,其余的都可以进行判断不为空才添加
			user.setUserid(Integer.parseInt(req.getParameter("userid")));
	user.setPassword(req.getParameter("password"));
	users.add(user);//将实体类添加进集合
}
req.setAttribute("users",users);//在这个请求中存储一个属性users
//转发到页面 转发属性(数据)共享  请求地址不变
req.getRequestDispatcher("/jsp/demo.jsp").forward(req, resp);
在这个请求中存储一个属性
//重定向 转发属性(数据)不共享  请求地址变
//resp.sendRedirect("/20190511/servlet/UserServlet");

3、在demo.jsp页面中调用users里数据

<table border="1px" width="300px" height="100px" bgColor="#ffff80"
		align="center">
		<tbody>
			<tr><th>用户id</th><th>姓名</th><th>密码</th></tr>
			<tr>
使用c:forEach标签 遍历用el表达式获取到的users,遍历的每一个都赋值给变量user
				<c:forEach items="${users}" var="user">
					<tr>
						<td>${user.userid}</td>
						<td>${user.username }</td>
						<td>${user.password }</td>
					</tr>
				</c:forEach>
		</tbody>
</table>

除了普通的变量还有分割遍历,将items内的字符串,根据delims内的字符串分割,并赋值给变量var内的item,使用el表达式输出

<c:forTokens items="A,B,C,D,E,F,G" delims="," var="item">
	  分割${item}<br>
</c:forTokens>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值