问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

struts2连接MySQL出现HTTP Status 500 问题

发布网友 发布时间:2022-04-10 20:25

我来回答

5个回答

懂视网 时间:2022-04-11 00:47

   1.1在pom.xml中导入相关依赖

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
 <modelVersion>4.0.0</modelVersion>
 <groupId>com.ht</groupId>
 <artifactId>T224_struts</artifactId>
 <packaging>war</packaging>
 <version>0.0.1-SNAPSHOT</version>
 <name>T224_struts Maven Webapp</name>
 <url>http://maven.apache.org</url>
 <dependencies>
 <dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>4.12</version>
  <scope>test</scope>
 </dependency>
 <dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>javax.servlet-api</artifactId>
  <version>4.0.1</version>
  <scope>provided</scope>
 </dependency>
 <dependency>
  <groupId>org.apache.struts</groupId>
  <artifactId>struts2-core</artifactId>
  <version>2.5.13</version>
 </dependency>
 <dependency>
  <groupId>javax.servlet.jsp</groupId>
  <artifactId>jsp-api</artifactId>
  <version>2.2.1-b03</version>
  <scope>provided</scope>
 </dependency>
 <dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <version>5.1.44</version>
 </dependency>
 <dependency>
  <groupId>jstl</groupId>
  <artifactId>jstl</artifactId>
  <version>1.2</version>
 </dependency>
 <dependency>
  <groupId>taglibs</groupId>
  <artifactId>standard</artifactId>
  <version>1.1.2</version>
 </dependency>
 <!-- 5.4、tomcat-jsp-api -->
 <dependency>
  <groupId>org.apache.tomcat</groupId>
  <artifactId>tomcat-jsp-api</artifactId>
  <version>8.0.47</version>
 </dependency>
 </dependencies>
 <build>
 <finalName>T224_struts</finalName>
 <plugins>
  <plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>
  <version>3.7.0</version>
  <configuration>
   <source>1.8</source>
   <target>1.8</target>
   <encoding>UTF-8</encoding>
  </configuration>
  </plugin>
 </plugins>
 </build>
</project>

  二:导入分页相关的通用pageBean类,z.tld,并且配置web.xml

  2.1 导入pageBean类

package com.crud.tag;

import java.io.IOException;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.BodyTagSupport;

import com.crud.util.PageBean;
/**
 * 分页通用类
 * @author Administrator
 */
public class PageTag extends BodyTagSupport {

 private static final long serialVersionUID = 1L;
 private PageBean pageBean;
 public PageBean getPageBean() {
 return pageBean;
 }
 public void setPageBean(PageBean pageBean) {
 this.pageBean = pageBean;
 }
 @Override
 public int doStartTag() throws JspException {
 JspWriter out = pageContext.getOut();
 try {
  out.print(toHTML());
 } catch (IOException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 }
 return super.doStartTag();
 }
 private String toHTML() {
 StringBuffer sb = new StringBuffer();
 /*
  * 拼接向后台提交数据的form表单
  * 注意:拼接的form表单中的page参数是变化的,所以不需要保留上一次请求的值
  */
 sb.append("<form id=‘pageBeanForm‘ action=‘"+pageBean.getUrl()+"‘ method=‘post‘>");
 sb.append("<input type=‘hidden‘ name=‘page‘>");
 Map<String, String[]> parameterMap = pageBean.getParameterMap();
 if(parameterMap != null && parameterMap.size() > 0) {
  Set<Entry<String, String[]>> entrySet = parameterMap.entrySet();
  for (Entry<String, String[]> entry : entrySet) {
  if(!"page".equals(entry.getKey())) {
   String[] values = entry.getValue();
   for (String val : values) {
   sb.append("<input type=‘hidden‘ name=‘"+entry.getKey()+"‘ value=‘"+val+"‘>");
   }
  }
  }
 }
 sb.append("</form>");
 
 /*
  * 展示的分页条
  */
 sb.append("<div style=‘text-align: right; font-size: 12px;‘>");
 sb.append("每页"+pageBean.getRows()+"条,共"+pageBean.getTotal()+"条,第"+pageBean.getPage()+"页,共"+pageBean.getMaxPage()+"页  <a href=‘javascript:gotoPage(1)‘>首页</a>  <a");
 sb.append(" href=‘javascript:gotoPage("+pageBean.previousPage()+")‘>上一页</a>  <a");
 sb.append(" href=‘javascript:gotoPage("+pageBean.nextPage()+")‘>下一页</a>  <a");
 sb.append(" href=‘javascript:gotoPage("+pageBean.getMaxPage()+")‘>尾页</a>  <input type=‘text‘");
 sb.append(" id=‘skipPage‘");
 sb.append(" style=‘text-align: center; font-size: 12px; width: 50px;‘>  <a");
 sb.append(" href=‘javascript:skipPage()‘>Go</a>");
 sb.append("</div>");
 
 /*
  * 给分页条添加与后台交互的js代码
  */
 sb.append("<script type=‘text/javascript‘>");
 sb.append(" function gotoPage(page) {");
 sb.append("  document.getElementById(‘pageBeanForm‘).page.value = page;");
 sb.append("  document.getElementById(‘pageBeanForm‘).submit();");
 sb.append(" }");
 sb.append(" function skipPage() {");
 sb.append("  var page = document.getElementById(‘skipPage‘).value;");
 sb.append("  if(!page || isNaN(page) || parseInt(page)<1 || parseInt(page)>"+pageBean.getMaxPage()+"){");
 sb.append("  alert(‘请输入1~N的数字‘);");
 sb.append("  return;");
 sb.append("  }");
 sb.append("  gotoPage(page);");
 sb.append(" }");
 sb.append("</script>");
 return sb.toString();
 }
}

  2.2  z.tld文件

<?xml version="1.0" encoding="UTF-8" ?>

<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
 version="2.0">
 
 <description>zking 1.1 core library</description>
 <display-name>zking core</display-name>
 <tlib-version>1.1</tlib-version>
 <short-name>z</short-name>
 <uri>/zking</uri>

 <tag>
 <name>page</name>
 <tag-class>com.crud.tag.PageTag</tag-class>
 <body-content>JSP</body-content>
 <attribute>
 <name>pageBean</name>
 <required>true</required>
 <rtexprvalue>true</rtexprvalue>
 </attribute>
 </tag>
 
</taglib>

  2.3 配置web.xml

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
 version="3.1">

 <display-name>Archetype Created Web Application</display-name>
 <filter>
 <filter-name>encodingFiter</filter-name>
 <filter-class>com.crud.util.EncodingFiter</filter-class>
 </filter>
 <filter-mapping>
 <filter-name>encodingFiter</filter-name>
 <url-pattern>/*</url-pattern>
 </filter-mapping>

 <filter>
 <filter-name>struts</filter-name>
 <!-- 相对于中央控制器,过滤请求 -->
 <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
 </filter>

 <filter-mapping>
 <filter-name>struts</filter-name>
 <url-pattern>*.action</url-pattern>
 </filter-mapping>
</web-app>

三:在Mysql中设计数据库

技术图片

   3.1 在项目中配置与mysql数据库连接

 数据库用户名和密码是不一样的看你们自己怎么设置的

  技术图片

 

四:编写Dao层去访问数据库

package com.crud.dao;
import java.sql.SQLException;
import java.util.List;
import com.crud.entity.Class;
import com.crud.util.BaseDao;
import com.crud.util.EntityBaseDao;
import com.crud.util.PageBean;
import com.crud.util.StringUtils;
/**
 * 班级dao方法类
 * @author Administrator
 */
public class ClassDao extends EntityBaseDao<Class>{
/**
 * 查询分页方法,查询数据公用方法
 * @param c
 * @param paBean
 * @return
 * @throws InstantiationException
 * @throws IllegalAccessException
 * @throws SQLException
 */
 public List<Class> list(Class c,PageBean paBean) throws InstantiationException, IllegalAccessException, SQLException{
 String sql="select * from struts_class where true ";
 String classname=c.getClassname();
 int cid=c.getCid();
 if (cid!=0) {
  sql +=" and cid = "+cid;
 }
 if (StringUtils.isNotBlank(classname)) {
  sql+=" and classname like ‘%"+classname+"%‘";
 }
 return super.executeQuery(sql,paBean,Class.class);
 }
 
 /**
 * 新增方法
 * @param c
 * @return
 * @throws NoSuchFieldException
 * @throws SecurityException
 * @throws IllegalArgumentException
 * @throws IllegalAccessException
 * @throws SQLException
 */
 public int add(Class c) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, SQLException {
 String sql="insert into struts_class values(?,?,?)";
 return super.executeUpdate(sql, new String[] {"classname","cname","upload"},c);
 }
 /**
 * 删除方法
 * @param c
 * @return
 * @throws NoSuchFieldException
 * @throws SecurityException
 * @throws IllegalArgumentException
 * @throws IllegalAccessException
 * @throws SQLException
 */
 public int del(Class c) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, SQLException {
 String sql="delete from struts_class where cid=?";
 return super.executeUpdate(sql, new String[] {"cid"},c);
 }
 /**
 * 修改方法
 * @param c
 * @return
 * @throws NoSuchFieldException
 * @throws SecurityException
 * @throws IllegalArgumentException
 * @throws IllegalAccessException
 * @throws SQLException
 */
 public int edit(Class c) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, SQLException {
 String sql="update struts_class set classname=?,cname=?,upload=? where cid=?";
 return super.executeUpdate(sql, new String[] {"cid","classname","cname","upload"},c);
 }
}

 五:编写web层去调用dao层的方法返回数据给前台

ClassAction 类
package com.crud.web;
import java.sql.SQLException;
import java.util.List;
import com.crud.dao.ClassDao;
import com.crud.entity.Class;
import com.crud.util.PageBean;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
/**
 * 班级web层
 * @author Administrator
 */
public class ClassAction extends BaseAction implements ModelDriven<Class>{

 private ClassDao cldao=new ClassDao();
 private Class cls=new Class();
 
 public String list() {
 PageBean pageBean=new PageBean();
 pageBean.setRequest(request);
 try {
  List<Class> list = this.cldao.list(cls, pageBean);
  request.setAttribute("mylist", list);
  request.setAttribute("pageBean", pageBean);
 } catch (InstantiationException | IllegalAccessException | SQLException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 }
 return "list";
 }
 /**
 * 跳转新增修改页面的公用方法
 * @return
 * @throws SQLException 
 * @throws IllegalAccessException 
 * @throws InstantiationException 
 */
 public String preSave() throws InstantiationException, IllegalAccessException, SQLException {
 if (cls.getCid()!=0) {
  Class cl = this.cldao.list(cls, null).get(0);
  request.setAttribute("cls",cl);
 }
 return "preSave";
 }
 /**
 * 新增
 * @return
 */
 public String add() {
 try {
  result = this.cldao.add(cls);
 } catch (Exception e) {
  // TODO: handle exception
  e.printStackTrace();
 }
 return "toList";
 }
 /**
 * 删除
 * @return
 */
 public String del() {
 try {
  this.cldao.del(cls);
 } catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException
  | SQLException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 }
 return "toList";
 }
 /**
 * 修改
 * @return
 */
 public String edit() {
 try {
  this.cldao.edit(cls);
 } catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException
  | SQLException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 }
 return "toList";
 }
 @Override
 public Class getModel() {
 // TODO Auto-generated method stub
 return null;
 }
}

  这里实现了一个BaseAction 类

package com.crud.web;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;

/**
 * 每一个开发的子控制器要用的属性都定义在通用的action中。
 * @author Administrator
 *
 */
public class BaseAction implements ServletRequestAware, ServletResponseAware{
 /**
 * 为了传值使用
 */
 protected HttpServletResponse response;
 protected HttpServletRequest request;
 protected HttpSession session;
 protected ServletContext application;
 
 /**
 * 为了配置跳转页面所用
 */
 protected final static String SUCCESS = "success";
 protected final static String FAIL = "fail";
 protected final static String LIST = "list";
 protected final static String ADD = "add";
 protected final static String EDIT = "edit";
 protected final static String DETAIL = "detail";
 
 /**
 * 具体传值字段 后端向jsp页面传值所用字段
 */
 protected Object result;
 protected Object msg;
 protected int code;

 public Object getResult() {
 return result;
 }

 public Object getMsg() {
 return msg;
 }

 public int getCode() {
 return code;
 }

 @Override
 public void setServletResponse(HttpServletResponse arg0) {
 this.response = arg0;
 
 }
 @Override
 public void setServletRequest(HttpServletRequest arg0) {
 this.request = arg0;
 this.session = arg0.getSession();
 this.application = arg0.getServletContext();
 }
}

  六:配置struts_sy.xml文件

 <!-- *代表你要调用的方法 -->
 <action name="/cls_*" class="com.crud.web.ClassAction" method="{1}">
  <result name="list">/clsList.jsp</result>
  <result name="preSave">/clsupdate.jsp</result>
  <result name="toList" type="redirectAction">/cls_list</result>
 </action>

  七:连接前端显示数据并且调用实现效果

  ClsList.jsp(显示数据并且调用Crud)

<%@ page language="java" contentType="text/html; charset=UTF-8"
 pageEncoding="UTF-8"%>
 <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
 <%@taglib prefix="z" uri="/zking" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>班级</h2><br>
 <form action="${pageContext.request.contextPath }/sy/cls_list.action" method="post">
 班级名:<input type="text" name="classname">
  <input type="submit" value="确定">
 </form>
 <a href="${pageContext.request.contextPath }/sy/cls_preSave.action">新增</a>
 <table border="1" width="100%">
 <tr>
  <td>编号</td>
  <td>班级名</td>
  <td>学生名</td>
  <td>图片</td>
  <td>操作</td>
 </tr> 
 <c:forEach items="${mylist }" var="c">
 <tr>
  <td>${c.cid }</td>
  <td>${c.classname }</td>
  <td>${c.cname}</td>
  <td>${c.upload }</td>
  <td>
  <a href="${pageContext.request.contextPath }/sy/cls_preSave.action?cid=${c.cid}">修改</a>  
  <a href="${pageContext.request.contextPath }/sy/cls_del.action?cid=${c.cid}">删除</a>  
   <a href="${pageContext.request.contextPath }/sy/cls_upload.action?cid=${c.cid}">图片上传</a>  
  </td>
 </tr> 
 </c:forEach>
 </table>
 <z:page pageBean="${pageBean }"></z:page>
</body>
</html>

  Clsupdate.jsp(新增与修改公用界面)

<%@ page language="java" contentType="text/html; charset=UTF-8"
 pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="${pageContext.request.contextPath}${cls.classname ==null ? ‘/sy/cls_add.action‘ :‘/sy/cls_edit.action‘}" method="post">
 cid:<input type="text" name="cid" value="${cls.cid}"><br>
 classname:<input type="text" name="classname" value="${cls.classname }"><br>
 cname:<input type="text" name="cname" value="${cls.cname }"><br>
 upload:<input type="text" name="upload" value="${cls.upload }"><br>
 <input type="submit" value="提交">
</form>
</body>
</html>

  最后:展示效果

技术图片

 

 

 谢谢观看!今天的分享到此结束!

Struts2连接Mysql的Crud使用

标签:lock   并且   unit   sch   filter   sea   ==   Stub   uri   

热心网友 时间:2022-04-10 21:55

你的数据库连接函数写在Action中,这是跟数据库交互的部分。Action中不允许出现业务逻辑。
你说的错误在 st = (Statement) con.createStatement(); 搞错了,上面都说了调用action函数则出错:function.insert.execute(insert.java:23),执行插入的时候错了。语法错误,没试过插入会不会返回插入数据的条数,可以去掉试试。excute执行方法不止一个好像。错在int count = st.executeUpdate(sql); 你用debug模式运行下,打断点试试。追问那么数据库连接函数该写哪呢?Action函数的内容的*有哪些?我其实没有一点JavaWeb基础,但是老师要求做一个小实验,要求利用struts2写个能对数据库进行增删查等操作的小程序。

追答这个很简单啊,你应该知道Action,po,service,这些吧。你可以去查一下java的JDBC部分代码怎么写,而,service,action就是方法的调用而已啊,action中定义一个service的实体,这样就可以调用service里的方法了,service里面定义一个的实体,service中不就可以调用中的方法吗,再和数据库交互,中写的就是jdbc的代码。你要是不会就加我1169095671,百度知道是学不到很具体的东西的。

热心网友 时间:2022-04-10 23:13

把错误贴出来看看。。。估计jsp有问题。。。。追问message

description The server encountered an internal error () that
prevented it from fulfilling this request.

exception
java.lang.NullPointerException
function.insert.execute(insert.java:23)

热心网友 时间:2022-04-11 00:47

我测试通过了呀,所以应该不是这里的错误了追问你是单独测试这个文件么?单独测试时确实没问题,但是利用struts2搭建好框架,设置好struts2.xml和web.xml,利用index.jsp访问数据库的时候就出错

热心网友 时间:2022-04-11 02:39

是不是数据库没开启服务?追问应该不是这个问题,因为我单独测试这个文件的时候没问题。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
工会主席权限 魅族坏了怎么办 网上买的魅族手机坏了可以保修吗?自己弄坏的,手机花屏,修要多少钱... 从梁溪路公益路公交站到建筑路夏联福记酒店坐什么公交最方便? 退货保和运费险有什么不同 现代Logo设计趋势是什么 优秀的logo设计有什么特征? 哪些品牌的鱼竿质量好 光威悟法师和达瓦一击哪个好 有人了解大卫地板吗?怎么样呢? 花岗岩常用在什么地方? 花岗岩的作用 如何用Struts2实现数据库的链接 有哪些描写秋天的优美句子? 写描写秋天的句子 秋季的描写的优美句子 描写秋季的句子 历史中,究竟为什么明朝宗室的名字那么奇怪? 明朝宗室的名字那么奇怪,为什么有很多化学元素? 分期免息是什么意思? 网站建设的周期涉及哪些方面?做一个新网站要多长时间? 深圳建网站公司在那 深圳建设网站 四个灯的浴霸怎样安装 在百度,像这样直接输入网址:www.深圳网站建设.net,也直接找不到这个网站.怎么回事呢? 求一份浴霸灯4~5开关接线图! 深圳网站建设需要做哪些规划 浴室多功能取暖器,带通风,一个照明灯,四个取暖灯,求开关详细接法,求接线图 浴霸灯四根线接五根线怎么个接法? Excel如何用代码批量打印? 求好心人分享野王免费在线观看资源 野王19集高清在线观看 盘点权相佑最新主演的电视剧,【免费高清】在线观看百度网盘资源 长相一样的女主代替她做首相夫人是什么电影 《面条之神》免费在线观看完整版高清,求百度网盘资源 跪求秀爱演的电影电视剧有哪些,【在线观看】免费百度云资源 野王 朱多海最终结局真是让我大跌眼镜,太不爽了,一个结局有可能毁了一步情节紧凑的电视剧 struts2注册需连接数据库 蒜蓉粉丝虾的做法有哪些? 粉丝香辣虾的做法 粉丝虾的做法,粉丝虾怎么做好吃,粉丝虾的家常 粉丝虾怎么做好吃又简单 粉丝虾最正宗的做法 粉丝大虾的做法 蒜蓉粉丝虾的做法香哈菜谱 凉拌粉丝虾的做法步骤图,凉拌粉丝虾怎么做 蒜蓉粉丝虾做法的具体步骤有谁知道 为什么你的卤水越久越不香,有哪些制作秘籍? 帮忙想一个霸气的QQ群名字比如,自尊无上 还有配个群简介 请问struts2项目中,将所连接的数据库由oracle换成mysql,都需要修改哪些内容?谢谢! 光纤转换器